Ticket #999: for-arctic-2.darcs.patch

File for-arctic-2.darcs.patch, 615.5 KB (added by zooko, at 2011-04-06T21:00:11Z)
Line 
12 patches for repository zooko@tahoe-lafs.org:/home/source/darcs/tahoe-lafs/trunk:
2
3Fri Mar 25 14:35:14 MDT 2011  wilcoxjg@gmail.com
4  * storage: new mocking tests of storage server read and write
5  There are already tests of read and functionality in test_storage.py, but those tests let the code under test use a real filesystem whereas these tests mock all file system calls.
6
7Wed Apr  6 14:38:12 MDT 2011  zooko@zooko.com
8  * a bunch of incomplete work on #999, to be unrecorded in arctic's repo
9
10New patches:
11
12[storage: new mocking tests of storage server read and write
13wilcoxjg@gmail.com**20110325203514
14 Ignore-this: df65c3c4f061dd1516f88662023fdb41
15 There are already tests of read and functionality in test_storage.py, but those tests let the code under test use a real filesystem whereas these tests mock all file system calls.
16] {
17addfile ./src/allmydata/test/test_server.py
18hunk ./src/allmydata/test/test_server.py 1
19+from twisted.trial import unittest
20+
21+from StringIO import StringIO
22+
23+from allmydata.test.common_util import ReallyEqualMixin
24+
25+import mock
26+
27+# This is the code that we're going to be testing.
28+from allmydata.storage.server import StorageServer
29+
30+# The following share file contents was generated with
31+# storage.immutable.ShareFile from Tahoe-LAFS v1.8.2
32+# with share data == 'a'.
33+share_data = 'a\x00\x00\x00\x00xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\x00(\xde\x80'
34+share_file_data = '\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01' + share_data
35+
36+sharefname = 'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a/0'
37+
38+class TestServerConstruction(unittest.TestCase, ReallyEqualMixin):
39+    @mock.patch('__builtin__.open')
40+    def test_create_server(self, mockopen):
41+        """ This tests whether a server instance can be constructed. """
42+
43+        def call_open(fname, mode):
44+            if fname == 'testdir/bucket_counter.state':
45+                raise IOError(2, "No such file or directory: 'testdir/bucket_counter.state'")
46+            elif fname == 'testdir/lease_checker.state':
47+                raise IOError(2, "No such file or directory: 'testdir/lease_checker.state'")
48+            elif fname == 'testdir/lease_checker.history':
49+                return StringIO()
50+        mockopen.side_effect = call_open
51+
52+        # Now begin the test.
53+        s = StorageServer('testdir', 'testnodeidxxxxxxxxxx')
54+
55+        # You passed!
56+
57+class TestServer(unittest.TestCase, ReallyEqualMixin):
58+    @mock.patch('__builtin__.open')
59+    def setUp(self, mockopen):
60+        def call_open(fname, mode):
61+            if fname == 'testdir/bucket_counter.state':
62+                raise IOError(2, "No such file or directory: 'testdir/bucket_counter.state'")
63+            elif fname == 'testdir/lease_checker.state':
64+                raise IOError(2, "No such file or directory: 'testdir/lease_checker.state'")
65+            elif fname == 'testdir/lease_checker.history':
66+                return StringIO()
67+        mockopen.side_effect = call_open
68+
69+        self.s = StorageServer('testdir', 'testnodeidxxxxxxxxxx')
70+
71+
72+    @mock.patch('time.time')
73+    @mock.patch('os.mkdir')
74+    @mock.patch('__builtin__.open')
75+    @mock.patch('os.listdir')
76+    @mock.patch('os.path.isdir')
77+    def test_write_share(self, mockisdir, mocklistdir, mockopen, mockmkdir, mocktime):
78+        """Handle a report of corruption."""
79+
80+        def call_listdir(dirname):
81+            self.failUnlessReallyEqual(dirname, 'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a')
82+            raise OSError(2, "No such file or directory: 'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a'")
83+
84+        mocklistdir.side_effect = call_listdir
85+
86+        class MockFile:
87+            def __init__(self):
88+                self.buffer = ''
89+                self.pos = 0
90+            def write(self, instring):
91+                begin = self.pos
92+                padlen = begin - len(self.buffer)
93+                if padlen > 0:
94+                    self.buffer += '\x00' * padlen
95+                end = self.pos + len(instring)
96+                self.buffer = self.buffer[:begin]+instring+self.buffer[end:]
97+                self.pos = end
98+            def close(self):
99+                pass
100+            def seek(self, pos):
101+                self.pos = pos
102+            def read(self, numberbytes):
103+                return self.buffer[self.pos:self.pos+numberbytes]
104+            def tell(self):
105+                return self.pos
106+
107+        mocktime.return_value = 0
108+
109+        sharefile = MockFile()
110+        def call_open(fname, mode):
111+            self.failUnlessReallyEqual(fname, 'testdir/shares/incoming/or/orsxg5dtorxxeylhmvpws3temv4a/0' )
112+            return sharefile
113+
114+        mockopen.side_effect = call_open
115+        # Now begin the test.
116+        alreadygot, bs = self.s.remote_allocate_buckets('teststorage_index', 'x'*32, 'y'*32, set((0,)), 1, mock.Mock())
117+        print bs
118+        bs[0].remote_write(0, 'a')
119+        self.failUnlessReallyEqual(sharefile.buffer, share_file_data)
120+
121+
122+    @mock.patch('os.path.exists')
123+    @mock.patch('os.path.getsize')
124+    @mock.patch('__builtin__.open')
125+    @mock.patch('os.listdir')
126+    def test_read_share(self, mocklistdir, mockopen, mockgetsize, mockexists):
127+        """ This tests whether the code correctly finds and reads
128+        shares written out by old (Tahoe-LAFS <= v1.8.2)
129+        servers. There is a similar test in test_download, but that one
130+        is from the perspective of the client and exercises a deeper
131+        stack of code. This one is for exercising just the
132+        StorageServer object. """
133+
134+        def call_listdir(dirname):
135+            self.failUnlessReallyEqual(dirname,'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a')
136+            return ['0']
137+
138+        mocklistdir.side_effect = call_listdir
139+
140+        def call_open(fname, mode):
141+            self.failUnlessReallyEqual(fname, sharefname)
142+            self.failUnless('r' in mode, mode)
143+            self.failUnless('b' in mode, mode)
144+
145+            return StringIO(share_file_data)
146+        mockopen.side_effect = call_open
147+
148+        datalen = len(share_file_data)
149+        def call_getsize(fname):
150+            self.failUnlessReallyEqual(fname, sharefname)
151+            return datalen
152+        mockgetsize.side_effect = call_getsize
153+
154+        def call_exists(fname):
155+            self.failUnlessReallyEqual(fname, sharefname)
156+            return True
157+        mockexists.side_effect = call_exists
158+
159+        # Now begin the test.
160+        bs = self.s.remote_get_buckets('teststorage_index')
161+
162+        self.failUnlessEqual(len(bs), 1)
163+        b = bs[0]
164+        self.failUnlessReallyEqual(b.remote_read(0, datalen), share_data)
165+        # If you try to read past the end you get the as much data as is there.
166+        self.failUnlessReallyEqual(b.remote_read(0, datalen+20), share_data)
167+        # If you start reading past the end of the file you get the empty string.
168+        self.failUnlessReallyEqual(b.remote_read(datalen+1, 3), '')
169}
170[a bunch of incomplete work on #999, to be unrecorded in arctic's repo
171zooko@zooko.com**20110406203812
172 Ignore-this: bece4514b60b4a972e57fa50c87c9d0
173] {
174move ./src/allmydata/test/test_server.py ./src/allmydata/test/test_backends.py
175hunk ./docs/configuration.rst 582
176   [storage]
177   enabled = True
178   readonly = True
179-  sizelimit = 10000000000
180 
181   [helper]
182   enabled = True
183hunk ./docs/garbage-collection.rst 16
184 
185 When a file or directory in the virtual filesystem is no longer referenced,
186 the space that its shares occupied on each storage server can be freed,
187-making room for other shares. Tahoe currently uses a garbage collection
188+making room for other shares. Tahoe uses a garbage collection
189 ("GC") mechanism to implement this space-reclamation process. Each share has
190 one or more "leases", which are managed by clients who want the
191 file/directory to be retained. The storage server accepts each share for a
192hunk ./docs/garbage-collection.rst 34
193 the "lease-tradeoffs.svg" diagram to get an idea for the tradeoffs involved.
194 If lease renewal occurs quickly and with 100% reliability, than any renewal
195 time that is shorter than the lease duration will suffice, but a larger ratio
196-of duration-over-renewal-time will be more robust in the face of occasional
197+of lease duration to renewal time will be more robust in the face of occasional
198 delays or failures.
199 
200 The current recommended values for a small Tahoe grid are to renew the leases
201replace ./docs/garbage-collection.rst [A-Za-z_0-9\-\.] Tahoe Tahoe-LAFS
202hunk ./src/allmydata/client.py 228
203             sharetypes.append("mutable")
204         expiration_sharetypes = tuple(sharetypes)
205 
206+        if self.get_config("storage", "backend", "filesystem") == "filesystem":
207+            xyz
208+        xyz
209         ss = StorageServer(storedir, self.nodeid,
210                            reserved_space=reserved,
211                            discard_storage=discard,
212hunk ./src/allmydata/interfaces.py 250
213         store that on disk.
214         """
215 
216+class IStorageBackend(Interface):
217+    """
218+    Objects of this kind live on the server side and are used by the
219+    storage server object.
220+    """
221+    def get_available_space(self, reserved_space):
222+        """ Returns available space for share storage in bytes, or
223+        None this information is not available or if the available
224+        space is unlimited.
225+
226+        If the backend is configured for read-only mode then this will
227+        return 0.
228+
229+        reserved_space is how many bytes to subtract from the answer, so
230+        you can pass how many bytes you would like to leave unused on this
231+        filesystem as reserved_space. """
232+
233 class IStorageBucketWriter(Interface):
234     """
235     Objects of this kind live on the client side.
236hunk ./src/allmydata/interfaces.py 2393
237 
238 class EmptyPathnameComponentError(Exception):
239     """The webapi disallows empty pathname components."""
240+
241+class IShareStore(Interface):
242+    pass
243+
244hunk ./src/allmydata/storage/crawler.py 68
245     cpu_slice = 1.0 # use up to 1.0 seconds before yielding
246     minimum_cycle_time = 300 # don't run a cycle faster than this
247 
248-    def __init__(self, server, statefile, allowed_cpu_percentage=None):
249+    def __init__(self, backend, statefile, allowed_cpu_percentage=None):
250         service.MultiService.__init__(self)
251         if allowed_cpu_percentage is not None:
252             self.allowed_cpu_percentage = allowed_cpu_percentage
253hunk ./src/allmydata/storage/crawler.py 72
254-        self.server = server
255-        self.sharedir = server.sharedir
256-        self.statefile = statefile
257+        self.backend = backend
258         self.prefixes = [si_b2a(struct.pack(">H", i << (16-10)))[:2]
259                          for i in range(2**10)]
260         self.prefixes.sort()
261hunk ./src/allmydata/storage/crawler.py 446
262 
263     minimum_cycle_time = 60*60 # we don't need this more than once an hour
264 
265-    def __init__(self, server, statefile, num_sample_prefixes=1):
266-        ShareCrawler.__init__(self, server, statefile)
267+    def __init__(self, statefile, num_sample_prefixes=1):
268+        ShareCrawler.__init__(self, statefile)
269         self.num_sample_prefixes = num_sample_prefixes
270 
271     def add_initial_state(self):
272hunk ./src/allmydata/storage/expirer.py 15
273     removed.
274 
275     I collect statistics on the leases and make these available to a web
276-    status page, including::
277+    status page, including:
278 
279     Space recovered during this cycle-so-far:
280      actual (only if expiration_enabled=True):
281hunk ./src/allmydata/storage/expirer.py 51
282     slow_start = 360 # wait 6 minutes after startup
283     minimum_cycle_time = 12*60*60 # not more than twice per day
284 
285-    def __init__(self, server, statefile, historyfile,
286+    def __init__(self, statefile, historyfile,
287                  expiration_enabled, mode,
288                  override_lease_duration, # used if expiration_mode=="age"
289                  cutoff_date, # used if expiration_mode=="cutoff-date"
290hunk ./src/allmydata/storage/expirer.py 71
291         else:
292             raise ValueError("GC mode '%s' must be 'age' or 'cutoff-date'" % mode)
293         self.sharetypes_to_expire = sharetypes
294-        ShareCrawler.__init__(self, server, statefile)
295+        ShareCrawler.__init__(self, statefile)
296 
297     def add_initial_state(self):
298         # we fill ["cycle-to-date"] here (even though they will be reset in
299hunk ./src/allmydata/storage/immutable.py 43
300     sharetype = "immutable"
301 
302     def __init__(self, filename, max_size=None, create=False):
303-        """ If max_size is not None then I won't allow more than max_size to be written to me. If create=True and max_size must not be None. """
304+        """ If max_size is not None then I won't allow more than
305+        max_size to be written to me. If create=True then max_size
306+        must not be None. """
307         precondition((max_size is not None) or (not create), max_size, create)
308         self.home = filename
309         self._max_size = max_size
310hunk ./src/allmydata/storage/immutable.py 86
311 
312     def read_share_data(self, offset, length):
313         precondition(offset >= 0)
314-        # reads beyond the end of the data are truncated. Reads that start
315-        # beyond the end of the data return an empty string. I wonder why
316-        # Python doesn't do the following computation for me?
317+        # Reads beyond the end of the data are truncated. Reads that start
318+        # beyond the end of the data return an empty string.
319         seekpos = self._data_offset+offset
320         fsize = os.path.getsize(self.home)
321         actuallength = max(0, min(length, fsize-seekpos))
322hunk ./src/allmydata/storage/server.py 7
323 from twisted.application import service
324 
325 from zope.interface import implements
326-from allmydata.interfaces import RIStorageServer, IStatsProducer
327+from allmydata.interfaces import RIStorageServer, IStatsProducer, IShareStore
328 from allmydata.util import fileutil, idlib, log, time_format
329 import allmydata # for __full_version__
330 
331hunk ./src/allmydata/storage/server.py 20
332 from allmydata.storage.crawler import BucketCountingCrawler
333 from allmydata.storage.expirer import LeaseCheckingCrawler
334 
335+from zope.interface import implements
336+
337+# A Backend is a MultiService so that its crawlers (if it has any) can
338+# be started and stopped.
339+class Backend(service.MultiService):
340+    implements(RIStorageServer, IStatsProducer)
341+    def __init__(self):
342+        service.MultiService.__init__(self)
343+
344+class NullBackend(Backend):
345+    def __init__(self):
346+        Backend.__init__(self)
347+
348+class FSBackend(Backend):
349+    def __init__(self, storedir, readonly=False, reserved_space=0):
350+        Backend.__init__(self)
351+
352+        self._setup_storage(storedir, readonly, reserved_space)
353+        self._setup_corruption_advisory()
354+        self._setup_bucket_counter()
355+        self._setup_lease_checkerf()
356+
357+    def _setup_storage(self, storedir, readonly, reserved_space):
358+        self.storedir = storedir
359+        self.readonly = readonly
360+        self.reserved_space = int(reserved_space)
361+        if self.reserved_space:
362+            if self.get_available_space() is None:
363+                log.msg("warning: [storage]reserved_space= is set, but this platform does not support an API to get disk statistics (statvfs(2) or GetDiskFreeSpaceEx), so this reservation cannot be honored",
364+                        umid="0wZ27w", level=log.UNUSUAL)
365+
366+        self.sharedir = os.path.join(self.storedir, "shares")
367+        fileutil.make_dirs(self.sharedir)
368+        self.incomingdir = os.path.join(self.sharedir, 'incoming')
369+        self._clean_incomplete()
370+
371+    def _clean_incomplete(self):
372+        fileutil.rm_dir(self.incomingdir)
373+        fileutil.make_dirs(self.incomingdir)
374+
375+    def _setup_corruption_advisory(self):
376+        # we don't actually create the corruption-advisory dir until necessary
377+        self.corruption_advisory_dir = os.path.join(self.storedir,
378+                                                    "corruption-advisories")
379+
380+    def _setup_bucket_counter(self):
381+        statefile = os.path.join(self.storedir, "bucket_counter.state")
382+        self.bucket_counter = BucketCountingCrawler(statefile)
383+        self.bucket_counter.setServiceParent(self)
384+
385+    def _setup_lease_checkerf(self):
386+        statefile = os.path.join(self.storedir, "lease_checker.state")
387+        historyfile = os.path.join(self.storedir, "lease_checker.history")
388+        self.lease_checker = LeaseCheckingCrawler(statefile, historyfile,
389+                                   expiration_enabled, expiration_mode,
390+                                   expiration_override_lease_duration,
391+                                   expiration_cutoff_date,
392+                                   expiration_sharetypes)
393+        self.lease_checker.setServiceParent(self)
394+
395+    def get_available_space(self):
396+        if self.readonly:
397+            return 0
398+        return fileutil.get_available_space(self.storedir, self.reserved_space)
399+
400 # storage/
401 # storage/shares/incoming
402 #   incoming/ holds temp dirs named $START/$STORAGEINDEX/$SHARENUM which will
403hunk ./src/allmydata/storage/server.py 105
404     name = 'storage'
405     LeaseCheckerClass = LeaseCheckingCrawler
406 
407-    def __init__(self, storedir, nodeid, reserved_space=0,
408-                 discard_storage=False, readonly_storage=False,
409+    def __init__(self, nodeid, backend, reserved_space=0,
410+                 readonly_storage=False,
411                  stats_provider=None,
412                  expiration_enabled=False,
413                  expiration_mode="age",
414hunk ./src/allmydata/storage/server.py 117
415         assert isinstance(nodeid, str)
416         assert len(nodeid) == 20
417         self.my_nodeid = nodeid
418-        self.storedir = storedir
419-        sharedir = os.path.join(storedir, "shares")
420-        fileutil.make_dirs(sharedir)
421-        self.sharedir = sharedir
422-        # we don't actually create the corruption-advisory dir until necessary
423-        self.corruption_advisory_dir = os.path.join(storedir,
424-                                                    "corruption-advisories")
425-        self.reserved_space = int(reserved_space)
426-        self.no_storage = discard_storage
427-        self.readonly_storage = readonly_storage
428         self.stats_provider = stats_provider
429         if self.stats_provider:
430             self.stats_provider.register_producer(self)
431hunk ./src/allmydata/storage/server.py 120
432-        self.incomingdir = os.path.join(sharedir, 'incoming')
433-        self._clean_incomplete()
434-        fileutil.make_dirs(self.incomingdir)
435         self._active_writers = weakref.WeakKeyDictionary()
436hunk ./src/allmydata/storage/server.py 121
437+        self.backend = backend
438+        self.backend.setServiceParent(self)
439         log.msg("StorageServer created", facility="tahoe.storage")
440 
441hunk ./src/allmydata/storage/server.py 125
442-        if reserved_space:
443-            if self.get_available_space() is None:
444-                log.msg("warning: [storage]reserved_space= is set, but this platform does not support an API to get disk statistics (statvfs(2) or GetDiskFreeSpaceEx), so this reservation cannot be honored",
445-                        umin="0wZ27w", level=log.UNUSUAL)
446-
447         self.latencies = {"allocate": [], # immutable
448                           "write": [],
449                           "close": [],
450hunk ./src/allmydata/storage/server.py 136
451                           "renew": [],
452                           "cancel": [],
453                           }
454-        self.add_bucket_counter()
455-
456-        statefile = os.path.join(self.storedir, "lease_checker.state")
457-        historyfile = os.path.join(self.storedir, "lease_checker.history")
458-        klass = self.LeaseCheckerClass
459-        self.lease_checker = klass(self, statefile, historyfile,
460-                                   expiration_enabled, expiration_mode,
461-                                   expiration_override_lease_duration,
462-                                   expiration_cutoff_date,
463-                                   expiration_sharetypes)
464-        self.lease_checker.setServiceParent(self)
465 
466     def __repr__(self):
467         return "<StorageServer %s>" % (idlib.shortnodeid_b2a(self.my_nodeid),)
468hunk ./src/allmydata/storage/server.py 140
469 
470-    def add_bucket_counter(self):
471-        statefile = os.path.join(self.storedir, "bucket_counter.state")
472-        self.bucket_counter = BucketCountingCrawler(self, statefile)
473-        self.bucket_counter.setServiceParent(self)
474-
475     def count(self, name, delta=1):
476         if self.stats_provider:
477             self.stats_provider.count("storage_server." + name, delta)
478hunk ./src/allmydata/storage/server.py 183
479             kwargs["facility"] = "tahoe.storage"
480         return log.msg(*args, **kwargs)
481 
482-    def _clean_incomplete(self):
483-        fileutil.rm_dir(self.incomingdir)
484-
485     def get_stats(self):
486         # remember: RIStatsProvider requires that our return dict
487         # contains numeric values.
488hunk ./src/allmydata/storage/server.py 219
489             stats['storage_server.total_bucket_count'] = bucket_count
490         return stats
491 
492-    def get_available_space(self):
493-        """Returns available space for share storage in bytes, or None if no
494-        API to get this information is available."""
495-
496-        if self.readonly_storage:
497-            return 0
498-        return fileutil.get_available_space(self.storedir, self.reserved_space)
499-
500     def allocated_size(self):
501         space = 0
502         for bw in self._active_writers:
503hunk ./src/allmydata/storage/server.py 226
504         return space
505 
506     def remote_get_version(self):
507-        remaining_space = self.get_available_space()
508+        remaining_space = self.backend.get_available_space()
509         if remaining_space is None:
510             # We're on a platform that has no API to get disk stats.
511             remaining_space = 2**64
512hunk ./src/allmydata/storage/server.py 267
513 
514         max_space_per_bucket = allocated_size
515 
516-        remaining_space = self.get_available_space()
517+        remaining_space = self.backend.get_available_space()
518         limited = remaining_space is not None
519         if limited:
520             # this is a bit conservative, since some of this allocated_size()
521hunk ./src/allmydata/test/common_util.py 20
522 
523 def flip_one_bit(s, offset=0, size=None):
524     """ flip one random bit of the string s, in a byte greater than or equal to offset and less
525-    than offset+size. """
526+    than offset+size. Return the new string. """
527     if size is None:
528         size=len(s)
529     i = randrange(offset, offset+size)
530hunk ./src/allmydata/test/test_backends.py 10
531 import mock
532 
533 # This is the code that we're going to be testing.
534-from allmydata.storage.server import StorageServer
535+from allmydata.storage.server import StorageServer, FSBackend, NullBackend
536 
537 # The following share file contents was generated with
538 # storage.immutable.ShareFile from Tahoe-LAFS v1.8.2
539hunk ./src/allmydata/test/test_backends.py 21
540 sharefname = 'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a/0'
541 
542 class TestServerConstruction(unittest.TestCase, ReallyEqualMixin):
543+    @mock.patch('time.time')
544+    @mock.patch('os.mkdir')
545+    @mock.patch('__builtin__.open')
546+    @mock.patch('os.listdir')
547+    @mock.patch('os.path.isdir')
548+    def test_create_server_null_backend(self, mockisdir, mocklistdir, mockopen, mockmkdir, mocktime):
549+        """ This tests whether a server instance can be constructed
550+        with a null backend. The server instance fails the test if it
551+        tries to read or write to the file system. """
552+
553+        # Now begin the test.
554+        s = StorageServer('testnodeidxxxxxxxxxx', backend=NullBackend())
555+
556+        self.failIf(mockisdir.called)
557+        self.failIf(mocklistdir.called)
558+        self.failIf(mockopen.called)
559+        self.failIf(mockmkdir.called)
560+        self.failIf(mocktime.called)
561+
562+        # You passed!
563+
564+    @mock.patch('time.time')
565+    @mock.patch('os.mkdir')
566     @mock.patch('__builtin__.open')
567hunk ./src/allmydata/test/test_backends.py 45
568-    def test_create_server(self, mockopen):
569-        """ This tests whether a server instance can be constructed. """
570+    @mock.patch('os.listdir')
571+    @mock.patch('os.path.isdir')
572+    def test_create_server_fs_backend(self, mockisdir, mocklistdir, mockopen, mockmkdir, mocktime):
573+        """ This tests whether a server instance can be constructed
574+        with a filesystem backend. To pass the test, it has to use the
575+        filesystem in only the prescribed ways. """
576 
577         def call_open(fname, mode):
578             if fname == 'testdir/bucket_counter.state':
579hunk ./src/allmydata/test/test_backends.py 59
580                 raise IOError(2, "No such file or directory: 'testdir/lease_checker.state'")
581             elif fname == 'testdir/lease_checker.history':
582                 return StringIO()
583+            else:
584+                self.fail("Server with FS backend tried to open '%s' in mode '%s'" % (fname, mode))
585         mockopen.side_effect = call_open
586 
587         # Now begin the test.
588hunk ./src/allmydata/test/test_backends.py 64
589-        s = StorageServer('testdir', 'testnodeidxxxxxxxxxx')
590+        s = StorageServer('testnodeidxxxxxxxxxx', backend=FSBackend('teststoredir'))
591+
592+        self.failIf(mockisdir.called)
593+        self.failIf(mocklistdir.called)
594+        self.failIf(mockopen.called)
595+        self.failIf(mockmkdir.called)
596+        self.failIf(mocktime.called)
597 
598         # You passed!
599 
600hunk ./src/allmydata/test/test_backends.py 74
601-class TestServer(unittest.TestCase, ReallyEqualMixin):
602+class TestServerFSBackend(unittest.TestCase, ReallyEqualMixin):
603     @mock.patch('__builtin__.open')
604     def setUp(self, mockopen):
605         def call_open(fname, mode):
606hunk ./src/allmydata/test/test_backends.py 86
607                 return StringIO()
608         mockopen.side_effect = call_open
609 
610-        self.s = StorageServer('testdir', 'testnodeidxxxxxxxxxx')
611-
612+        self.s = StorageServer('testnodeidxxxxxxxxxx', backend=FSBackend('teststoredir'))
613 
614     @mock.patch('time.time')
615     @mock.patch('os.mkdir')
616hunk ./src/allmydata/test/test_backends.py 94
617     @mock.patch('os.listdir')
618     @mock.patch('os.path.isdir')
619     def test_write_share(self, mockisdir, mocklistdir, mockopen, mockmkdir, mocktime):
620-        """Handle a report of corruption."""
621+        """ Write a new share. """
622 
623         def call_listdir(dirname):
624             self.failUnlessReallyEqual(dirname, 'testdir/shares/or/orsxg5dtorxxeylhmvpws3temv4a')
625hunk ./src/allmydata/test/test_backends.py 137
626         bs[0].remote_write(0, 'a')
627         self.failUnlessReallyEqual(sharefile.buffer, share_file_data)
628 
629-
630     @mock.patch('os.path.exists')
631     @mock.patch('os.path.getsize')
632     @mock.patch('__builtin__.open')
633}
634
635Context:
636
637[immutable: use PrefixingLogMixin to organize logging in Tahoe2PeerSelector and add more detailed messages about peer
638zooko@zooko.com**20100719082000
639 Ignore-this: e034c4988b327f7e138a106d913a3082
640]
641[trivial: remove unused import detected by pyflakes, and remove trailing whitespace
642zooko@zooko.com**20090305223204
643 Ignore-this: 991001a50da1a357a519c3cb880d7ee1
644]
645[immutable: extend the tests to check that the shares that got uploaded really do make a sufficiently Happy distribution
646zooko@zooko.com**20100719045047
647 Ignore-this: 89c33a7b795e23018667351045a8d5d0
648 This patch also renames some instances of "find_shares()" to "find_all_shares()" and other instances to "find_uri_shares()" as appropriate -- the conflation between those names confused me at first when writing these tests.
649]
650[test_repairer: add (commented-out) test_each_byte, to see exactly what the
651Brian Warner <warner@lothar.com>**20100110203552
652 Ignore-this: 8e84277d5304752edeff052b97821815
653 Verifier misses
654 
655 The results (described in #819) match our expectations: it misses corruption
656 in unused share fields and in most container fields (which are only visible
657 to the storage server, not the client). 1265 bytes of a 2753 byte
658 share (hosting a 56-byte file with an artifically small segment size) are
659 unused, mostly in the unused tail of the overallocated UEB space (765 bytes),
660 and the allocated-but-unwritten plaintext_hash_tree (480 bytes).
661]
662[Verifier: check the full block-hash-tree on each share
663Brian Warner <warner@lothar.com>**20091005214844
664 Ignore-this: 3f7ccf6d253f32340f1bf1da27803eee
665 
666 Removed the .todo from two test_repairer tests that check this. The only
667 remaining .todos are on the three crypttext-hash-tree tests.
668]
669[Verifier: check the full share-hash chain on each share
670Brian Warner <warner@lothar.com>**20091005213443
671 Ignore-this: 3d30111904158bec06a4eac22fd39d17
672 
673 Removed the .todo from two test_repairer tests that check this.
674]
675[immutable/checker.py: rearrange code a little bit, make it easier to follow
676Brian Warner <warner@lothar.com>**20091005200252
677 Ignore-this: 91cc303fab66faf717433a709f785fb5
678]
679[Correct harmless indentation errors found by pylint
680david-sarah@jacaranda.org**20100226052151
681 Ignore-this: 41335bce830700b18b80b6e00b45aef5
682]
683[setup: if executing lsb_release doesn't work, fall back to parsing /etc/lsb-release before falling back to platform.dist()
684zooko@zooko.com**20080923162858
685 An explanatio of why we do it this way is in the docstring.
686]
687[setup: if invoking lsb_release doesn't work (which it doesn't on our etch buildslave), then fall back to the Python Standard Library's platform.dist() function
688zooko@zooko.com**20080923154820]
689[Improvements to test_hung_server, and fix for status updates in download.py
690david-sarah@jacaranda.org**20100130064303
691 Ignore-this: dd889c643afdcf0f86d55855aafda6ad
692]
693[immutable: fix bug in tests, change line-endings to unix style, add comment
694zooko@zooko.com**20100129184237
695 Ignore-this: f6bd875fe974c55c881e05eddf8d3436
696]
697[New tests for #928
698david-sarah@jacaranda.org**20100129123845
699 Ignore-this: 5c520f40141f0d9c000ffb05a4698995
700]
701[immutable: download from the first servers which provide at least K buckets instead of waiting for all servers to reply
702zooko@zooko.com**20100127233417
703 Ignore-this: c855355a40d96827e1d0c469a8d8ab3f
704 This should put an end to the phenomenon I've been seeing that a single hung server can cause all downloads on a grid to hang.  Also it should speed up all downloads by (a) not-waiting for responses to queries that it doesn't need, and (b) downloading shares from the servers which answered the initial query the fastest.
705 Also, do not count how many buckets you've gotten when deciding whether the download has enough shares or not -- instead count how many buckets to *unique* shares that you've gotten.  This appears to improve a slightly weird behavior in the current download code in which receiving >= K different buckets all to the same sharenumber would make it think it had enough to download the file when in fact it hadn't.
706 This patch needs tests before it is actually ready for trunk.
707]
708[M-x whitespace-cleanup
709zooko@zooko.com**20100718032739
710 Ignore-this: babfd4af6ad2fc885c957fd5c8b10c3f
711]
712[Improve code coverage of the Tahoe2PeerSelector tests.
713Kevan Carstensen <kevan@isnotajoke.com>**20100515032913
714 Ignore-this: 793151b63ffa65fdae6915db22d9924a
715]
716[immutable: test for #1124
717zooko@zooko.com**20100718222907
718 Ignore-this: 1766e3cbab92ea2a9e246f40eb6e770b
719]
720[immutable: test for #1118
721zooko@zooko.com**20100718221537
722 Ignore-this: 8882aabe2aaec6a0148c87e735d817ad
723]
724[Revisions of the #778 tests, per reviewers' comments
725Kevan Carstensen <kevan@isnotajoke.com>**20100514012542
726 Ignore-this: 735bbc7f663dce633caeb3b66a53cf6e
727 
728 - Fix comments and confusing naming.
729 - Add tests for the new error messages suggested by David-Sarah
730   and Zooko.
731 - Alter existing tests for new error messages.
732 - Make sure that the tests continue to work with the trunk.
733 - Add a test for a mutual disjointedness assertion that I added to
734   upload.servers_of_happiness.
735 - Fix the comments to correctly reflect read-onlyness
736 - Add a test for an edge case in should_add_server
737 - Add an assertion to make sure that share redistribution works as it
738   should
739 - Alter tests to work with revised servers_of_happiness semantics
740 - Remove tests for should_add_server, since that function no longer exists.
741 - Alter tests to know about merge_peers, and to use it before calling
742   servers_of_happiness.
743 - Add tests for merge_peers.
744 - Add Zooko's puzzles to the tests.
745 - Edit encoding tests to expect the new kind of failure message.
746 - Edit tests to expect error messages with the word "only" moved as far
747   to the right as possible.
748 - Extended and cleaned up some helper functions.
749 - Changed some tests to call more appropriate helper functions.
750 - Added a test for the failing redistribution algorithm
751 - Added a test for the progress message
752 - Added a test for the upper bound on readonly peer share discovery.
753 
754]
755[Add tests for the behavior described in #834.
756Kevan Carstensen <kevan@isnotajoke.com>**20091123012008
757 Ignore-this: d8e0aa0f3f7965ce9b5cea843c6d6f9f
758]
759[upload.py: fix #1118 by aborting newly-homeless buckets when reassignment runs. This makes a previously failing assert correct. This version refactors 'abort' into two methods, rather than using a default argument.
760david-sarah@jacaranda.org**20100719044655
761 Ignore-this: 142d182c0739986812140bb8387077d5
762]
763[immutable/upload.py: abort buckets if peer selection fails
764Kevan Carstensen <kevan@isnotajoke.com>**20100715231714
765 Ignore-this: 2a0b643a22284df292d8ed9d91b1fd37
766]
767[Fix up the behavior of #778, per reviewers' comments
768Kevan Carstensen <kevan@isnotajoke.com>**20100514004917
769 Ignore-this: 9c20b60716125278b5456e8feb396bff
770 
771   - Make some important utility functions clearer and more thoroughly
772     documented.
773   - Assert in upload.servers_of_happiness that the buckets attributes
774     of PeerTrackers passed to it are mutually disjoint.
775   - Get rid of some silly non-Pythonisms that I didn't see when I first
776     wrote these patches.
777   - Make sure that should_add_server returns true when queried about a
778     shnum that it doesn't know about yet.
779   - Change Tahoe2PeerSelector.preexisting_shares to map a shareid to a set
780     of peerids, alter dependencies to deal with that.
781   - Remove upload.should_add_servers, because it is no longer necessary
782   - Move upload.shares_of_happiness and upload.shares_by_server to a utility
783     file.
784   - Change some points in Tahoe2PeerSelector.
785   - Compute servers_of_happiness using a bipartite matching algorithm that
786     we know is optimal instead of an ad-hoc greedy algorithm that isn't.
787   - Change servers_of_happiness to just take a sharemap as an argument,
788     change its callers to merge existing_shares and used_peers before
789     calling it.
790   - Change an error message in the encoder to be more appropriate for
791     servers of happiness.
792   - Clarify the wording of an error message in immutable/upload.py
793   - Refactor a happiness failure message to happinessutil.py, and make
794     immutable/upload.py and immutable/encode.py use it.
795   - Move the word "only" as far to the right as possible in failure
796     messages.
797   - Use a better definition of progress during peer selection.
798   - Do read-only peer share detection queries in parallel, not sequentially.
799   - Clean up logging semantics; print the query statistics whenever an
800     upload is unsuccessful, not just in one case.
801 
802]
803[upload: use WriteBucketProxy_v2 when uploading a large file (with shares larger than 4GiB). This finally closes #346. I think we can now handle immutable files up to 48EiB.
804warner@allmydata.com**20090113021442]
805[Alter the signature of set_shareholders in IEncoder to add a 'servermap' parameter, which gives IEncoders enough information to perform a sane check for servers_of_happiness.
806Kevan Carstensen <kevan@isnotajoke.com>**20091104033241
807 Ignore-this: b3a6649a8ac66431beca1026a31fed94
808]
809[Alter the error message when an upload fails, per some comments in #778.
810Kevan Carstensen <kevan@isnotajoke.com>**20091230210344
811 Ignore-this: ba97422b2f9737c46abeb828727beb1
812 
813 When I first implemented #778, I just altered the error messages to refer to
814 servers where they referred to shares. The resulting error messages weren't
815 very good. These are a bit better.
816]
817[Alter the error message returned when peer selection fails
818Kevan Carstensen <kevan@isnotajoke.com>**20091123002405
819 Ignore-this: b2a7dc163edcab8d9613bfd6907e5166
820 
821 The Tahoe2PeerSelector returned either NoSharesError or NotEnoughSharesError
822 for a variety of error conditions that weren't informatively described by them.
823 This patch creates a new error, UploadHappinessError, replaces uses of
824 NoSharesError and NotEnoughSharesError with it, and alters the error message
825 raised with the errors to be more in line with the new servers_of_happiness
826 behavior. See ticket #834 for more information.
827]
828[Eliminate overcounting iof servers_of_happiness in Tahoe2PeerSelector; also reorganize some things.
829Kevan Carstensen <kevan@isnotajoke.com>**20091118014542
830 Ignore-this: a6cb032cbff74f4f9d4238faebd99868
831]
832[Alter Tahoe2PeerSelector to make sure that it recognizes existing shares on readonly servers, fixing an issue in #778
833Kevan Carstensen <kevan@isnotajoke.com>**20091116192805
834 Ignore-this: 15289f4d709e03851ed0587b286fd955
835]
836[trailing-whitespace eradication, no functional changes
837warner@allmydata.com**20071101222247]
838[Alter 'immutable/encode.py' and 'immutable/upload.py' to use servers_of_happiness instead of shares_of_happiness.
839Kevan Carstensen <kevan@isnotajoke.com>**20091104111222
840 Ignore-this: abb3283314820a8bbf9b5d0cbfbb57c8
841]
842[upload: remove Tahoe3 peer-selection algorithm
843warner@lothar.com**20070916082611]
844[storage: use fileutil's version of get_disk_stats() and get_available_space(), use mockery/fakery in tests, enable large share test on platforms with sparse files and if > 4 GiB of disk space is currently available
845zooko@zooko.com**20100910173629
846 Ignore-this: 1304f1164c661de6d5304f993eb9b27b
847]
848[test_storage.py: change skip note for test_large_share to say that Windows doesn't support sparse files. refs #569
849david-sarah@jacaranda.org**20100805022612
850 Ignore-this: 85c807a536dc4eeb8bf14980028bb05b
851]
852[storage: disable test_large_share again: my linux laptop has less than 4 GiB free
853zooko@zooko.com**20090131041649
854 Ignore-this: da931a572a88699371057f932106b375
855]
856[storage: enable the test of a share larger than 2 GiB; this will probably be too expensive on Mac OS X, but I think it won't be on all the other platforms ; I will probably set it to SkipTest if the sys.platform is Mac after seeing the results of this buildbot run
857zooko@zooko.com**20090128223312
858 Ignore-this: 1b08b73b8f9ec4b5f629b734c556f2ed
859]
860[immutable: skip the test of large files, because that is too hard on the host if it doesn't efficiently handle sparse files
861zooko@zooko.com**20090105230727
862 Ignore-this: 7d35a6cdb1ea6be2adf0e6dacefe01a7
863]
864[fileutil: copy in the get_disk_stats() and get_available_space() functions from storage/server.py
865zooko@zooko.com**20100910173520
866 Ignore-this: 8b15569715f710f4fc5092f7ca109253
867]
868[util.fileutil, test.test_util: add abspath_expanduser_unicode function, to work around <http://bugs.python.org/issue3426>. util.encodingutil: add a convenience function argv_to_abspath.
869david-sarah@jacaranda.org**20100721231507
870 Ignore-this: eee6904d1f65a733ff35190879844d08
871]
872[util/statistics: add tests, fix mean_repair_cost
873warner@lothar.com**20090215222326
874 Ignore-this: c576eabc74c23b170702018fc3c122d9
875]
876[stringutils.py: Add encoding argument to quote_output. Also work around a bug in locale.getpreferredencoding on older Pythons.
877david-sarah@jacaranda.org**20100616042012
878 Ignore-this: 48174c37ad95205997e4d3cdd81f1e28
879]
880[Rename stringutils to encodingutil, and drop listdir_unicode and open_unicode (since the Python stdlib functions work fine with Unicode paths). Also move some utility functions to fileutil.
881david-sarah@jacaranda.org**20100712003015
882 Ignore-this: 103b809d180df17a7283077c3104c7be
883]
884[test_stringutils.py: trivial error in exception message for skipped test.
885david-sarah@jacaranda.org**20100607061455
886 Ignore-this: f261a5d4e2b8fe3bcc37e02539ba1ae2
887]
888[Back out Windows-specific Unicode argument support for v1.7.
889david-sarah@jacaranda.org**20100609000803
890 Ignore-this: b230ffe6fdaf9a0d85dfe745b37b42fb
891]
892[Fix for Unicode-related test failures on Zooko's OS X 10.6 machine.
893david-sarah@jacaranda.org**20100609055448
894 Ignore-this: 395ad16429e56623edfa74457a121190
895]
896[test_cli.py: remove invalid 'test_listdir_unicode_bad' test.
897david-sarah@jacaranda.org**20100607183730
898 Ignore-this: fadfe87980dc1862f349bfcc21b2145f
899]
900[test_stringutils.py: Fix test failure on CentOS builder, possibly Python 2.4.3-related.
901david-sarah@jacaranda.org**20100609065056
902 Ignore-this: 503b561b213baf1b92ae641f2fdf080a
903]
904[More Unicode test fixes.
905david-sarah@jacaranda.org**20100607053358
906 Ignore-this: 6a271fb77c31f28cb7bdba63b26a2dd2
907]
908[Unicode fixes for platforms with non-native-Unicode filesystems.
909david-sarah@jacaranda.org**20100607043238
910 Ignore-this: 2134dc1793c4f8e50350bd749c4c98c2
911]
912[Provisional patch to NFC-normalize filenames going in and out of Tahoe directories.
913david-sarah@jacaranda.org**20100616031450
914 Ignore-this: ed08c9d8df37ef0b7cca42bb562c996b
915]
916[dirnode: fix my remarkably-consistent 'metdadata' typo
917warner@allmydata.com**20081003010845]
918[trivial: removed unused import noticed by pyflakes
919zooko@zooko.com**20090709130513
920 Ignore-this: 63257c9e8481fdcf617f04cc48d95d03
921]
922[Add must_exist, must_be_directory, and must_be_file arguments to DirectoryNode.delete. This will be used to fixes a minor condition in the SFTP frontend.
923david-sarah@jacaranda.org**20100527194529
924 Ignore-this: 6d8114cef4450c52c57639f82852716f
925]
926[stringutils.py: don't NFC-normalize the output of listdir_unicode.
927david-sarah@jacaranda.org**20100617015537
928 Ignore-this: 93c9b6f3d7c6812a0afa8d9e1b0b4faa
929]
930[test_stringutils.py: take account of the output of listdir_unicode no longer being normalized. Also use Unicode escapes, not UTF-8.
931david-sarah@jacaranda.org**20100617034409
932 Ignore-this: 47f3f072f0e2efea0abeac130f84c56f
933]
934[test_backupdb.py: skip test_unicode if we can't represent the test filenames.
935david-sarah@jacaranda.org**20100619022620
936 Ignore-this: 6ee564b6c07f9bb0e89a25dc5b37194f
937]
938[tahoe backup: unicode tests.
939david-sarah@jacaranda.org**20100618035211
940 Ignore-this: 88ebab9f3218f083fdc635bff6599b60
941]
942[Allow URIs passed in the initial JSON for t=mkdir-with-children, t=mkdir-immutable to be Unicode. Also pass the name of each child into nodemaker.create_from_cap for error reporting.
943david-sarah@jacaranda.org**20100711195525
944 Ignore-this: deac32d8b91ba26ede18905d3f7d2b93
945]
946[docs/configuration.rst: fix a typo in the previous correction, and correct another error ('[storage]readonly_storage' should be '[storage]readonly').
947david-sarah@jacaranda.org**20110123023955
948 Ignore-this: 2f9d3fe3c25da1b369618b8cf0867a58
949]
950[docs/configuration.rst: changes to formatting (mainly putting commands and filenames in monospace).
951david-sarah@jacaranda.org**20101212181828
952 Ignore-this: 8a1480e2d5f43bee678476424615b50f
953]
954[Update hyperlinks between docs, and linkify some external references. refs #1225
955david-sarah@jacaranda.org**20101212051459
956 Ignore-this: cd43a4c3d3de1f832abfa88d5fc4ace1
957]
958[docs: remove the redundant (and therefore bit-rotting) parts of mutable-DSA.txt and instead refer to mutable.txt
959zooko@zooko.com**20080429225158]
960[docs/historical: move 'tahoe2' from wiki into source tree
961warner@allmydata.com**20080603014331]
962[add docs/proposed/GridID.txt (cleaning out some of my old branches)
963warner@lothar.com**20090621191204]
964[docs: fix tab-vs-spaces, make some CLI examples <tt>/"literal", wrap some to
965Brian Warner <warner@lothar.com>**20101015060606
966 Ignore-this: eae08bdf0afb19a2fbf41c31e70a8122
967 80-cols, remove spurious whitespace. Add rst2html.py rule to Makefile.
968]
969[docs/Makefile: rules to turn our SVG images into .png and .eps forms
970warner@lothar.com**20080102230022]
971[docs/known_issues.rst: Add section on traffic analysis. Fix URL for current version of file.
972david-sarah@jacaranda.org**20101024234259
973 Ignore-this: f3416e79d3bb833f5118da23e85723ad
974]
975[Release v1.8.1. refs #1242
976david-sarah@jacaranda.org**20101128204738
977 Ignore-this: b0793a8eb0a711cbcaebc566c37920e4
978]
979[NEWS: note dependency updates to pycryptopp and pycrypto.
980david-sarah@jacaranda.org**20100924191207
981 Ignore-this: eeaf5c9c9104f24c450c2ec4482ac1ee
982]
983[minor: remove unused interface declaration, change allmydata.org to tahoe-lafs.org in email address, fix wording in relnotes.txt
984zooko@zooko.com**20100930153708
985 Ignore-this: a452969228afed2774de375e29fa3048
986]
987[interfaces.py: wrap some lines to 80cols
988Brian Warner <warner@lothar.com>**20090702015728
989 Ignore-this: e2c777c1e89a684b43ceabeb0042456c
990]
991[docs: update how-to-make-a-release doc with a few tweaks from the 1.8.0 process
992zooko@zooko.com**20101015054413
993 Ignore-this: ca5e9478531a3393792ae283239549dd
994]
995[docs: a couple of small edits to CREDITS and how_to_make_a_tahoe-lafs_release.txt
996zooko@zooko.com**20100829222758
997 Ignore-this: cfdb414f86dfd581b5f1d4d94231b85c
998]
999[how_to_make_a_tahoe-lafs_release.txt: add step to check that release will report itself as the intended version.
1000david-sarah@jacaranda.org**20100807004254
1001 Ignore-this: 7709322e883f4118f38c7f042f5a9a2
1002]
1003[docs: update the list of forums to announce Tahoe-LAFS too, add empty checkboxes
1004zooko@zooko.com**20100802063314
1005 Ignore-this: 89d0e8bd43f1749a9e85fcee2205bb04
1006]
1007[how_to_make_a_tahoe-lafs_release.txt: reordering, add fuse-sshfs@lists.sourceforge.list as place to send relnotes.
1008david-sarah@jacaranda.org**20100618041854
1009 Ignore-this: 2e380a6e72917d3a20a65ceccd9a4df
1010]
1011[docs/how_to_make_a_tahoe-lafs_release.txt: trivial correction, install.html should now be quickstart.html.
1012david-sarah@jacaranda.org**20100625223929
1013 Ignore-this: 99a5459cac51bd867cc11ad06927ff30
1014]
1015[NEWS: minor wording changes and rewrapping; add entry for #71.
1016david-sarah@jacaranda.org**20101124002122
1017 Ignore-this: 423d31eacce10463f21299860a4fbd4f
1018]
1019[docs: NEWS: put news items about bugfixes/improvements and packaging before news items about documentation
1020zooko@zooko.com**20101120060716
1021 Ignore-this: 1a4306df950fcdc2ab9771c874d6d0a4
1022]
1023[docs: NEWS: add #1255
1024zooko@zooko.com**20101120071249
1025 Ignore-this: d37ac1a115f6cdebc3dadb32131b6141
1026]
1027[docs: NEWS: add #1233
1028zooko@zooko.com**20101120071634
1029 Ignore-this: 21345072269617999b78405fb314ab28
1030]
1031[docs: NEWS: merge two additions
1032zooko@zooko.com**20101111055851
1033 Ignore-this: 13105496bb418ebbd570ba68ef347f2
1034]
1035[NEWS: entry for #1242 (tilde expansion in 'tahoe backup --exclude-from'). refs #1242
1036david-sarah@jacaranda.org**20101104011915
1037 Ignore-this: 1c85e7c74f5a48b4cdae5aa073c6b9fb
1038]
1039[docs: NEWS: refs #1253
1040zooko@zooko.com**20101111044118
1041 Ignore-this: 23d1cfbd2d43a68ca496958b55e4688f
1042]
1043[NEWS: entries for #1190 and #1212, and minor cleanups. refs #1190, #1212
1044david-sarah@jacaranda.org**20101031051426
1045 Ignore-this: c318dff69296ae1e1a897752b5221870
1046]
1047[NEWS: add news entry for #1223
1048Francois Deppierraz <francois@ctrlaltdel.ch>**20101030111130
1049 Ignore-this: 6b6afd4b0f0527a3c9784c1db95d083
1050]
1051[NEWS: add a NEWS entry about bug #1045
1052Francois Deppierraz <francois@ctrlaltdel.ch>**20101030101351
1053 Ignore-this: 7e758afbbd0f1d22a5d0b4fc38661c1d
1054]
1055[NEWS: clarify (strengthen) description of what backdoors.rst declares, and add bugfix entries for 'tahoe cp' and Windows console bugs. refs #1216, #1224, #1232
1056david-sarah@jacaranda.org**20101028180046
1057 Ignore-this: 1c3eef3cd353b06b6ee00ce87c5ef59a
1058]
1059[docs: update NEWS ref: #1216
1060zooko@zooko.com**20101015053719
1061 Ignore-this: 2e0b92e4145d667cdf075e64b7965530
1062]
1063[Convert docs/frontends and docs/specifications to reStructuredText format (not including file moves).
1064david-sarah@jacaranda.org**20101212004632
1065 Ignore-this: e3ceb2d832d73875abe48624ddbb5622
1066]
1067[update thingA/uri-extension docs
1068warner@lothar.com**20070610033148]
1069[mutable.txt: fix offset math in the SDMF layout
1070warner@allmydata.com**20080213233906]
1071[docs/uri.txt: update to reflect mutable files
1072warner@allmydata.com**20080214235929]
1073[webapi: make the /operations/ 't=status' qualifier optional, remove it from examples
1074warner@lothar.com**20081023225658]
1075[webapi.txt: improve t=deep-size output docs
1076warner@lothar.com**20081022005331]
1077[#514: add meta-refresh=60 tag to t=status page for incomplete operations
1078warner@lothar.com**20081022164842]
1079[webapi.txt: minor edits
1080warner@allmydata.com**20081208213256]
1081[webapi/deep-manifest t=JSON: don't return the (large) manifest/SI/verifycap lists unless the operation has completed, to avoid the considerable CPU+memory cost of creating the JSON (for 330k dirnodes, it could take two minutes to generate 275MB of JSON). They must be paid eventually, but not on every poll
1082warner@allmydata.com**20090109015932]
1083[webapi.txt: explain POST /uri/?t=upload, thanks to Toby Murray for the catch
1084warner@allmydata.com**20090115000803]
1085[CLI.txt: improve docs on 'tahoe manifest' to cover --verify-cap, --repair-cap, and streaming JSON
1086warner@allmydata.com**20090123225939]
1087[Added documentation for '--exclude' and friends cli backup command.
1088Alberto Berti <alberto@metapensiero.it>**20090224153049
1089 Ignore-this: bbc791fa56e38535bb82cc3077ffde90
1090]
1091[docs: a few edits/updates about dirnodes
1092zooko@zooko.com**20090413160837
1093 Ignore-this: 107fc1796e6c7f5b68b7e2517cce516a
1094]
1095[dirnodes.txt: update docs a bit, we don't yet do choose-latest-version, just choose-any-version
1096warner@allmydata.com**20080208021405]
1097[update "tahoe backup" docs, and webapi.txt's mkdir-with-children
1098Brian Warner <warner@lothar.com>**20091127055900
1099 Ignore-this: defac1fb9a2335b0af3ef9dbbcc67b7e
1100]
1101[FTP-and-SFTP.txt: fix ssh-keygen pointer
1102Brian Warner <warner@lothar.com>**20091207052803
1103 Ignore-this: bc2a70ee8c58ec314e79c1262ccb22f7
1104]
1105[Address comments by Kevan on 833 and add test for stripping spaces
1106david-sarah@jacaranda.org**20100127230642
1107 Ignore-this: de36aeaf4afb3ba05dbeb49a5e9a6b26
1108]
1109[Patch to accept t=set-children as well as t=set_children
1110david-sarah@jacaranda.org**20100124030020
1111 Ignore-this: 2c061f12af817cdf77feeeb64098ec3a
1112]
1113[Fix example JSON in webapi.txt that cannot occur in practice
1114david-sarah@jacaranda.org**20100129032742
1115 Ignore-this: 361a1ba663d77169aeef93caef870097
1116]
1117[Add mutable field to t=json output for unknown nodes, when mutability is known
1118david-sarah@jacaranda.org**20100129031424
1119 Ignore-this: 1516d63559bdfeb6355485dff0f5c04e
1120]
1121[Show -IMM and -RO suffixes for types of immutable and read-only unknown nodes in directory listings
1122david-sarah@jacaranda.org**20100128220800
1123 Ignore-this: dc5c17c0a566398f88e4303c41321e66
1124]
1125[web/directory.py: remove unused imports
1126warner@allmydata.com**20081007194820]
1127[doc_reformat_CLI.txt
1128freestorm77@gmail.com**20100424121512
1129 Ignore-this: 2d3a59326810adcb20ea232cea405645
1130 
1131      - Added heading format begining and ending by "=="
1132      - Added Index
1133      - Added Title
1134           
1135      Note: No change are made in paragraphs content
1136 
1137]
1138[CLI.txt: introduce 'create-alias' before 'add-alias', document Unicode argument support, and other minor updates.
1139david-sarah@jacaranda.org**20100610225547
1140 Ignore-this: de7326e98d79291cdc15aed86ae61fe8
1141]
1142[doc: add mention of "tahoe create-alias" in the security-warning section of CLI.txt
1143zooko@zooko.com**20081224211646
1144 Ignore-this: 6bb0ab3af59a79e05ebccb800d9a12b0
1145]
1146[docs/CLI.txt: add a warning about leaking dircaps through argv in add-alias
1147warner@lothar.com**20080721223309]
1148[FTP-and-SFTP.txt: add Known Issues section.
1149david-sarah@jacaranda.org**20100619004311
1150 Ignore-this: 8d9b1da941cbc24657bb6ec268f984dd
1151]
1152[FTP-and-SFTP.txt: remove description of public key format that is not actually implemented. Document that SFTP does not support server private keys with passphrases, and that FTP cannot list directories containing mutable files.
1153david-sarah@jacaranda.org**20100619001738
1154 Ignore-this: bf9ef53b85b934822ec76060e1fcb3cb
1155]
1156[webapi.txt: fix statement about leap seconds.
1157david-sarah@jacaranda.org**20100619035603
1158 Ignore-this: 80b685446e915877a421cf3e31cedf30
1159]
1160[docs/specifications/dirnodes.txt: bring layer terminology up-to-date with architecture.txt, and a few other updates (e.g. note that the MAC is no longer verified, and that URIs can be unknown). Also 'Tahoe'->'Tahoe-LAFS'.
1161david-sarah@jacaranda.org**20100723054703
1162 Ignore-this: f3b98183e7d0a0f391225b8b93ac6c37
1163]
1164[webapi.txt: fix grammatical error.
1165david-sarah@jacaranda.org**20100810064127
1166 Ignore-this: 64f66aa71682195f82ac1066fe947e35
1167]
1168[dirnode.py: stop writing 'ctime' and 'mtime' fields. Includes documentation and test changes.
1169david-sarah@jacaranda.org**20100618230119
1170 Ignore-this: 709119898499769dd64c7977db7c84a6
1171]
1172[dirnode.py: Fix bug that caused 'tahoe' fields, 'ctime' and 'mtime' not to be updated when new metadata is present.
1173david-sarah@jacaranda.org**20100602014644
1174 Ignore-this: 5bac95aa897b68f2785d481e49b6a66
1175]
1176[trivial: remove trailing whitespace and unused import
1177zooko@zooko.com**20090412021742
1178 Ignore-this: e249172dd0ef51ee034819bc4c62cd9d
1179]
1180[dirnode.py: fix a bug in the no-write change for Adder, and improve test coverage. Add a 'metadata' argument to create_subdirectory, with documentation. Also update some comments in test_dirnode.py made stale by the ctime/mtime change.
1181david-sarah@jacaranda.org**20100602032641
1182 Ignore-this: 48817b54cd63f5422cb88214c053b03b
1183]
1184[dirnode.py: Fix #1034 (MetadataSetter does not enforce restriction on setting 'tahoe' subkeys), and expose the metadata updater for use by SFTP. Also, support diminishing a child cap to read-only if 'no-write' is set in the metadata.
1185david-sarah@jacaranda.org**20100601045428
1186 Ignore-this: 14f26e17e58db97fad0dcfd350b38e95
1187]
1188[docs: doc of the download status page
1189zooko@zooko.com**20100814054117
1190 Ignore-this: a82ec33da3c39a7c0d47a7a6b5f81bbb
1191 ref: http://tahoe-lafs.org/trac/tahoe-lafs/ticket/1169#comment:1
1192]
1193[docs/frontends/FTP-and-SFTP.txt: warn users about connecting to the FTP and SFTP servers remotely. Fixes #1192
1194david-sarah@jacaranda.org**20100910193234
1195 Ignore-this: 7e403e9f349dc38f49197eb0835d47c5
1196]
1197[docs/frontends/FTP-and-SFTP.txt : ftpd and sftpd doesn't listen on loopback interface only
1198marc.doudiet@nimag.net**20100813140853
1199 Ignore-this: 5b5dfd0e5991a2669fe41ba13ea21bd4
1200]
1201[docs/frontends/webapi.txt: note that 'count-good-share-hosts' is computed incorrectly; refs #1115
1202david-sarah@jacaranda.org**20100911002548
1203 Ignore-this: 606989661c95a6db109f8fb7bd9a8bf9
1204]
1205[docs/frontends/webapi.txt: document that the meaning of the 'healthy' field may change in future to reflect servers-of-happiness; refs #614
1206david-sarah@jacaranda.org**20100911003147
1207 Ignore-this: 4661d576c145cc2b641481b70e34e357
1208]
1209[docs/configuration.rst: correct an error in the Example section ('[helper]run_helper' should be '[helper]enabled').
1210david-sarah@jacaranda.org**20110123022304
1211 Ignore-this: d16d7c0d5faea3774dc77e7ae4212138
1212]
1213[docs: convert all .txt docs to .rst thanks to Ravi Pinjala
1214zooko@zooko.com**20101015052913
1215 Ignore-this: 178a5122423189ecfc45b142314a78ec
1216 fixes #1225
1217]
1218[docs/filesystem-notes.txt: add notes about enabling the 'directory index' feature on ext3 filesystems for storage server lookup speed
1219warner@allmydata.com**20080821205901]
1220[logging.txt: explain how to put log.err at the end of Deferred chains, explain FLOGTOTWISTED=1
1221warner@lothar.com**20080920173500]
1222[node.py: remove support for the old BASEDIR/authorized_keys.PORT file
1223warner@allmydata.com**20081029043420]
1224[docs: fix cutnpasto in source:docs/logging.txt
1225zooko@zooko.com**19700105140422
1226 Ignore-this: de0f9ceb8e0ca4c158492ad2f9a6ba6f
1227]
1228[tahoe.cfg: add tub.location, to override the location hints we include in our FURL. This replaces advertised_ip_addresses, which doesn't remain useful enough to retain it. Helps with #517 (Tor).
1229warner@allmydata.com**20081113004458]
1230[test_node: improve coverage of advertised_ip_addresses a bit
1231warner@allmydata.com**20080930060816]
1232[docs/configuration.txt: fix minor typo
1233warner@lothar.com**20081202215101]
1234[node.py: use NODEDIR/tmp for the 'tempfile' module's temporary directory, so webapi upload tempfiles are put there instead of /tmp . You can set it to something else by setting [node]tempdir in tahoe.cfg
1235warner@allmydata.com**20090115020015]
1236[util/time_format: new routine to parse dates like 2009-03-18, switch expirer to use it. I'd prefer to use 18-Mar-2009, but it is surprisingly non-trivial to build a parser that will take UTC dates instead of local dates
1237warner@allmydata.com**20090319005814
1238 Ignore-this: 4f08b301c780a78084fa02a09b5dda3
1239]
1240[add utility function to parse durations, for lease-expiration config
1241warner@lothar.com**20090317070117
1242 Ignore-this: 2f4fa4352c887b4767969f0ea7931644
1243]
1244[move GC docs out of proposed/, since it's all implemented now. Add reference to configuration.txt . Add expire.*= suggestions to tahoe.cfg .
1245warner@allmydata.com**20090323230820
1246 Ignore-this: ce0ec977f49c4a3642cf3a7ea7789dc4
1247]
1248[storage server: detect disk space usage on Windows too (fixes #637)
1249david-sarah@jacaranda.org**20091121055644
1250 Ignore-this: 20fb30498174ce997befac7701fab056
1251]
1252[storage.py: unbreak readonly_storage=True on windows
1253warner@allmydata.com**20081202014946]
1254[storage.py: oops, fix windows again, readonly_storage wasn't getting picked up properly
1255warner@lothar.com**20081203010317]
1256[test_storage.py: more windows-vs-readonly-storage fixes
1257warner@lothar.com**20081203014102]
1258[BucketCountingCrawler: store just the count, not cycle+count, since it's too easy to make usage mistakes otherwise
1259warner@lothar.com**20090221035831
1260 Ignore-this: 573b6f651af74380cdd64059fbbdda4b
1261]
1262[BucketCountingCrawler: rename status and state keys to use 'bucket' instead of 'share', because the former is more accurate
1263warner@lothar.com**20090221034606
1264 Ignore-this: cf819f63fac9506c878d6c9715ce35b7
1265]
1266[stats: don't return booleans: it violates the schema. Add a test.
1267warner@lothar.com**20081204210124]
1268[backupdb.txt: fix ST_CTIME reference
1269Brian Warner <warner@lothar.com>**20100114194052
1270 Ignore-this: 5a189c7a1181b07dd87f0a08ea31b6d3
1271]
1272[docs: fix references to --no-storage, explanation of [storage] section
1273Brian Warner <warner@lothar.com>**20100127200956
1274 Ignore-this: f4be1763a585e1ac6299a4f1b94a59e0
1275]
1276[Add create-node CLI command, and make create-client equivalent to create-node --no-storage (fixes #760)
1277david-sarah@jacaranda.org**20100116052055
1278 Ignore-this: 47d08b18c69738685e13ff365738d5a
1279]
1280[windows installer - changed to update for Mikes recent changes to add AllmydataManager which uses a named pipe to avoid some permissions issues on Vista and fixes some netowkr problems
1281secorp@allmydata.com**20080517011257]
1282[native client - removed unused file (used to be for elevating privileges) and changed installer to start up the AllmydataTray executable directly
1283secorp@allmydata.com**20080328192508]
1284[windows installer - changed to reflect the new StartAllmydata.exe executable that is used to launch the various pieces of the native client. Also verified that the SMB service was stopped when uninstalling.
1285secorp@allmydata.com**20080318174443]
1286[native client - updated to match naming for service and tray executable
1287secorp@allmydata.com**20080222022431]
1288[native client - changing way the executables ask for elevated privileges
1289secorp@allmydata.com**20080328064107]
1290[native client - updated to auto mount drive at start as well as when the drive is opened
1291secorp@allmydata.com**20080327042631]
1292[native client - updated to automatically create a Backup directory, temp directory cleanup, automatic mounting and unmounting of the drive when starting and stopping the service, lots of Vista backup error fixes
1293secorp@allmydata.com**20080327040530]
1294[native client - updated to fix windows vista backup rproblems, edit word documents directly on the drive, requeue files that failed to upload from the node to the helper
1295secorp@allmydata.com**20080326000059]
1296[native client - adding support for special icons for shared and recycling directories
1297secorp@allmydata.com**20080320223026]
1298[native client - adding checks for elevating and managing privileges on Vista
1299secorp@allmydata.com**20080318221259]
1300[native client - added StartAllmydata.exe so that we can start/stop processes in Vista
1301secorp@allmydata.com**20080318171847]
1302[native client - fixes for drive size (now 1TB), running service as adminstrator to allow client stopping and starting in Vista, large number of files fix
1303secorp@allmydata.com**20080317212203]
1304[native client - fixed icon for system tray, improved link batching
1305secorp@allmydata.com**20080313182254]
1306[native client - updated executables and dll's to have green icon, preference for log levels, and force a link every 100 files when uploading large amounts of files
1307secorp@allmydata.com**20080311203126]
1308[native client - updated .exe's and .dll's with better caching, using new multi-child upload call, preferences dialog
1309secorp@allmydata.com**20080311051050]
1310[native client - update to handle large file upload
1311secorp@allmydata.com**20080227061743]
1312[native client - adding ability to mount drives
1313secorp@allmydata.com**20080229201448]
1314[native client - added upload metrics, machine name cfg, better queue resumption
1315secorp@allmydata.com**20080227004331]
1316[native client - added AllmydataTray (replaces TahoeTray)
1317secorp@allmydata.com**20080222023946]
1318[native client - added ability to queue uploads and resume upon service restart
1319secorp@allmydata.com**20080222030207]
1320[native client - renaming things to take Tahoe out of the name, improving caching
1321secorp@allmydata.com**20080222020458]
1322[native client - updating service name to match what the launcher uses
1323secorp@allmydata.com**20080220032034]
1324[WinFUSE updates for beta release
1325secorp@allmydata.com**20080220025837]
1326[doc: warn that unicode might not work, in CLI.txt
1327zooko@zooko.com**20081224211618
1328 Ignore-this: 89355b53aab40af1d45a3746bb90ed10
1329]
1330[test_runner.py: revert the CreateNode section to using runner() inline, rather than spawning a process, to get more precise coverage
1331warner@lothar.com**20090209082617
1332 Ignore-this: e7f0ae5c9a2c2d8157289ef39fda371
1333]
1334[setup: fix test_runner to assert that lines which are output to stderr must end with a punctuation mark (apparently re.search("x$", "x\r\n") does not match.  :-()
1335zooko@zooko.com**20090127203505
1336 Ignore-this: d323b364d7cafb4c5847c0cc8346702e
1337]
1338[trivial: remove unused imports noticed by pyflakes
1339zooko@zooko.com**20090127211148
1340 Ignore-this: aee8bae8aa6f641fe15c5fe947d92f77
1341]
1342[trivial: removed unused imports noticed by pyflakes
1343zooko@zooko.com**20090122215213
1344 Ignore-this: a83aa1f27b31a72aed07caa866abfafe
1345]
1346[setup: fix test_runner to invoke bin/tahoe.exe instead of bin/tahoe if on Windows (this is what happens when a user invokes bin/tahoe on Windows)
1347zooko@zooko.com**20090127203717
1348 Ignore-this: e8795f2d3c70e871839d893bdfec0186
1349]
1350[docs/proposed: new Accounting overview, discuss in #666
1351warner@allmydata.com**20090324015752
1352 Ignore-this: 7379396536e85194b1c1bec21288adc7
1353]
1354[docs: fix the asymptotic network performance of mutable file download in performance.txt, rename the howto-make-a-release file
1355zooko@zooko.com**20100228061439
1356 Ignore-this: c983b2fa7864f717ec17fb556f8a95d2
1357]
1358[doc_reformat_backupdb.txt
1359freestorm77@gmail.com**20100424120416
1360 Ignore-this: fed696530e9d2215b6f5058acbedc3ab
1361 
1362 
1363    - Added heading format begining and ending by "=="
1364    - Added Index
1365    - Added Title
1366             
1367    Note: No change are made in paragraphs content
1368 
1369]
1370[doc_reformat_debian.txt
1371freestorm77@gmail.com**20100424120537
1372 Ignore-this: 45fe4355bb869e55e683405070f47eff
1373 
1374 
1375    - Added heading format begining and ending by "=="
1376    - Added Index
1377    - Added Title
1378             
1379    Note: No change are made in paragraphs content
1380 
1381]
1382[doc_reformat_garbage-collection.txt
1383freestorm77@gmail.com**20100424120830
1384 Ignore-this: aad3e4c99670871b66467062483c977d
1385 
1386 
1387    - Added heading format begining and ending by "=="
1388    - Added Index
1389    - Added Title
1390             
1391    Note: No change are made in paragraphs content
1392 
1393]
1394[doc_reformat_helper.txt
1395freestorm77@gmail.com**20100424120649
1396 Ignore-this: de2080d6152ae813b20514b9908e37fb
1397 
1398 
1399    - Added heading format begining and ending by "=="
1400    - Added Index
1401    - Added Title
1402             
1403    Note: No change are made in paragraphs content
1404 
1405]
1406[doc_refomat_logging.txt
1407freestorm77@gmail.com**20100424114316
1408 Ignore-this: 593f0f9914516bf1924dfa6eee74e35f
1409 
1410    - Added heading format begining and ending by "=="
1411    - Added Index
1412    - Added Title
1413         
1414    Note: No change are made in paragraphs content
1415 
1416]
1417[doc_reformat_stats.txt
1418freestorm77@gmail.com**20100424114615
1419 Ignore-this: af315db5f7e3a17219ff8fb39bcfcd60
1420 
1421 
1422    - Added heading format begining and ending by "=="
1423    - Added Index
1424    - Added Title
1425           
1426    Note: No change are made in paragraphs content
1427 
1428 
1429 **END OF DESCRIPTION***
1430 
1431 Place the long patch description above the ***END OF DESCRIPTION*** marker.
1432 The first line of this file will be the patch name.
1433 
1434 
1435 This patch contains the following changes:
1436 
1437 M ./docs/stats.txt -2 +2
1438]
1439[docs/stats.txt: add TOC, notes about controlling gatherer's listening port
1440Brian Warner <warner@lothar.com>**20091224202133
1441 Ignore-this: 8eef63b0e18db5aa8249c2eafde02c05
1442 
1443 Thanks to Jody Harris for the suggestions.
1444]
1445[Minor documentation tweaks.
1446david-sarah@jacaranda.org**20100603054458
1447 Ignore-this: e30ae407b0039dfa5b341d8f88e7f959
1448]
1449[doc_reformat_architecture.txt
1450freestorm77@gmail.com**20100424120133
1451 Ignore-this: 6e2cab4635080369f2b8cadf7b2f58e
1452 
1453 
1454     - Added heading format begining and ending by "=="
1455     - Added Index
1456     - Added Title
1457             
1458     Note: No change are made in paragraphs content
1459 
1460 
1461]
1462[doc_reformat_configuration.txt
1463freestorm77@gmail.com**20100424104903
1464 Ignore-this: 4fbabc51b8122fec69ce5ad1672e79f2
1465 
1466 
1467 - Added heading format begining and ending by "=="
1468 - Added Index
1469 - Added Title
1470 
1471 Note: No change are made in paragraphs content
1472 
1473]
1474[doc_reformat_FTP-and-SFTP.txt
1475freestorm77@gmail.com**20100424121334
1476 Ignore-this: 3736b3d8f9a542a3521fbb566d44c7cf
1477 
1478 
1479    - Added heading format begining and ending by "=="
1480    - Added Index
1481    - Added Title
1482           
1483    Note: No change are made in paragraphs content
1484 
1485]
1486[setup: organize misc/ scripts and tools and remove obsolete ones
1487zooko@zooko.com**20100607051618
1488 Ignore-this: 161db1158c6b7be8365b0b3dee2e0b28
1489 This is for ticket #1068.
1490]
1491[misc cleanup: remove old .tac files, move old stuff into misc/
1492warner@lothar.com**20070407033738]
1493[misc/figleaf.excludes: exclude simplejson too, since we don't run their tests
1494warner@allmydata.com**20070712232625]
1495[figleaf.excludes: ignore allmydata.Crypto, since so little of it gets used by allmydata.test
1496warner@lothar.com**20070708060009]
1497[do not include foolscap or zfec coverage in the figleaf reports for the moment: they have their own test suites
1498warner@allmydata.com**20070505000018]
1499[logtool: rename get-logs.py to logtool.py
1500warner@lothar.com**20071119003055]
1501[misc/boodlegrid.tac: tool to monitor a grid through its flogports
1502warner@allmydata.com**20080326230934]
1503[misc/delete-old-helper.sh: simple script to delete old+abandoned helper files
1504warner@lothar.com**20080528041720]
1505[setup: quote the results of misc/find_trial.py so that they can be passed through a shell even if they contain spaces
1506zooko@zooko.com**20080605225945]
1507[setup: make find_trial self-contained so that we don't have a bootstrapping problem -- if allmydata can't be imported we still want to be able to run find_trial
1508zooko@zooko.com**20080123160426]
1509[mac/Makefile: upload the .dmg file with foolscap xfer-client.py instead of scp
1510warner@allmydata.com**20080908231943]
1511[mac build: fixed permission problem on upload .dmg
1512robk-tahoe@allmydata.com**20080123205118]
1513[misc/fixshebangs.py
1514zooko@zooko.com**20081105000130
1515 Ignore-this: 13b03ea2d2ed8982f8346a827b46bd2e
1516]
1517[util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile
1518zooko@zooko.com**20081104234715
1519 Ignore-this: f1131e9b8f249b5f10be4cba2aeb6118
1520]
1521[shebang: replace "/usr/bin/python" with "/usr/bin/env python"
1522zooko@zooko.com**20081105000306
1523 Ignore-this: 8ae33a8a7828fa7423422e252f2cfd74
1524]
1525[misc/count_dirs.py: dev tool to estimate filetree space consumption
1526warner@lothar.com**20070617045513]
1527[Makefile: add 'find-trailing-spaces' tool and target
1528warner@allmydata.com**20071106033208]
1529[add a munin plugin to display introducer stats
1530warner@allmydata.com**20080325201552]
1531[Copy amd-nodememory munin plugin over to tahoe and point at correct pidfile
1532zandr@allmydata.com**20080326005004]
1533[add munin/tahoe-rootdir-space
1534warner@allmydata.com**20080328231809]
1535[munin/tahoe_estimate_files.py: tool to estimate the total number of slots (mutable and immutable combined) in the grid, from a small sample
1536warner@allmydata.com**20080424182835]
1537[misc/cpu-watcher*: add some tools to monitor CPU usage of arbitrary processes, like tahoe nodes
1538warner@allmydata.com**20080507193429]
1539[munin: add tahoe_cpu_watcher.py, to track the data from misc/cpu-watcher.tac
1540warner@allmydata.com**20080507201908]
1541[misc/munin/tahoe_spacetime.py: add a munin plugin to estimate how much time remains before you run out of space
1542warner@allmydata.com**20080528183354]
1543[start work on 'check-grid' target, for use in an automated prodnet tester. Just a docstring so far.
1544warner@allmydata.com**20080618195747]
1545[misc/munin: add server_latency plugin
1546warner@lothar.com**20080714192919]
1547[munin: add plugin for storage-server operations per second
1548warner@lothar.com**20080714201811]
1549[munin: add tahoe_overhead plugin, to measure effectiveness of GC and deleting data from inactive accounts
1550warner@lothar.com**20080807203925]
1551[misc/make_umid: little script and elisp fragment to insert umid= arguments
1552warner@allmydata.com**20080826015918]
1553[munin: add tahoe_diskleft plugin, update spacetime/diskwatcher.tac to support it
1554warner@allmydata.com**20080828203236]
1555[diskwatcher.tac: include total-bytes-used
1556warner@lothar.com**20080807201214]
1557[diskwatcher.tac: add async-GET code, but leave it commented out: urlopen() seems to work better for now
1558warner@lothar.com**20080807050327]
1559[misc/xfer-client.py: small foolscap utility to transfer a file to a waiting server
1560warner@allmydata.com**20080908231903]
1561[misc/make-canary-files.py: tool to create 'canary files', explained in the docstring
1562warner@allmydata.com**20080925004716]
1563[munin/tahoe_disktotal: new plugin to show total disk space (used and unused) in the grid
1564warner@allmydata.com**20081118065101]
1565[munin/tahoe_diskused: new plugin to show total disk space used across the grid
1566warner@allmydata.com**20081118072525]
1567[misc/*: remove RuntimeError too
1568warner@lothar.com**20090222233401
1569 Ignore-this: b76f8a184f75bb28eb9d8002f957936a
1570]
1571[logtool: add 'gather' and 'dump' modes
1572warner@lothar.com**20071119003204]
1573[setup: add "test_mac_diskimage" command which attempts to mount and use a .dmg to make sure it has a good Tahoe distribution in it
1574zooko@zooko.com**20090712230940
1575 Ignore-this: e889aaf49699429afeb211f7403fec74
1576]
1577[setup: if you sdist_dsc (to produce the input files for dpkg-buildpackage) then run darcsver first
1578zooko@zooko.com**20090216201558
1579 Ignore-this: b85be51b3d4a9a19a3366e690f1063e2
1580]
1581[setup: make sure you use darcsver whenever you are going to run trial
1582zooko@zooko.com**20090130203819
1583 Ignore-this: 2bd632d7540020c0dd893d337163d396
1584 This fixes the bug Brian had where he ran "python ./setup.py trial" and the allmydata-tahoe version number came out as 0.0.0.
1585]
1586[new approach for debian packaging, sharing pieces across distributions. Still experimental, still only works for sid.
1587warner@lothar.com**20090818190527
1588 Ignore-this: a75eb63db9106b3269badbfcdd7f5ce1
1589]
1590[new experimental deb-packaging rules. Only works for sid so far.
1591Brian Warner <warner@lothar.com>**20090818014052
1592 Ignore-this: 3a26ad188668098f8f3cc10a7c0c2f27
1593]
1594[Add docs/stats.py, explaining Tahoe stats, the gatherer, and the munin plugins.
1595Brian Warner <warner@lothar.com>**20091223052400
1596 Ignore-this: 7c9eeb6e5644eceda98b59a67730ccd5
1597]
1598[misc/ringsim.py: tool to discuss #302
1599Brian Warner <warner@lothar.com>**20091226060339
1600 Ignore-this: fc171369b8f0d97afeeb8213e29d10ed
1601]
1602[code coverage: replace figleaf with coverage.py, should work on py2.6 now.
1603Brian Warner <warner@lothar.com>**20100203165421
1604 Ignore-this: 46ab590360be6a385cb4fc4e68b6b42c
1605 
1606 It still lacks the right HTML report (the builtin report is very pretty, but
1607 lacks the "lines uncovered" numbers that I want), and the half-finished
1608 delta-from-last-run measurements.
1609]
1610[figleaf.el: announce annotation/deannotation
1611warner@allmydata.com**20070105035240]
1612[figleaf.el: add some emacs22 comments
1613warner@lothar.com**20070107191015]
1614[figleaf.el: add code to auto-enable the annotation mode for all source files
1615Brian Warner <warner@allmydata.com>**20070118070011]
1616[makefile: pass COVERAGEDIR= properly to the target makefile
1617warner@allmydata.com**20070702222249]
1618[makefile: change upload-figleaf target to create a 'current' link
1619warner@allmydata.com**20070702221020]
1620[setup: remove some things from .darcs-boringfile which are no longer boring since we no longer use them
1621zooko@zooko.com**20080122234023]
1622[remove simplejson.egg-info from the repo (and boringfile it), it should never have been in the original tarball
1623warner@lothar.com**20070710225158]
1624[boringfile: add simplejson generated files
1625warner@lothar.com**20070710223436]
1626[.darcs-boringfile: ignore some build/ directories for foolscap and zfec
1627warner@lothar.com**20070504033151]
1628[.darcs-boringfile: update to match misc/dependencies setup.py changes
1629warner@allmydata.com**20080111022110]
1630[setup: update the list of files that we think are boring when we are using darcs
1631zooko@zooko.com**20080101054904]
1632[setup: new name for setuptools_darcs plugin is also boring
1633zooko@zooko.com**20071110002809]
1634[setup: setuptools_darcs_plugin is boring
1635zooko@zooko.com**20071015042201]
1636[trial_figleaf.py: make our figleaf code compatible with both Twisted-8.x and Twisted-2.5.x
1637warner@allmydata.com**20080403004855]
1638[Makefile: add figleaf-delta-output, to render figleaf coverage differences with a previous run
1639warner@lothar.com**20090212211829
1640 Ignore-this: 9c78861c4abed3d6c2d013ff40d9b4fb
1641]
1642[Makefile: use run_with_pythonpath, move windows targets into a separate Makefile
1643warner@allmydata.com**20080912044508]
1644[Makefile: check-memory: run mode=receive along with everything else
1645Brian Warner <warner@allmydata.com>**20070920033917]
1646[setup.py: add 'setup.py run_with_pythonpath', to run other commands with PYTHONPATH set usefully
1647warner@allmydata.com**20080912044418]
1648[Makefile: include the figleaf pickle in the uploaded coverage data, for later differential analysis
1649warner@allmydata.com**20090212000913
1650 Ignore-this: e31002f4a7d55d8a2ca1131a1066c066
1651]
1652[fix quicktest: stop using setuptools, add misc/run-with-pythonpath.py, to make it run faster
1653warner@lothar.com**20090414201400]
1654[makefile: added 'fuse-test' target to makefile, to run 'runtests'
1655robk-tahoe@allmydata.com**20081019132518]
1656[Makefile: use 'setup.py test' for test/quicktest targets (instead of
1657Brian Warner <warner@allmydata.com>**20090130102536
1658 Ignore-this: da07fae8417bc54a610786bc57959c5e
1659 'setup.py trial'). 'setup.py trial' clobbers the tahoe .egg's PKG-INFO
1660 "Version:" field (resetting it to 0.0.0), possibly because it isn't invoking
1661 the darcsver subcommand that 'setup.py test' does before it runs the 'trial'
1662 subcommand.
1663 
1664 This slows down quicktest by another couple of seconds (see #591) and adds
1665 more noise to its output, but without this change, 'make test' and 'make
1666 quicktest' fail on test_runner (which spawns bin/tahoe as a subprocess, and
1667 with a mangled Version:, the setuptools-based entry point script refuses to
1668 recognize our source tree as a usable version of Tahoe).
1669]
1670[rollback the #591 fix, since it breaks quicktest entirely
1671warner@allmydata.com**20090123232812]
1672[setup: use "trial" executable instead of the setuptools_trial plugin for "make quicktest"
1673zooko@zooko.com**20090123225830
1674 Ignore-this: f70fb8873e0ac94f0c55e57f0f826334
1675 This is to fix #591 ("make quicktest" could be quicker and less noisy).  This means that "make quicktest" won't work unless the user has manually installed Twisted already such that the "trial" executable is on their PATH and the Twisted package is on their PYTHONPATH.  This bypasses the behavior of setuptools_trial which builds and checks package dependencies before executing the tests.
1676]
1677[setup: remove a convenience copy of figleaf, to ease inclusion into Ubuntu Karmic Koala
1678zooko@zooko.com**20090924053215
1679 Ignore-this: a0b0c990d6e2ee65c53a24391365ac8d
1680 We need to carefully document the licence of figleaf in order to get Tahoe-LAFS into Ubuntu Karmic Koala.  However, figleaf isn't really a part of Tahoe-LAFS per se -- this is just a "convenience copy" of a development tool.  The quickest way to make Tahoe-LAFS acceptable for Karmic then, is to remove figleaf from the Tahoe-LAFS tarball itself.  People who want to run figleaf on Tahoe-LAFS (as everyone should want) can install figleaf themselves.  I haven't tested this -- there may be incompatibilities between upstream figleaf and the copy that we had here...
1681]
1682[fix pyflakes warnings in figleaf
1683warner@allmydata.com**20070105000443]
1684[hush pyflakes warnings
1685warner@allmydata.com**20070201231301]
1686[figleaf_htmlizer: emit stats to stdout, so buildbot can see it
1687warner@lothar.com**20090212211020
1688 Ignore-this: bf5b503717580561c2fdb6c619159c9
1689]
1690[figleaf_htmlizer: oops, re-ignore files that aren't under root, like code in auto-built eggs
1691warner@lothar.com**20090213060022
1692 Ignore-this: b4e67d5e025198d01e373728d1a74b11
1693]
1694[figleaf_htmlizer: fix order of summary counters
1695warner@lothar.com**20090213155753
1696 Ignore-this: aa6f0cd37e79857482967496252088da
1697]
1698[figleaf_htmlizer: render changes in coverage relative to a previous test run using --old-coverage
1699warner@lothar.com**20090212210412
1700 Ignore-this: 6c2bfc21a0671f1a07e19d3f9fd17157
1701]
1702[figleaf_htmlizer: more rearranging, behavior should still be unchanged
1703warner@allmydata.com**20090212020515
1704 Ignore-this: 8fb7dd723b2d26bdcf1d57685b113bb8
1705]
1706[figleaf_htmlizer: break it up into subfunctions, behavior should still be unchanged
1707warner@allmydata.com**20090212015607
1708 Ignore-this: 9644ec95b0f9950722c13ad3c9654e22
1709]
1710[figleaf_htmlizer: rewrite in class form, behavior should be the same as before
1711warner@allmydata.com**20090212014050
1712 Ignore-this: d00b838c0af1ea2d71be246bbcf36c53
1713]
1714[figleaf_htmlizer: rewrite with twisted.python.usage, remove logging: should behave the same as before
1715warner@allmydata.com**20090212011643
1716 Ignore-this: 86f961e369625e9ab5188e817b083fe4
1717]
1718[figleaf_htmlizer: expand tabs, fix to 4-space indents. No functional changes.
1719warner@allmydata.com**20090212010542
1720 Ignore-this: 5c9aa3704eacf1b42a985ade8e43dd1f
1721]
1722[sort coverage tables by lines uncovered, rather than percentages
1723warner@allmydata.com**20070424184926]
1724[figleaf: add number-of-uncovered-lines to the HTML output
1725warner@allmydata.com**20070419180933]
1726[improve figleaf: fix some line-numbering bugs, add an alphabetically-sorted index HTML page
1727warner@lothar.com**20070104072643]
1728[figleaf output: include a stats.out for parsing by a munin plugin
1729warner@allmydata.com**20070407004101]
1730[figleaf_htmlizer: when all counts are zero, claim 0% instead of 100%, since it probably means that coverage checking has failed completely
1731warner@allmydata.com**20070501180728]
1732[setup: new improved misc/show-tool-versions.py
1733zooko@zooko.com**20100516050122
1734 Ignore-this: ce9b1de1b35b07d733e6cf823b66335a
1735]
1736[setup: add sys.maxunicode to the show-tool-versions output in order to investigate http://bugs.python.org/setuptools/issue78
1737zooko@zooko.com**20090709004533
1738 Ignore-this: dce4420d5c626258e1033d924e506de2
1739]
1740[setup: reorder and extend the show-tool-versions script, the better to glean information about our new buildslaves
1741zooko@zooko.com**20100504045643
1742 Ignore-this: 836084b56b8d4ee8f1de1f4efb706d36
1743]
1744[setup: copy in misc/show-tools-version.py from zfec -- it prints out platform and setuptools versions
1745zooko@zooko.com**20090621055846
1746 Ignore-this: 4e144886ab02414bbaaf0295ce2b337
1747]
1748[setup: fix typos in misc/show-tool-versions.py
1749zooko@zooko.com**20100510063615
1750 Ignore-this: 2181b1303a0e288e7a9ebd4c4855628
1751]
1752[setup: show code-coverage tool versions in show-tools-versions.py
1753zooko@zooko.com**20100510062955
1754 Ignore-this: 4b4c68eb3780b762c8dbbd22b39df7cf
1755]
1756[move show-tool-versions out of setup.py and into a separate script in misc/ , since setuptools is trying to build and install a bunch of stuff first
1757warner@lothar.com**20090219073558
1758 Ignore-this: 9e56bc43026379212e6b6671ed6a1fd4
1759]
1760[setup.py: add show_tool_versions command, for the benefit of a new buildbot step
1761warner@lothar.com**20090219062436
1762 Ignore-this: 21d761c76a033e481831584bedc60c86
1763]
1764[setup.py: wrap to 80 cols, no functional changes
1765warner@lothar.com**20090219055751
1766 Ignore-this: d29e57c6ee555f2ee435667b7e13e60b
1767]
1768[setup: stop catching EnvironmentError when attempting to copy ./_auto_deps.py to ./src/allmydata/_auto_deps.py
1769zooko@zooko.com**20080924000402
1770 It is no longer the case that we can run okay without _auto_deps.py being in place in ./src/allmydata, so if that cp fails then the build should fail.
1771]
1772[setup: a new improved way to create tahoe executables
1773zooko@zooko.com**20090129000716
1774 Ignore-this: d1b038ab8efb949125d7592ebcceccba
1775 Create the 'tahoe-script.py' file under the 'bin' directory. The 'tahoe-script.py' file is exactly the same as the 'tahoe-script.template' script except that the shebang line is rewritten to use our sys.executable for the interpreter. On Windows, create a tahoe.exe will execute it.  On non-Windows, make a symlink to it from 'tahoe'.  The tahoe.exe will be copied from the setuptools egg's cli.exe and this will work from a zip-safe and non-zip-safe setuptools egg.
1776]
1777[Makefile: convert check-auto-deps target into 'setup.py check_auto_deps'
1778warner@allmydata.com**20080912035904]
1779[setup: require new bundled setuptools-0.6c12dev
1780zooko@zooko.com**20090205152923
1781 Ignore-this: 516bbb2195a20493fa72a0ca11a2361c
1782]
1783[setup: require and automatically use setuptools-0.6c11dev (our own toothpick of setuptools) which is bundled
1784zooko@zooko.com**20090203042323]
1785[setup: require the latest version of the setuptools bootstrap egg
1786zooko@zooko.com**20081025152858
1787 Ignore-this: c0c9923ba3008f410d5cc56f2236edb9
1788]
1789[setup: merge in changes to ez_setup.py from the upstream setuptools project
1790zooko@zooko.com**20080326191128]
1791[setup: import bugfix to ez_setup.py
1792zooko@zooko.com**20071004181846]
1793[setup: require the SVN snapshot of setuptools to build
1794zooko@zooko.com**20081025134959
1795 Ignore-this: f68077dd10d85a71a1e06678365e6753
1796]
1797[setup: change ez_setup.py to install setuptools-0.6c9
1798zooko@zooko.com**20080930200502]
1799[setup: bundle setuptools-0.6c9
1800zooko@zooko.com**20080930200448]
1801[setup: include _pkgutil.py in setuptools bootstrap egg so that it will work on Python 2.4
1802zooko@zooko.com**20081025152839
1803 Ignore-this: 38d81a037c1a3413d69d580ccb13fd67
1804]
1805[setup: bundle an SVN snapshot of setuptools instead of the most recent stable release of setuptools
1806zooko@zooko.com**20081025134837
1807 Ignore-this: 9a0c9a34b186b972650cf9455edb0d28
1808 This SVN snapshot fixes a problem that prevents the setting up of nevow:
1809 http://bugs.python.org/setuptools/issue20
1810]
1811[setup: bundle setuptools-0.6c11dev (our own toothpick of setuptools)
1812zooko@zooko.com**20090203041950
1813 Hopefully this one fixes the issue with easy_install not searching the sys.path for packages that were requested to be installed, (setuptools #17), thus allowing us to do away with the "--site-dirs=" kludges, which are currently breaking some of our buildbots.
1814]
1815[setup: remove a couple of horrible work-arounds in setup.py now that we rely on our own toothpick of setuptools which fixes those issues
1816zooko@zooko.com**20090204052405
1817 Ignore-this: a11bc74a5cb879db42c4fe468c375577
1818 also specify that we need our latest revision (11dev) of our toothpick of setuptools
1819 also *always* setup_require setuptools_darcs at module import time.  Formerly we added setup_require setuptools_darcs only if the PKG-INFO file were not already created.  There is some weird, irreproducible bug to do with setuptool_darcs, and I guess that the fact that whether it is required or not depends on that autogenerated file might have something to do with it.  Anyway, this is simpler.
1820]
1821[setup.py: Require simplejson version >= 2.0.5
1822francois@ctrlaltdel.ch**20081125171727]
1823[setup: always create a support dir and populate it with a site-packages and add same to the PYTHONPATH, just in case someone is going to do "build", "develop", or "test" or something else which triggers a build
1824zooko@zooko.com**20090129045608
1825 Ignore-this: d3740cd285f1d30a111536863a8e8457
1826 I think there must be a much better solution for this -- probably to fix setuptools #54 and ship our own fork of setuptools and rely on it.
1827]
1828[setup: temporarily comment-out the horrible kludge to work-around setuptools #17, while I figure out how to solve it better
1829zooko@zooko.com**20090129130000
1830 Ignore-this: 9e42491cfa8042c90a6a96081c00a053
1831]
1832[setup: if any of "build", "develop", or "test" appear in the sys.argv then that means we'll be doing a develop, so add the workarounds for setuptools #17 in any case
1833zooko@zooko.com**20090129045534
1834 Ignore-this: 38645dfadf3ba7b42370e795b7c90214
1835 I think there must be a much better solution for this -- probably to fix setuptools #17 and ship our own fork of setuptools and rely on it.
1836]
1837[prevent --site-dirs from being passed to the 'install' command
1838cgalvan@mail.utexas.edu**20090116195732]
1839[setup: require setuptools_trial >= 0.5, and delegate to it the job of deciding which Twisted reactor to use for the current platform
1840zooko@zooko.com**20090130043133
1841 Ignore-this: 9e354184d6c989ddf16c7e16a3295ef2
1842]
1843[setup: hack the sys.argv to set poll reactor if "python ./setup.py test" in addition to if "python ./setup.py trial"; remove another hack which has been moved setup.cfg; remove setup_requires Twisted since now we actually setup_require setuptools_trial and it install_requires Twisted.
1844zooko@zooko.com**20090127044046
1845 Ignore-this: 38c5afd730024cca63bc84f8ab7100f4
1846]
1847[setup: fix previous patch to set reactor to poll reactor on linux or cygwin
1848zooko@zooko.com**20090114164022
1849 Ignore-this: 9e37242ca3cfd47c6f69ee2438ec743b
1850]
1851[setup: use poll reactor for trial if on linux2 or cygwin
1852zooko@zooko.com**20090114151546
1853 Ignore-this: f6c4b45745527811c9f72448d74649f5
1854]
1855[setup: undo (for the second time) the use of the --multi-version feature
1856zooko@zooko.com**20090119205352
1857 Ignore-this: 80bdbb488c3e4fb042bcd968a9bc120a
1858 When this feature is turned on, then setuptools doesn't create easy-install.pth, setuptools.pth, or site.py in the target site-packages dir.  I don't know why not and we should probably open a ticket on the setuptools tracker and/or hack setuptools to create those files anyway.  But for now (for the Tahoe-1.3.0 release), we're going to leave --multi-version mode off and require users to manually uninstall any packages which are too old and thus conflict with our newer dependencies.
1859 
1860]
1861[adding multi-version support
1862cgalvan@mail.utexas.edu**20090116230326]
1863[set bin/tahoe executable permissions and leave build_tahoe in sys.argv
1864cgalvan@mail.utexas.edu**20090109210640]
1865[fix bin/tahoe executable for Windows
1866cgalvan@mail.utexas.edu**20090109184222]
1867[setup: execute ../support/bin/tahoe from ./bin/tahoe
1868zooko@zooko.com**20080410214037]
1869[bin/allmydata-tahoe: fix handling of PYTHONPATH, we were missing an os.pathsep
1870Brian Warner <warner@lothar.com>**20070917104322
1871 which would cause a pre-existing PYTHONPATH to get mangled
1872]
1873[bin/tahoe: rename 'allmydata-tahoe' in some comments
1874warner@lothar.com**20071011103929]
1875[run build_tahoe command with trial commmand
1876cgalvan@mail.utexas.edu**20090117000047]
1877[setup: bundle setuptools-0.6c12dev (our own toothpick of setuptools) this version completes my patch to fix http://bugs.python.org/setuptools/issue54 , which is necessary for tahoe to build with --prefix=support without doing a lot of PYTHONPATH gymnastics around the call to setup.py
1878zooko@zooko.com**20090205152818
1879 Ignore-this: da7b1587ee91180c4a1a56f217311de3
1880]
1881[run_trial.darcspath
1882freestorm77@gmail.com**20100510232829
1883 Ignore-this: 5ebb4df74e9ea8a4bdb22b65373d1ff2
1884]
1885[Remove firewall section from running.html and say to read configuration.txt instead.
1886david-sarah@jacaranda.org**20100617004513
1887 Ignore-this: d2e46fffa4855b01093e8240b5fd1eff
1888]
1889[running.html: fix overeager replacement of 'tahoe' with 'Tahoe-LAFS', and some simplifications.
1890david-sarah@jacaranda.org**20100617000952
1891 Ignore-this: 472b4b531c866574ed79f076b58495b5
1892]
1893[Add a note about running Tahoe-LAFS on a small grid to running.html
1894zooko@zooko.com**20100616140227
1895 Ignore-this: 14dfbff0d47144f7c2375108c6055dc2
1896 also Change "tahoe" and "Tahoe" to "Tahoe-LAFS" in running.html
1897 author: Kevan Carstensen
1898]
1899[docs running.html - "tahoe run ." does not work with the current installation, replaced with "tahoe start ."
1900secorp@allmydata.com**20100206165320
1901 Ignore-this: fdb2dcb0e417d303cd43b1951a4f8c03
1902]
1903[Change running.html to describe 'tahoe run'
1904david-sarah@jacaranda.org**20100112044409
1905 Ignore-this: 23ad0114643ce31b56e19bb14e011e4f
1906]
1907[docs: wording fix, thanks to Jeremy Visser, fix #987
1908francois@ctrlaltdel.ch**20100609081103
1909 Ignore-this: 6d2e627e0f1cd58c0e1394e193287a4b
1910]
1911[Debian documentation update
1912jacob@appelbaum.net**20100305003004]
1913[debian-docs-patch-final
1914jacob@appelbaum.net**20100304085955]
1915[desert-island-build-with-proper-versions
1916jacob@appelbaum.net**20100304013858]
1917[docs/frontends/FTP-and-SFTP.txt: docs/performance.txt, architecture.txt: updates taking into account new downloader (revised). refs #798
1918david-sarah@jacaranda.org**20100910195422
1919 Ignore-this: 5774da17f734231fefe6454a80e81455
1920]
1921[docs: mention default values of K, H, and M
1922zooko@zooko.com**20100924020245
1923 Ignore-this: ab825b7415142b4394599f909ea31934
1924]
1925[configuration.txt and servers-of-happiness.txt: 1 <= happy <= N, not k <= happy <= N. Also minor wording changes.
1926david-sarah@jacaranda.org**20100618050710
1927 Ignore-this: edac0716e753e1f1c4c755c85bec9a19
1928]
1929[Note that servers of happiness only applies to immutable files for the moment
1930Kevan Carstensen <kevan@isnotajoke.com>**20100524042836
1931 Ignore-this: cf83cac7a2b3ed347ae278c1a7d9a176
1932]
1933[Update 'docs/configuration.txt' to reflect the servers_of_happiness behavior.
1934Kevan Carstensen <kevan@isnotajoke.com>**20091205033813
1935 Ignore-this: 5e1cb171f8239bfb5b565d73c75ac2b8
1936]
1937[docs: update docs/architecture.txt to more fully and correctly explain the upload procedure
1938zooko@zooko.com**20100514043458
1939 Ignore-this: 538b6ea256a49fed837500342092efa3
1940]
1941[Alter the wording in docs/architecture.txt to more accurately describe the servers_of_happiness behavior.
1942Kevan Carstensen <kevan@isnotajoke.com>**20100428002455
1943 Ignore-this: 6eff7fa756858a1c6f73728d989544cc
1944]
1945[Update 'docs/architecture.txt' to reflect readonly share discovery
1946kevan@isnotajoke.com**20100514003852
1947 Ignore-this: 7ead71b34df3b1ecfdcfd3cb2882e4f9
1948]
1949[architecture.txt: remove trailing whitespace, wrap lines: no content changes
1950Brian Warner <warner@lothar.com>**20100202055304
1951 Ignore-this: 1662f37d1162858ac2619db27bcc411f
1952]
1953[Change stray "shares_of_happiness" to "servers_of_happiness"
1954Kevan Carstensen <kevan@isnotajoke.com>**20091116212459
1955 Ignore-this: 1c971ba8c3c4d2e7ba9f020577b28b73
1956]
1957[Add a specification for servers of happiness.
1958Kevan Carstensen <kevan@isnotajoke.com>**20100524003508
1959 Ignore-this: 982e2be8a411be5beaf3582bdfde6151
1960]
1961[docs/specifications: add an outline of the spec documents we'd like to have some day
1962warner@lothar.com**20090208234748
1963 Ignore-this: b591ad0361810e5aae37cba07fdfbd43
1964]
1965[docs: timestamp the 1.8.0 release
1966zooko@zooko.com**20100924021552
1967 Ignore-this: dbacb97c0f9994532f38a5612cecef65
1968]
1969[NEWS, docs/known_issues.txt for 1.8.0 release
1970david-sarah@jacaranda.org**20100919044412
1971 Ignore-this: d8901578b0c0c20e42daaae23879b091
1972]
1973[relnotes.txt and docs/quickstart.html for 1.8.0 release
1974david-sarah@jacaranda.org**20100919050335
1975 Ignore-this: 9ef6499236d07309fb4df983f9a0a5cd
1976]
1977[relnotes.txt: update revision of NEWS.
1978david-sarah@jacaranda.org**20100810063243
1979 Ignore-this: cf9eb342802d19f3a8004acd123fd46e
1980]
1981[docs: update relnotes.txt, NEWS, and quickstart.html for the 1.8.0c4 release
1982zooko@zooko.com**20100912061423
1983 Ignore-this: bb17f4c54ba390fdcc74eb5d5017373
1984]
1985[doc_reformat_performance.txt
1986freestorm77@gmail.com**20100424114444
1987 Ignore-this: 55295ff5cd8a5b67034eb661a5b0699d
1988 
1989    - Added heading format begining and ending by "=="
1990    - Added Index
1991    - Added Title
1992         
1993    Note: No change are made in paragraphs content
1994 
1995 
1996]
1997[docs/performance.txt: split out CPU from network, expand on mutable costs
1998Brian Warner <warner@lothar.com>**20100224043813
1999 Ignore-this: 4779e78ca0eed1dcbd1652e6287219f1
2000]
2001[quickstart.html: update tarball link.
2002david-sarah@jacaranda.org**20100810073832
2003 Ignore-this: 4fcf9a7ec9d0de297c8ed4f29af50d71
2004]
2005[docs: update NEWS a bit about New-Downloader
2006zooko@zooko.com**20100819021446
2007 Ignore-this: 31a6e2fb0a6e3d19f73481e99070da7a
2008]
2009[docs: trivial naming change
2010zooko@zooko.com**20090121025042
2011 Ignore-this: a9c2fe6119c43683c6f88662e60de306
2012]
2013[docs: NEWS: edit English usage, remove ticket numbers for regressions vs. 1.7.1 that were fixed again before 1.8.0c2
2014zooko@zooko.com**20100811071758
2015 Ignore-this: 993f5a1e6a9535f5b7a0bd77b93b66d0
2016]
2017[docs: NEWS: more detail about new-downloader
2018zooko@zooko.com**20100811071303
2019 Ignore-this: 9f07da4dce9d794ce165aae287f29a1e
2020]
2021[docs: update relnotes.txt for v1.8.0c3
2022zooko@zooko.com**20100902212111
2023 Ignore-this: 7211f79f4c388c9e8ff0d05f22eb3ba2
2024]
2025[NEWS, relnotes and known-issues for 1.8.0c2.
2026david-sarah@jacaranda.org**20100810062851
2027 Ignore-this: bf319506558f6ba053fd896823c96a20
2028]
2029[NEWS, quickstart.html and known_issues.txt for 1.8.0c1 release.
2030david-sarah@jacaranda.org**20100806235111
2031 Ignore-this: 777cea943685cf2d48b6147a7648fca0
2032]
2033[relnotes.txt: 1.8.0c1 release
2034david-sarah@jacaranda.org**20100807003646
2035 Ignore-this: 1994ffcaf55089eb05e96c23c037dfee
2036]
2037[update NEWS and other docs in preparation for 1.8.0rc1
2038Brian Warner <warner@lothar.com>**20100806080228
2039 Ignore-this: 6ebdf11806f6dfbfde0b61115421a459
2040 
2041 in particular, merge the various 1.8.0b1/b2 sections, and remove the
2042 datestamp. NEWS gets updated just before a release, doesn't need to precisely
2043 describe pre-release candidates, and the datestamp gets updated just before
2044 the final release is tagged
2045 
2046 Also, I removed the BOM from some files. My toolchain made it hard to retain,
2047 and BOMs in UTF-8 don't make a whole lot of sense anyway. Sorry if that
2048 messes anything up.
2049]
2050[NEWS: remove XXX comment and separate description of #890.
2051david-sarah@jacaranda.org**20100803050827
2052 Ignore-this: 6d308f34dc9d929d3d0811f7a1f5c786
2053]
2054[docs: more updates to NEWS for 1.8.0β
2055zooko@zooko.com**20100803044618
2056 Ignore-this: 8193a1be38effe2bdcc632fdb570e9fc
2057]
2058[test_util.py: use SHA-256 from pycryptopp instead of MD5 from hashlib (for uses in which any hash will do), since hashlib was only added to the stdlib in Python 2.5.
2059david-sarah@jacaranda.org**20100806050051
2060 Ignore-this: 552049b5d190a5ca775a8240030dbe3f
2061]
2062[Add a byte-spans utility class, like perl's Set::IntSpan for .newsrc files.
2063Brian Warner <warner@lothar.com>**20100804072600
2064 Ignore-this: bbad42104aeb2f26b8dd0779de546128
2065 Also a data-spans class, which records a byte (instead of a bit) for each
2066 index.
2067]
2068[Clean up log.err calls, for one of the issues in #889.
2069Brian Warner <warner@lothar.com>**20100112013343
2070 Ignore-this: f58455ce15f1fda647c5fb25d234d2db
2071 
2072 allmydata.util.log.err() either takes a Failure as the first positional
2073 argument, or takes no positional arguments and must be invoked in an
2074 exception handler. Fixed its signature to match both foolscap.logging.log.err
2075 and twisted.python.log.err . Included a brief unit test.
2076]
2077[util.log: send log.err to Twisted too, so that Trial tests are flunked
2078warner@lothar.com**20080920173427]
2079[NEWS and docs/quickstart.html for 1.8.0beta2.
2080david-sarah@jacaranda.org**20100806035112
2081 Ignore-this: 3a593cfdc2ae265da8f64c6c8aebae4
2082]
2083[docs: incomplete beginnings of a NEWS update for v1.8β
2084zooko@zooko.com**20100802072840
2085 Ignore-this: cb00fcd4f1e0eaed8c8341014a2ba4d4
2086]
2087[NEWS: describe #1055
2088zooko@zooko.com**20100801034338
2089 Ignore-this: 3a16cfa387c2b245c610ea1d1ad8d7f1
2090]
2091[tests, NEWS, CREDITS re: #1117
2092zooko@zooko.com**20100718203225
2093 Ignore-this: 1f08be2c692fb72cc0dd023259f11354
2094 Give Brian and Kevan promotions, move release date in NEWS to the 18th, commit Brian's test for #1117.
2095 fixes #1117
2096]
2097[Re-work 'test_upload.py' to be more readable; add more tests for #778
2098Kevan Carstensen <kevan@isnotajoke.com>**20091116192334
2099 Ignore-this: 7e8565f92fe51dece5ae28daf442d659
2100]
2101[Alter tests to use the new form of set_shareholders
2102Kevan Carstensen <kevan@isnotajoke.com>**20091104033602
2103 Ignore-this: 3deac11fc831618d11441317463ef830
2104]
2105[Minor tweak to an existing test -- make the first server read-write, instead of read-only
2106Kevan Carstensen <kevan@isnotajoke.com>**20091104034232
2107 Ignore-this: a951a46c93f7f58dd44d93d8623b2aee
2108]
2109[Add more tests for comment:53 in ticket #778
2110Kevan Carstensen <kevan@isnotajoke.com>**20091104112849
2111 Ignore-this: 3bb2edd299a944cc9586e14d5d83ec8c
2112]
2113[Test Tahoe2PeerSelector to make sure that it recognizeses existing shares on readonly servers
2114Kevan Carstensen <kevan@isnotajoke.com>**20091109003735
2115 Ignore-this: 12f9b4cff5752fca7ed32a6ebcff6446
2116]
2117[Add a test for upload.shares_by_server
2118Kevan Carstensen <kevan@isnotajoke.com>**20091104111324
2119 Ignore-this: f9802e82d6982a93e00f92e0b276f018
2120]
2121[Refactor some behavior into a mixin, and add tests for the behavior described in #778
2122"Kevan Carstensen" <kevan@isnotajoke.com>**20091030091908
2123 Ignore-this: a6f9797057ca135579b249af3b2b66ac
2124]
2125[docs: update NEWS
2126zooko@zooko.com**20100718053225
2127 Ignore-this: 63d5c782ef84812e6d010f0590866831
2128]
2129[docs: tidy up NEWS a little
2130zooko@zooko.com**20100718032434
2131 Ignore-this: 54f2820fd1a37c8967609f6bfc4e5e18
2132]
2133[NEWS: add snippet about #1083
2134zooko@zooko.com**20100718020653
2135 Ignore-this: d353a9d93cbc5a5e6ba4671f78d1e22b
2136]
2137[NEWS: Forward-compatibility improvements for non-ASCII caps (#1051).
2138david-sarah@jacaranda.org**20100718143622
2139 Ignore-this: 1edfebc4bd38a3b5c35e75c99588153f
2140]
2141[iputil.py: Add support for FreeBSD 7,8 and 9
2142francois@ctrlaltdel.ch**20100718022832
2143 Ignore-this: 1829b4cf4b91107f4cf87841e6167e99
2144 committed by: zooko@zooko.com
2145 date: 2010-07-17
2146 and I also patched: NEWS and CREDITS
2147]
2148[support freebsd 6
2149ben@links.org**20080428074140]
2150[NEWS: reorder NEWS snippets to be in descending order of interestingness
2151zooko@zooko.com**20100718015929
2152 Ignore-this: 146c42e88a9555a868a04a69dd0e5326
2153]
2154[CLI: add 'tahoe unlink' as an alias to 'tahoe rm', for forward-compatibility.
2155david-sarah@jacaranda.org**20100717220411
2156 Ignore-this: 3ecdde7f2d0498514cef32e118e0b855
2157]
2158[small change to CREDITS
2159david-sarah@jacaranda.org**20100603062421
2160 Ignore-this: 2909cdbedc19da5573dec810fc23243
2161]
2162[docs: CREDITS and NEWS
2163zooko@zooko.com**20100714060150
2164 Ignore-this: dc83e612f77d69e50ee975f07f6b16fe
2165]
2166[CREDITS: jsgf
2167zooko@zooko.com**20100608143052
2168 Ignore-this: 10abe06d40b88e22a9107d30f1b84810
2169]
2170[docs: CREDITS for Jeremy Visser
2171zooko@zooko.com**20100524081829
2172 Ignore-this: d7c1465fd8d4e25b8d46d38a1793465b
2173]
2174[CREDITS to Jacob Appelbaum
2175zooko@zooko.com**20100304015616
2176 Ignore-this: 70db493abbc23968fcc8db93f386ea54
2177]
2178[NEWS: add UTF-8 coding declaration.
2179david-sarah@jacaranda.org**20100609234851
2180 Ignore-this: 3e6ef125b278e0a982c88d23180a78ae
2181]
2182[docs: more CREDITS for Kevan, plus utf-8 BOM
2183zooko@zooko.com**20100619045809
2184 Ignore-this: ee9c3b7cf7e385c8ca396091cebc9ca6
2185]
2186[NEWS: add NEWS snippets about two recent patches
2187zooko@zooko.com**20100708162058
2188 Ignore-this: 6c9da6a0ad7351a960bdd60f81532899
2189]
2190[docs: update NEWS for release 1.7.0
2191zooko@zooko.com**20100619045750
2192 Ignore-this: 112c352fd52297ebff8138896fc6353d
2193]
2194[CREDITS: more creds for Kevan, plus utf-8 BOM
2195zooko@zooko.com**20100619045503
2196 Ignore-this: 72d02bdd7a0f324f1cee8cd399c7c6de
2197]
2198[fix typo in CREDITS file
2199"Zooko O'Whielacronx <zooko@zooko.com>"**20070506212642]
2200[relnotes.txt and docs/known_issues.txt for 1.8.0beta2.
2201david-sarah@jacaranda.org**20100806040823
2202 Ignore-this: 862ad55d93ee37259ded9e2c9da78eb9
2203]
2204[docs/known_issues.txt: update release version and date.
2205david-sarah@jacaranda.org**20100718235940
2206 Ignore-this: dbbb42dbfa6c0d205a0b8e6e58eee9c7
2207]
2208[docs: update known_issues.txt with more detail about web browser "safe-browsing" features and slightly tweaked formatting
2209zooko@zooko.com**20100619051734
2210 Ignore-this: afc10be0da2517ddd0b58e42ef9aa46d
2211]
2212[doc_reformat_known_issues.txt
2213freestorm77@gmail.com**20100424114118
2214 Ignore-this: 9577c3965d77b7ac18698988cfa06049
2215 
2216     - Added heading format begining and ending by "=="
2217     - Added Index
2218     - Added Title
2219           
2220     Note: No change are made in paragraphs content
2221   
2222 
2223]
2224[Document leakage of cap URLs via phishing filters in known_issues.txt
2225david-sarah@jacaranda.org**20100202015238
2226 Ignore-this: 78e668dbca77c0e3a73e10c0b74cf024
2227]
2228[docs: relnotes.txt for 1.8.0β
2229zooko@zooko.com**20100803154913
2230 Ignore-this: d9101f72572b18da3cfac3c0e272c907
2231]
2232[relnotes.txt: updated for v1.7.1 release!
2233zooko@zooko.com**20100719083059
2234 Ignore-this: 9f10eb19b65a39d652b546c57481da45
2235]
2236[relnotes.txt, docs/quickstart.html: prepare for 1.7.1 release. Don't claim to work on Cygwin (this might work but is untested).
2237david-sarah@jacaranda.org**20100718235437
2238 Ignore-this: dfc7334ee4bb76c04ee19304a7f1024b
2239]
2240[docs: quickstart.html: link to 1.7.0 zip file and add UTF-8 BOM
2241zooko@zooko.com**20100619050124
2242 Ignore-this: 5104fc90af542b97662b4016da975f34
2243]
2244[docs: a few tweaks to NEWS and CREDITS and make quickstart.html point to 1.7.0β!
2245zooko@zooko.com**20100609142927
2246 Ignore-this: f8097d3062f41f06c4420a7c84a56481
2247]
2248[quickstart.html: We haven't released 1.7beta yet.
2249david-sarah@jacaranda.org**20100606220301
2250 Ignore-this: 4e18898cfdb08cc3ddd1ff94d43fdda7
2251]
2252[quickstart.html: link to snapshots page, sorted with most recent first.
2253david-sarah@jacaranda.org**20100606221127
2254 Ignore-this: 93ea7e6ee47acc66f6daac9cabffed2d
2255]
2256[Remove the 'tahoe debug consolidate' subcommand.
2257david-sarah@jacaranda.org**20100607183757
2258 Ignore-this: 4b14daa3ae557cea07d6e119d25dafe9
2259]
2260[consolidate: remove pointless 'else' after for loop
2261warner@allmydata.com**20090313082751
2262 Ignore-this: 517f41316f7ae40b92b9eef8269a4b69
2263]
2264[Change relative imports to absolute
2265david-sarah@jacaranda.org**20100226071433
2266 Ignore-this: 32e6ce1a86e2ffaaba1a37d9a1a5de0e
2267]
2268[confwiz: update the config wiz to open the welcome page
2269robk-tahoe@allmydata.com**20080215021258
2270 
2271 regardless of platform, the confwiz now opens the welcoe page upon
2272 writing a config.  it also provides a 'plat' argument (from python's
2273 sys.platform) to help disambiguate our instructions by platform.
2274 
2275]
2276[confwiz: reworked confwiz look and feel
2277robk-tahoe@allmydata.com**20080318231536
2278 
2279 this changes the confwiz to have a look and feel much more consistent
2280 with that of the innosetup installer it is launched within the context
2281 of.  this applies, naturally, primarily to windows.
2282]
2283[confwiz: revise layout
2284robk-tahoe@allmydata.com**20080128203603
2285 
2286 fix the make-confwiz-match-installer-size changes, to eliminate some weird
2287 layout/rendering bugs.  also tweaked the layout slightly to add space between
2288 the warning label and the newsletter subscribe checkbox.
2289]
2290[tweak config wizard window size
2291robk-tahoe@allmydata.com**20080128200713
2292 
2293 adjust the confiwiz frames to display at a size comparable to the innosetup
2294 installer window
2295]
2296[installer and config - name changes
2297secorp@allmydata.com**20080227013439]
2298[native client - renaming a few more instances to be consistent with Allmydata naming scheme for the release, maybe should parameterize this
2299secorp@allmydata.com**20080222024657]
2300[native client - updated system tray name, missed it at first
2301secorp@allmydata.com**20080222023811]
2302[config wizard - changing the name
2303secorp@allmydata.com**20080227015554]
2304[gui/macapp: improve 'about' box
2305robk-tahoe@allmydata.com**20080925135415
2306 
2307 adds exactly 1 metric dollop of professionalism to the previously
2308 rather amateurish looking about box.
2309]
2310[macapp: changed to remove 'Tahoe' from .app name
2311robk-tahoe@allmydata.com**20080611003145
2312 
2313 Change the build product from 'Allmydata Tahoe' to 'Allmydata'
2314 more inkeeping with the branding of the Allmydata product
2315]
2316[macapp: new mac icon
2317robk-tahoe@allmydata.com**20080308004828
2318 
2319 this provides a new icon for the .app bundle
2320 also removes the setting of the dock icon from within wx
2321 (which previously used a different icon)
2322]
2323[better mac .app icon
2324robk-tahoe@allmydata.com**20080125022347]
2325[util: copy in nummedobj from pyutil
2326zooko@zooko.com**20081104195550]
2327[util: copy in dictutil from pyutil
2328zooko@zooko.com**20081104195327]
2329[trivial: whitespace cleanup
2330zooko@zooko.com**20090106172058
2331 Ignore-this: 50ee40d42cc8d8f39d2f8ed15f6790d4
2332]
2333[checker: don't let failures in add-lease affect checker results. Closes #875.
2334Brian Warner <warner@lothar.com>**20091229230108
2335 Ignore-this: ef1a367b93e4d01298c2b1e6ca59c492
2336 
2337 Mutable servermap updates and the immutable checker, when run with
2338 add_lease=True, send both the do-you-have-block and add-lease commands in
2339 parallel, to avoid an extra round trip time. Many older servers have problems
2340 with add-lease and raise various exceptions, which don't generally matter.
2341 The client-side code was catching+ignoring some of them, but unrecognized
2342 exceptions were passed through to the DYHB code, concealing the DYHB results
2343 from the checker, making it think the server had no shares.
2344 
2345 The fix is to separate the code paths. Both commands are sent at the same
2346 time, but the errback path from add-lease is handled separately. Known
2347 exceptions are ignored, the others (both unknown-remote and all-local) are
2348 logged (log.WEIRD, which will trigger an Incident), but neither will affect
2349 the DYHB results.
2350 
2351 The add-lease message is sent first, and we know that the server handles them
2352 synchronously. So when the checker is done, we can be sure that all the
2353 add-lease messages have been retired. This makes life easier for unit tests.
2354]
2355[cli: suppress DeprecationWarnings emitted from importing nevow and twisted. Fixes #859
2356david-sarah@jacaranda.org**20100201004429
2357 Ignore-this: 22d7216921cd5f04381c0194ed501bbe
2358]
2359[setup: don't catch ImportError when importing _auto_deps in allmydata/__init__.py
2360zooko@zooko.com**20080430202204
2361 Nowadays pkg_resources is a runtime requirement, and if there is something screwed up in the installation, we want an explicit ImportError exception as early as possible.
2362]
2363[versioning: include an "appname" in the application version string in the versioning protocol, and make that appname be controlled by setup.py
2364zooko@zooko.com**20090211231816
2365 Ignore-this: 6a0e62492bd271cdaaf696c4a35bc919
2366 It is currently hardcoded in setup.py to be 'allmydata-tahoe'.  Ticket #556 is to make it configurable by a runtime command-line argument to setup.py: "--appname=foo", but I suddenly wondered if we really wanted that and at the same time realized that we don't need that for tahoe-1.3.0 release, so this patch just hardcodes it in setup.py.
2367 setup.py inspects a file named 'src/allmydata/_appname.py' and assert that it contains the string "__appname__ = 'allmydata-tahoe'", and creates it if it isn't already present.  src/allmydata/__init__.py import _appname and reads __appname__ from it.  The rest of the Python code imports allmydata and inspects "allmydata.__appname__", although actually every use it uses "allmydata.__full_version__" instead, where "allmydata.__full_version__" is created in src/allmydata/__init__.py to be:
2368 
2369 __full_version__ = __appname + '-' + str(__version__).
2370 
2371 All the code that emits an "application version string" when describing what version of a protocol it supports (introducer server, storage server, upload helper), or when describing itself in general (introducer client), usese allmydata.__full_version__.
2372 
2373 This fixes ticket #556 at least well enough for tahoe-1.3.0 release.
2374 
2375]
2376[setup: require darcsver >= 1.2.0 and rely exclusively on darcsver to set the version string
2377zooko@zooko.com**20090129185640
2378 Ignore-this: b7ed63526015c0769812f3c6f2342b8c
2379]
2380[setup: require darcsver always, and not just when we see the string "darcsver" in sys.argv, because the new aliases hack means that the string might not appear in sys.argv
2381zooko@zooko.com**20090120184229
2382 Ignore-this: beecca08d9f59704be7ef1aeca6fd779
2383]
2384[setup: setup_requires darcsver >= 1.1.5
2385zooko@zooko.com**20080621210109]
2386[setup: a tiny tweak to setup to avoid requiring darcsver package if the user isn't invoking "./setup.py darcsver"
2387zooko@zooko.com**20080418050752
2388 The real reason for this patch is to test our patch management infrastructure.
2389]
2390[setup: setup_require darcsver >= 1.1.2
2391zooko@zooko.com**20080311025707]
2392[setup: bundle darcsver-1.1.2.tar
2393zooko@zooko.com**20080311025647]
2394[setup: invoke darcsver whenever doing an sdist
2395zooko@zooko.com**20090129165125
2396 Ignore-this: 88b9bf4fae0303250ada810d351b566
2397]
2398[setup: always run "build" before running "test"
2399zooko@zooko.com**20090126233240
2400 Ignore-this: 8cf76347ba24f02023f1690a470569df
2401]
2402[setup: always run build_tahoe before running tests
2403zooko@zooko.com**20090126233024
2404 Ignore-this: da31145fa86a61a307dc5dcc4debc0bb
2405]
2406[test_runner.py: remove test_client_no_noise: the issue in question is
2407warner@lothar.com**20090601225007
2408 ticketed in http://divmod.org/trac/ticket/2830 and doesn't need a Tahoe-side
2409 change, plus this test fails on win32 for unrelated reasons (and test_client
2410 is the place to think about the win32 issue).
2411]
2412[setup: go ahead and check for noise in test_client_no_noise
2413zooko@zooko.com**20090126234616
2414 Ignore-this: dff1a3511fdfad1a61fe73e4277c8981
2415]
2416[test_runner: skip all spawnProcess-using tests on cygwin, since spawnProcess just hangs forever
2417warner@lothar.com**20090209083400
2418 Ignore-this: e8c2c85650b61cf084cb8a8852118b86
2419]
2420[setup: find a "bin/tahoe" executable to test based on allmydata.__file__ instead of based on the CWD
2421zooko@zooko.com**20090124003437
2422 Ignore-this: 25282068ce695c12a2b1f23c6fd2b205
2423 This means that the tests still work if you are executing them from a CWD other than the src dir -- *if* the "bin/tahoe" is found at os.path.dirname(os.path.dirname(os.path.dirname(allmydata.__file__))).
2424 If no file is found at that location, then just skip the tests of executing the "tahoe" executable, because we don't want to accidentally run those tests against an executable from a different version of tahoe.
2425]
2426[setup: add test that the tests are testing the right source code
2427zooko@zooko.com**20090122215240
2428 Ignore-this: f56c1bc525924154042fefa5d30b04f6
2429 This is a test of #145, and I think that now the code passes this test.
2430]
2431[setup: add a test for a warning message from importing nevow, marked as TODO, comment-out the assertion of no-noise inside other test_runner tests
2432zooko@zooko.com**20090126233046
2433 Ignore-this: 6b1554ed9268988fd65b8e8aac75ed4e
2434]
2435[setup: change test_runner to invoke "bin/tahoe" in a subprocess instead of executing runner.runner()
2436zooko@zooko.com**20090122213818
2437 Ignore-this: f7ef67adf1b9508617c9a7d305191627
2438 This is necessary because loading allmydata code now depends on PYTHONPATH manipulation which is done in the "bin/tahoe" script.  Unfortunately it makes test_runner slower since it launches and waits for many subprocesses.
2439]
2440[startstop_node.py: improve test coverage a little bit
2441warner@lothar.com**20070919085027]
2442[startstop_node.py: refactor find_twistd() out so it is only run when you need to start a node
2443warner@lothar.com**20070711021355]
2444[test_runner.RunNode: pass an explicit webport, to avoid using 8123 (which might be in used by a running node). Closes #175.
2445warner@lothar.com**20071013230639]
2446[test_runner.py: test launching an introducer too
2447warner@lothar.com**20080218062856]
2448[#542 'tahoe create-key-generator': fix the .tac file this creates to be compatible with modern code, add a test
2449warner@allmydata.com**20081201234721]
2450[key_generator: make default key size be a constructor argument instead of a class variable, pass default key size of 522 (the smallest that we can do) in unit tests to make them faster
2451zooko@zooko.com**20080422192818]
2452[key_generator: fix timing, make tests more robust
2453robk-tahoe@allmydata.com**20080404014346
2454 
2455 previously there was an edge case in the timing of expected behaviour
2456 of the key_generator (w.r.t. the refresh delay and twisted/foolscap
2457 delivery).  if it took >6s for a key to be generated, then it was
2458 possible for the pool refresh delay to transpire _during_ the
2459 synchronous creation of a key in remote_get_rsa_key_pair.  this could
2460 lead to the timer elapsing during key creation and hence the pool
2461 being refilled before control returned to the client.
2462 
2463 this change ensures that the time window from a get key request
2464 until the key gen reactor blocks to refill the pool is the time
2465 since a request was answered, not since a request was asked.
2466 this causes the behaviour to match expectations, as embodied in
2467 test_keygen, even if the delay window is dropped to 0.1s
2468]
2469[key_generator: fix a typo in the .tac generating create-key-generator
2470robk-tahoe@allmydata.com**20080408180606
2471 
2472 verbose is an object attribute, no longer settable via init args
2473]
2474[test: extend timeout on the hotline file that prevents the client from stopping itself
2475zooko@zooko.com**20081222030629
2476 Ignore-this: 391f48caef9d6ad558e540ded56a8075
2477 The 20-second timeout was apparently tripped on my Powerbook G4 "draco".
2478]
2479[client.py: increase hotline timeout, the check_memory test is failing
2480warner@allmydata.com**20070926022233]
2481[Unicode fixes.
2482david-sarah@jacaranda.org**20100607010215
2483 Ignore-this: d58727b5cd2ce00e6b6dae3166030138
2484]
2485[test_cli: pass rc out of do_cli() too
2486warner@lothar.com**20081203020828]
2487[cli: if response code from wapi server is not 200 then stop instead of proceeding
2488zooko@zooko.com**20081220134918
2489 Ignore-this: 907481c941fc5696630b9c118137fb52
2490 Also, include the data that failed to json parse in an exception raised by the json parser.
2491]
2492[cli: tests: skip symlink test if there is no os.symlink
2493zooko@zooko.com**20090115001010
2494 Ignore-this: 4987fea4fe070c2dd5ff75401fbf89e1
2495]
2496[Added tests for the fixed alias related command's synopsis
2497Alberto Berti <alberto@metapensiero.it>**20090222163732
2498 Ignore-this: 4432b4e88e990ba53a5b3fe0f12db2ac
2499]
2500[Use failUnlessEqual instead of failUnless(a == b)
2501Alberto Berti <alberto@metapensiero.it>**20090222224214
2502 Ignore-this: 8f9144632e3ac9acb4726fb48a083bf4
2503]
2504[scripts: stop using RuntimeError, for #639
2505warner@lothar.com**20090222233106
2506 Ignore-this: 686a424442670fffbd4d1816c284a601
2507]
2508[consolidator: add progress to scan-old-directory passes
2509warner@allmydata.com**20090313054728
2510 Ignore-this: adc67a34f4f19fd58c5bc76301b3df36
2511]
2512[consolidate: tolerate unicode dirnames
2513warner@allmydata.com**20090313065402
2514 Ignore-this: 7e65703ed3d12d4bd5ec14b693e5f61f
2515]
2516[consolidate: add eta, flush stdout
2517warner@allmydata.com**20090313082451
2518 Ignore-this: 845f63adccc32557c6864ae6120ba836
2519]
2520[consolidator: fix cycle detection to not trigger on merely shared directories, add snapshot counter to progress
2521warner@allmydata.com**20090313042229
2522 Ignore-this: eba2cf9f1b1364b8e4c5ae4fa030a99f
2523]
2524[consolidator: re-use more directories, add total directories seen-vs-used counts
2525warner@allmydata.com**20090313034801
2526 Ignore-this: 6e743d2940a9fe129cee31008c894d70
2527]
2528[consolidate: create multiple numbered backups of the original Archives directory, not just the first time
2529warner@allmydata.com**20090312230427
2530 Ignore-this: e4985f76969b584d099b050781aa561c
2531]
2532[consolidator: add more verbose traversal of directories
2533warner@allmydata.com**20090312232900
2534 Ignore-this: 8ff0e17c6174566832a566a111032db4
2535]
2536[tahoe_get: don't create the output file on error. Closes #121.
2537Brian Warner <warner@lothar.com>**20091227220404
2538 Ignore-this: 58d5e793a77ec6e87d9394ade074b926
2539]
2540[tahoe backup: skip all symlinks, with warning. Fixes #850, addresses #641.
2541Brian Warner <warner@lothar.com>**20100127223517
2542 Ignore-this: ab5cf05158d32a575ca8efc0f650033f
2543]
2544[Improve behaviour of 'tahoe ls' for unknown objects, addressing kevan's comments
2545david-sarah@jacaranda.org**20100220061313
2546 Ignore-this: 6205025c477f1c999473a4ae67e1c83
2547]
2548[CLI: Support for https url in option --node-url
2549Francois Deppierraz <francois@ctrlaltdel.ch>**20100430185609
2550 Ignore-this: 1717176b4d27c877e6bc67a944d9bf34
2551 
2552 This patch modifies the regular expression used for verifying of '--node-url'
2553 parameter.  Support for accessing a Tahoe gateway over HTTPS was already
2554 present, thanks to Python's urllib.
2555 
2556]
2557[test_stringutils.py: Fix a trivial Python 2.4 syntax incompatibility
2558Francois Deppierraz <francois@ctrlaltdel.ch>**20100521093345
2559 Ignore-this: 9297e3d14a0dd37d0c1a4c6954fd59d3
2560]
2561[test_stringutils.py: Mock the open() call in test_open_unicode
2562Francois Deppierraz <francois@ctrlaltdel.ch>**20100521135817
2563 Ignore-this: d8be4e56a6eefe7d60f97f01ea20ac67
2564 
2565 This test ensure that open(a_unicode_string) is used on Unicode platforms
2566 (Windows or MacOS X) and that open(a_correctly_encoded_bytestring) on other
2567 platforms such as Unix.
2568 
2569]
2570[test_stringutils.py: Add a test class for OpenBSD 4.1 with LANG=C
2571Francois Deppierraz <francois@ctrlaltdel.ch>**20100521140053
2572 Ignore-this: 63f568aec259cef0e807752fc8150b73
2573]
2574[test_stringutils.py: Skip test_listdir_unicode on mocked platform which cannot store non-ASCII filenames
2575Francois Deppierraz <francois@ctrlaltdel.ch>**20100521160559
2576 Ignore-this: b93fde736a8904712b506e799250a600
2577]
2578[test_stringutils.py: Skip test test_listdir_unicode_good if filesystem supports only ASCII filenames
2579Francois Deppierraz <francois@ctrlaltdel.ch>**20100521160839
2580 Ignore-this: f2ccdbd04c8d9f42f1efb0eb80018257
2581]
2582[fix flakes
2583zooko@zooko.com**20100604075845
2584 Ignore-this: 3e6a84b78771b0ad519e771a13605f0
2585]
2586[setup: fix "tahoe start" to work on Windows even when a Tahoe base dir hasn't been configured in the Windows registry
2587zooko@zooko.com**20090121184720
2588 Ignore-this: ba147a8f75e8aa9cdc3ee0a56dbf7413
2589]
2590[change default node-directory on windows to do registry lookup, not ~/.tahoe
2591robk-tahoe@allmydata.com**20080111013218]
2592[runner: make most commands use ~/.tahoe by default (create-client, start/stop/restart, all CLI tools, but *not* create-introducer
2593warner@lothar.com**20071011085423]
2594[SFTP: changes for #1063 ('no-write' field) including comment:1 (clearing owner write permission diminishes to a read cap). Includes documentation changes, but not tests for the new behaviour.
2595david-sarah@jacaranda.org**20100601051139
2596 Ignore-this: eff7c08bd47fd52bfe2b844dabf02558
2597]
2598[docs/FTP: the Twisted patch (t3462) has landed, will be in the next release
2599Brian Warner <warner@lothar.com>**20100223210402
2600 Ignore-this: ddc5c8da8c95d8c19380d8c7ecbaf18
2601]
2602[ftpd: update docs, point to Twisted ticket for the proposed patch
2603Brian Warner <warner@lothar.com>**20090731183226
2604 Ignore-this: f1e93258a0700a529d9fef6ff93847a4
2605]
2606[SFTP: fix silly bug in _sync_heisenfiles ('f is not ignore' vs 'not (f is ignore)').
2607david-sarah@jacaranda.org**20100530053807
2608 Ignore-this: 71c4bc62613bf8fef835886d8eb61c27
2609]
2610[SFTP: another try at fixing the _sync_heisenfiles bug.
2611david-sarah@jacaranda.org**20100530055254
2612 Ignore-this: c15f76f32a60083a6b7de6ca0e917934
2613]
2614[SFTP: fix bug in previous logging patch.
2615david-sarah@jacaranda.org**20100530050000
2616 Ignore-this: 613e4c115f03fe2d04c621b510340817
2617]
2618[SFTP: more logging to track down OpenOffice hang.
2619david-sarah@jacaranda.org**20100530040809
2620 Ignore-this: 6c11f2d1eac9f62e2d0f04f006476a03
2621]
2622[SFTP: avoid blocking close on a heisenfile that has been abandoned or never changed. Also, improve the logging to help track down a case where OpenOffice hangs on opening a file with FXF_READ|FXF_WRITE.
2623david-sarah@jacaranda.org**20100530025544
2624 Ignore-this: 9919dddd446fff64de4031ad51490d1c
2625]
2626[SFTP: the same bug as in _sync_heisenfiles also occurred in two other places.
2627david-sarah@jacaranda.org**20100530060127
2628 Ignore-this: 8d137658fc6e4596fa42697476c39aa3
2629]
2630[SFTP: further improvements to test coverage.
2631david-sarah@jacaranda.org**20100602234422
2632 Ignore-this: 87eeee567e8d7562659442ea491e187c
2633]
2634[SFTP: cater to clients that assume a file is created as soon as they have made an open request; also, fix some race conditions associated with closing a file at about the same time as renaming or removing it.
2635david-sarah@jacaranda.org**20100529045253
2636 Ignore-this: 2404076b2154ff2659e2b10e0b9e813c
2637]
2638[SFTP: fix pyflakes warnings; drop 'noisy' versions of eventually_callback and eventually_errback; robustify conversion of exception messages to UTF-8.
2639david-sarah@jacaranda.org**20100523140905
2640 Ignore-this: 420196fc58646b05bbc9c3732b6eb314
2641]
2642[SFTP: avoid logging all data passed to callbacks.
2643david-sarah@jacaranda.org**20100519000651
2644 Ignore-this: ade6d69a473ada50acef6389fc7fdf69
2645]
2646[SFTP: Increase test_sftp timeout to cater for francois' ARM buildslave.
2647david-sarah@jacaranda.org**20100522191639
2648 Ignore-this: a5acf9660d304677048ab4dd72908ad8
2649]
2650[SFTP: log tracebacks for RAISEd exceptions.
2651david-sarah@jacaranda.org**20100523221535
2652 Ignore-this: c76a7852df099b358642f0631237cc89
2653]
2654[SFTP: more logging to investigate behaviour of getAttrs(path).
2655david-sarah@jacaranda.org**20100523204236
2656 Ignore-this: e58fd35dc9015316e16a9f49f19bb469
2657]
2658[SFTP: fix time handling to make sure floats are not passed into twisted.conch, and to print times in the future less ambiguously in directory listings.
2659david-sarah@jacaranda.org**20100524230412
2660 Ignore-this: eb1a3fb72492fa2fb19667b6e4300440
2661]
2662[SFTP: 'sync' any open files at a direntry before opening any new file at that direntry. This works around the sshfs misbehaviour of returning success to clients immediately on close.
2663david-sarah@jacaranda.org**20100525230257
2664 Ignore-this: 63245d6d864f8f591c86170864d7c57f
2665]
2666[SFTP: handle removing a file while it is open. Also some simplifications of the logout handling.
2667david-sarah@jacaranda.org**20100525184210
2668 Ignore-this: 660ee80be6ecab783c60452a9da896de
2669]
2670[SFTP: fixes and test cases for renaming of open files.
2671david-sarah@jacaranda.org**20100523032549
2672 Ignore-this: 32e0726be0fc89335f3035157e202c68
2673]
2674[SFTP: Fix error in support for getAttrs on an open file, to index open files by directory entry rather than path. Extend that support to renaming open files. Also, implement the extposix-rename@openssh.org extension, and some other minor refactoring.
2675david-sarah@jacaranda.org**20100522035836
2676 Ignore-this: 8ef93a828e927cce2c23b805250b81a4
2677]
2678[SFTP: allow getAttrs to succeed on a file that has been opened for creation but not yet uploaded or linked (part of #1050).
2679david-sarah@jacaranda.org**20100520035613
2680 Ignore-this: 2f59107d60d5476edac19361ccf6cf94
2681]
2682[SFTP: fixed bugs that caused hangs during write (#1037).
2683david-sarah@jacaranda.org**20100517044228
2684 Ignore-this: b8b95e82c4057367388a1e6baada993b
2685]
2686[SFTP: add tests for more combinations of open flags.
2687david-sarah@jacaranda.org**20100519053933
2688 Ignore-this: b97ee351b1e8ecfecabac70698060665
2689]
2690[SFTP: allow FXF_WRITE | FXF_TRUNC (#1050).
2691david-sarah@jacaranda.org**20100519043240
2692 Ignore-this: bd70009f11d07ac6e9fd0d1e3fa87a9b
2693]
2694[SFTP: improve logging so that results of requests are (usually) logged.
2695david-sarah@jacaranda.org**20100520003652
2696 Ignore-this: 3f59eeee374a3eba71db9be31d5a95
2697]
2698[SFTP: change error code returned for ExistingChildError to FX_FAILURE (fixes gvfs with some picky programs such as gedit).
2699david-sarah@jacaranda.org**20100518004205
2700 Ignore-this: c194c2c9aaf3edba7af84b7413cec375
2701]
2702[SFTP: fixes related to reporting of permissions (needed for sshfs).
2703david-sarah@jacaranda.org**20100518054521
2704 Ignore-this: c51f8a5d0dc76b80d33ffef9b0541325
2705]
2706[Eliminate Windows newlines from sftpd.py.
2707david-sarah@jacaranda.org**20100515005656
2708 Ignore-this: cd54fd25beb957887514ae76e08c277
2709]
2710[SFTP: work around a probable bug in twisted.conch.ssh.session:loseConnection(). Also some minor error handling cleanups.
2711david-sarah@jacaranda.org**20100517012606
2712 Ignore-this: 5d3da7c4219cb0c14547e7fd70c74204
2713]
2714[SFTP: avoid race condition where .write could be called on an OverwriteableFileConsumer after it had been closed.
2715david-sarah@jacaranda.org**20100523233830
2716 Ignore-this: 55d381064a15bd64381163341df4d09f
2717]
2718[SFTP: Support statvfs extensions, avoid logging actual data, and decline shell sessions politely.
2719david-sarah@jacaranda.org**20100516154347
2720 Ignore-this: 9d05d23ba77693c03a61accd348ccbe5
2721]
2722[SFTP: implement execCommand to interoperate with clients that issue a 'df -P -k /' command. Also eliminate use of Zope adaptation.
2723david-sarah@jacaranda.org**20100516012754
2724 Ignore-this: 2d0ed28b759f67f83875b1eaf5778992
2725]
2726[sftpd.py: 'log.OPERATIONAL' should be just 'OPERATIONAL'.
2727david-sarah@jacaranda.org**20100515155533
2728 Ignore-this: f2347cb3301bbccc086356f6edc685
2729]
2730[Attempt to fix #1040 by making SFTPUser implement ISession.
2731david-sarah@jacaranda.org**20100515005719
2732 Ignore-this: b3baaf088ba567e861e61e347195dfc4
2733]
2734[Update SFTP implementation and tests: fix #1038 and switch to foolscap logging; also some code reorganization.
2735david-sarah@jacaranda.org**20100514043113
2736 Ignore-this: 262f76d953dcd4317210789f2b2bf5da
2737]
2738[New SFTP implementation: mutable files, read/write support, streaming download, Unicode filenames, and more
2739david-sarah@jacaranda.org**20100512055407
2740 Ignore-this: 906f51c48d974ba9cf360c27845c55eb
2741]
2742[sftpd: minor debug-logging tweak
2743warner@allmydata.com**20081105194511]
2744[ftpd/sftpd: stop using RuntimeError, for #639
2745warner@lothar.com**20090222232426
2746 Ignore-this: 97001362c4ba9e94b2e254e229b79987
2747]
2748[rollback [20090226150237-b2345-1e916a746a7f4627b050f02f0e442fae5caf69d4] for 1.4.0 release; #645
2749zooko@zooko.com**20090411181906
2750 Ignore-this: 15aa9ce6d1d49e9447f32e233d136bab
2751]
2752[Fix for bug #645, correct path handling logic so that it works from sshfs
2753Alberto Berti <alberto@metapensiero.it>**20090226150237
2754 Ignore-this: e9c1b2d48ebf4ba68100d76e54154a78
2755]
2756[Tests for new SFTP implementation
2757david-sarah@jacaranda.org**20100512060552
2758 Ignore-this: 20308d4a59b3ebc868aad55ae0a7a981
2759]
2760[unicode: make test_cli test a non-ascii argument, and make the fallback term encoding be locale.getpreferredencoding()
2761zooko@zooko.com**20100604141251
2762 Ignore-this: b2bfc07942f69141811e59891842bd8c
2763]
2764[test_cli.py: Fix tests when sys.stdout.encoding=None and refactor this code into functions
2765Francois Deppierraz <francois@ctrlaltdel.ch>**20100520084447
2766 Ignore-this: cf2286e225aaa4d7b1927c78c901477f
2767]
2768[More cleanups to test_cli using new utilities for reading and writing files.
2769david-sarah@jacaranda.org**20100206013855
2770 Ignore-this: 9fd2294406b346bfe9144fff6a61f789
2771]
2772[debug catalog-shares: tolerate even more errors on bad files/directories
2773warner@allmydata.com**20081030215447]
2774[unicode: always decode json manifest as utf-8 then encode for stdout
2775zooko@zooko.com**20100604084840
2776 Ignore-this: ac481692315fae870a0f3562bd7db48e
2777 pyflakes pointed out that the exception handler fallback called an un-imported function, showing that the fallback wasn't being exercised.
2778 I'm not 100% sure that this patch is right and would appreciate François or someone reviewing it.
2779]
2780[Test behaviour of 'tahoe ls' for unknown objects (#837)
2781david-sarah@jacaranda.org**20100224025913
2782 Ignore-this: b999f6239796a90cadb41e8650aa3782
2783]
2784[addendum to "Fix 'tahoe ls' on files (#771)"
2785Brian Warner <warner@lothar.com>**20091227232149
2786 Ignore-this: 6dd5e25f8072a3153ba200b7fdd49491
2787 
2788 tahoe_ls.py: tolerate missing metadata
2789 web/filenode.py: minor cleanups
2790 test_cli.py: test 'tahoe ls FILECAP'
2791]
2792[Fix 'tahoe ls' on files (#771). Patch adapted from Kevan Carstensen.
2793Brian Warner <warner@lothar.com>**20091227225443
2794 Ignore-this: 8bf8c7b1cd14ea4b0ebd453434f4fe07
2795 
2796 web/filenode.py: also serve edge metadata when using t=json on a
2797                  DIRCAP/childname object.
2798 tahoe_ls.py: list file objects as if we were listing one-entry directories.
2799              Show edge metadata if we have it, which will be true when doing
2800              'tahoe ls DIRCAP/filename' and false when doing 'tahoe ls
2801              FILECAP'
2802]
2803[unicode tests: fix missing import
2804zooko@zooko.com**20100604142630
2805 Ignore-this: db437fe8009971882aaea9de05e2bc3
2806]
2807[stringutils.py: Unicode helper functions + associated tests
2808Francois Deppierraz <francois@ctrlaltdel.ch>**20100520004105
2809 Ignore-this: 7a73fc31de2fd39d437d6abd278bfa9a
2810 
2811 This file contains a bunch of helper functions which converts
2812 unicode string from and to argv, filenames and stdout.
2813]
2814[tests: drastically increase timeout of this very time-consuming test in honor of François's ARM box
2815zooko@zooko.com**20100607115929
2816 Ignore-this: bf1bb52ffb6b5ccae71d4dde14621bc8
2817]
2818[add 'tahoe debug consolidate' command, to merge directories created by repeated 'tahoe cp -r' or the allmydata win32 backup tool, into the form that would have been created by 'tahoe backup'.
2819warner@allmydata.com**20090312205606
2820 Ignore-this: 66569ca2190aa7b0f9199bcf09dcb27e
2821]
2822[CREDITS: update François's Description
2823zooko@zooko.com**20100608155513
2824 Ignore-this: a266b438d25ca2cb28eafff75aa4b2a
2825]
2826[docs: Update NEWS file with new features and bugfixes in 1.7.0
2827francois@ctrlaltdel.ch**20100609091120
2828 Ignore-this: 8c1014e4469ef530e5ff48d7d6ae71c5
2829]
2830[docs: update relnotes.txt for Tahoe-LAFS v1.7.0!
2831zooko@zooko.com**20100619052048
2832 Ignore-this: 1dd2c851f02adf3ab5a33040051fe05a
2833 ... and remove relnotes-short.txt (just use the first section of relnotes.txt for that purpose)
2834]
2835[docs: update relnote.txt for Tahoe-LAFS v1.7.0β
2836zooko@zooko.com**20100609054602
2837 Ignore-this: 52e1bf86a91d45315960fb8806b7a479
2838]
2839[docs: update relnotes.txt for v1.6.1
2840zooko@zooko.com**20100224065755
2841 Ignore-this: 6d078e94425462ac8d074e3e7c82da28
2842]
2843[quickstart.html: python 2.5 -> 2.6 as recommended version
2844david-sarah@jacaranda.org**20100705175858
2845 Ignore-this: bc3a14645ea1d5435002966ae903199f
2846]
2847[Raise Python version requirement to 2.4.4 for non-UCS-2 builds, to avoid a critical Python security bug.
2848david-sarah@jacaranda.org**20100605031713
2849 Ignore-this: 2df2b6d620c5d8191c79eefe655059e2
2850]
2851[setup: fix bug (wrong import) in error message, as noticed by pyflakes
2852zooko@zooko.com**20090519195642
2853 Ignore-this: f1b9f8c00b46c1b5f2f20e5fc424f341
2854]
2855[setup: fix trivial bug in recent patch to test base64.py at startup
2856zooko@zooko.com**20090519195129
2857 Ignore-this: f6be038f74b53ca69e7109fe34adfbc
2858]
2859[setup: make Tahoe exit at startup with a useful error message if the base64.py module is buggy (fixes part of #710)
2860zooko@zooko.com**20090519194555
2861 Ignore-this: aa4d398235ddca8d417d61c9688e154
2862]
2863[setup: doc string describing what the require_auto_deps() function is for
2864zooko@zooko.com**20080815172234]
2865[setup: remove the try: except: around the import of pkg_resources -- we now require setuptools at run time and at build time
2866zooko@zooko.com**20080418202459]
2867[setup: don't try __import__(name) in _auto_deps.py
2868zooko@zooko.com**20080418191722
2869 This happens to work, because all of our "distribution" (i.e. distributable packaged Python code) names to coincide with all of their "package" (i.e. a directory with a __init__.py in it, which is "import"-able) names, except, I think for Twisted on Brian's debian sid system.
2870 
2871 But there's no reason why it should always work, and the only reason for that __import__() was to give us an explicit error message indicating missing requirements in the case that pkg_resources isn't importable or that the requirements don't have correct .egg-info metadata.  So, by removing this stanza we may allow certain places to get a more ad-hoc failure message, i.e. an ImportError from somewhere, instead of an ImportError from _auto_deps.py, but that's okay.
2872 
2873 Note that dependencies which do not have their .egg-info metadata with them are increasingly rare, since Python 2.5 distutils creates the .egg-info file by default, and Linux distributions have stopped their former practice of actively deleting the .egg-info files.
2874 
2875]
2876[_auto_deps.py: update comment
2877warner@allmydata.com**20080129195321]
2878[_auto_deps: tolerate DistributionNotFound (but not VersionConflict), to accomodate distributions (i.e. gutsy) which provide our dependencies but don't include .egg-info files
2879warner@allmydata.com**20080129195237]
2880[quickstart.html: warn against installing Python at a path containing spaces.
2881david-sarah@jacaranda.org**20100604032413
2882 Ignore-this: c7118332573abd7762d9a897e650bc6a
2883]
2884[docs: install.html: link into Python 2.5.5 download page
2885zooko@zooko.com**20100202065852
2886 Ignore-this: 1a9471b8175b7de5741d8445a7ede29d
2887]
2888[docs: install.html: recommend Python 2.5 (because I can build extension modules for it with mingw), architecture.txt: point out that our Proof of Retrievability feature is client-side-only
2889zooko@zooko.com**20100202053842
2890 Ignore-this: e33fd413a91771c77b17d7de0f215bea
2891]
2892[Clarify quickstart instructions for installing pywin32
2893david-sarah@jacaranda.org**20100511180300
2894 Ignore-this: d4668359673600d2acbc7cd8dd44b93c
2895]
2896[docs: install.html -> quickstart.html
2897zooko@zooko.com**20100421155757
2898 Ignore-this: 6084e203909306bed93efb09d0e6181d
2899 It is not called "installing" because that implies that it is going to change the configuration of your operating system. It is not called "building" because that implies that you need developer tools like a compiler. Also I added a stern warning against looking at the "InstallDetails" wiki page, which I have renamed to "AdvancedInstall".
2900]
2901[docs: a few small edits to try to guide newcomers through the docs
2902zooko@zooko.com**20100303231902
2903 Ignore-this: a6aab44f5bf5ad97ea73e6976bc4042d
2904 These edits were suggested by my watching over Jake Appelbaum's shoulder as he completely ignored/skipped/missed install.html and also as he decided that debian.txt wouldn't help him with basic installation. Then I threw in a few docs edits that have been sitting around in my sandbox asking to be committed for months.
2905]
2906[docs/debian.txt: add notes on how to build Tahoe on a debian system
2907warner@allmydata.com**20080617204132]
2908[add misc/simulate_load.py in an attempt to understand why permuting the peerlist per each storage index matters
2909zooko@zooko.com**20080712212622]
2910[docs: a few small edits to performance.txt and README
2911zooko@zooko.com**20100202052750
2912 Ignore-this: bf8b1b7438e8fb6da09eec9713c78533
2913]
2914[setup: update README to point to known_issues.txt
2915zooko@zooko.com**20080722010229]
2916[docs: a few edits to architecture.txt, most significantly highlighting "future work" to avoid confusing it with the current version, and adding a "future work" about a random-sampling Proof of Retrievability verifier
2917zooko@zooko.com**20100202045117
2918 Ignore-this: 81122b3042ea9ee6bc12e795c2386d59
2919]
2920[Fill in 'docs/performance.txt' with some performance information
2921Kevan Carstensen <kevan@isnotajoke.com>**20100202005914
2922 Ignore-this: c66b255b2bd2e7e11f5707b25e7b38be
2923]
2924[Add 'docs/performance.txt', which (for the moment) describes mutable file performance issues
2925Kevan Carstensen <kevan@isnotajoke.com>**20100115204500
2926 Ignore-this: ade4e500217db2509aee35aacc8c5dbf
2927]
2928[Change install.html to reference 1.6.1 instead of 1.6.0
2929david-sarah@jacaranda.org**20100228061941
2930 Ignore-this: 4738440e66a12dcf2cadf968fba5337
2931]
2932[Fix handling of correctly encoded unicode filenames (#534)
2933Francois Deppierraz <francois@ctrlaltdel.ch>**20100520004356
2934 Ignore-this: 8a3a7df214a855f5a12dc0eeab6f2e39
2935 
2936 Tahoe CLI commands working on local files, for instance 'tahoe cp' or 'tahoe
2937 backup', have been improved to correctly handle filenames containing non-ASCII
2938 characters.
2939   
2940 In the case where Tahoe encounters a filename which cannot be decoded using the
2941 system encoding, an error will be returned and the operation will fail.  Under
2942 Linux, this typically happens when the filesystem contains filenames encoded
2943 with another encoding, for instance latin1, than the system locale, for
2944 instance UTF-8.  In such case, you'll need to fix your system with tools such
2945 as 'convmv' before using Tahoe CLI.
2946   
2947 All CLI commands have been improved to support non-ASCII parameters such as
2948 filenames and aliases on all supported Operating Systems except Windows as of
2949 now.
2950]
2951[Fix an filename encoding issue with "tahoe cp"
2952francois@ctrlaltdel.ch**20081111200803]
2953[test_cli.py: Ensure that we can read our uploaded files back
2954francois@ctrlaltdel.ch**20081114134458]
2955[cli: undo the effects of [http://allmydata.org/trac/tahoe/changeset/20081222235453-92b7f-f841e18afb94e1fd95e6dafb799a3d876dd85c69]
2956zooko@zooko.com**20081224155317
2957 Ignore-this: d34ee20d89221357e32872d721d7685f
2958 We're just going to mark unicode in the cli as unsupported for tahoe-lafs-1.3.0.  Unicode filenames on the command-line do actually work for some platforms and probably only if the platform encoding is utf-8, but I'm not sure, and in any case for it to be marked as "supported" it would have to work on all platforms, be thoroughly tested, and also we would have to understand why it worked.  :-)
2959 
2960]
2961[cli: decode all cli arguments, assuming that they are utf-8 encoded
2962zooko@zooko.com**20081222235453
2963 Ignore-this: d92b4d146e1dc9848c6a4b6aaaa3d1e9
2964 Also encode all args to urllib as utf-8 because urllib doesn't handle unicode objects.
2965 I'm not sure if it is appropriate to *assume* utf-8 encoding of cli args.  Perhaps the Right thing to do is to detect the platform encoding.  Any ideas?
2966 This patch is mostly due to François Deppierraz.
2967 
2968]
2969[util/base32: allow unicode inputs to a2b() or could_be_base32_encoded(), and encode them with utf-8 before processing them
2970zooko@zooko.com**20081222234713
2971 Ignore-this: e1eb4caed2f78b2fef0df4bbf8bb26f7
2972]
2973[util/base32: loosen the precondition forbidding unicode and requiring str -- now it requires either unicode or str
2974zooko@zooko.com**20081222222237
2975 Ignore-this: 3481d644bdc5345facbc199d33653f37
2976 Hopefully this will make it so that tests pass with François Deppierraz's patch to fix the tahoe cli's handling of unicode argument.
2977]
2978[idlib: make failures much clearer when encountering unicode
2979robk-tahoe@allmydata.com**20080214232307
2980 
2981 while investigating fuse related stuff, I spent quite a while staring at
2982 very cryptic explosions I got from idlib.  it turns out that unicode
2983 objects and str objects have .translate() methods with differing signatures.
2984 to save anyone else the headache, this makes it very clear if you accidentally
2985 try to pass a unicode object in to a2b() etc.
2986]
2987[cli: mark unicode filenames as unsupported -- see #534 for details
2988zooko@zooko.com**20081224192802
2989 Ignore-this: b209ccbd838f633ec201e2e97156847c
2990]
2991[test_cli: use explicit (and stable) testdirs, instead of using self.mktemp
2992warner@lothar.com**20090307090428
2993 Ignore-this: 7c58d159e4f33d01635c3445d9e591f9
2994]
2995[Fixed tests again so they will pass on windows.
2996Alberto Berti <alberto@metapensiero.it>**20090223003502
2997 Ignore-this: 80d5074e7153642a2fa2a77958bfb50d
2998]
2999[Fixed tests so that they pass also on buildbots.
3000Alberto Berti <alberto@metapensiero.it>**20090222224311
3001 Ignore-this: fcb91cd6acf028382411d23d380a4576
3002]
3003[Added tests for the cse when listdir is an iterator
3004Alberto Berti <alberto@metapensiero.it>**20090222224356
3005 Ignore-this: 218fb2aba02c28b4b1e5324bdb5adeaa
3006]
3007[tests: raise the timeout for test_cli since Zandr's ARM machine totally burst through the old one
3008zooko@zooko.com**20090609210509]
3009[tahoe_add_alias.py: minor refactoring
3010Brian Warner <warner@lothar.com>**20100115064220
3011 Ignore-this: 29910e81ad11209c9e493d65fd2dab9b
3012]
3013[tahoe add-alias/create-alias: don't corrupt non-newline-terminated alias
3014Brian Warner <warner@lothar.com>**20100114210246
3015 Ignore-this: 9c994792e53a85159d708760a9b1b000
3016 file. Closes #741.
3017]
3018[Alter CLI utilities to handle nonexistent aliases better
3019Kevan Carstensen <kevan@isnotajoke.com>**20100211024318
3020 Ignore-this: e698ea4a57f5fe27c24336581ca0cf65
3021]
3022[tahoe_ls: improve error message when the target is missing
3023warner@allmydata.com**20080522003452]
3024[Implement more clearly defined moving semantics in tahoe_mv.py
3025kevan@isnotajoke.com**20090720034523
3026 Ignore-this: aaa592156f6fa93cb087824a74b0f2cb
3027]
3028[Prevent mutable objects from being retrieved from an immutable directory, and associated forward-compatibility improvements.
3029david-sarah@jacaranda.org**20100127064430
3030 Ignore-this: 5ef6a3554cf6bef0bf0712cc7d6c0252
3031]
3032[test/common: oops, forgot the FakeMutableFileNode.get_readonly fix
3033warner@allmydata.com**20080520015219]
3034[web: add test for unicode POST when the name comes from name=, not the filename attribute
3035warner@allmydata.com**20080604000939]
3036[fuse/blackmatch: added asynchronous (background) file download
3037robk-tahoe@allmydata.com**20081020233333
3038 
3039 previously, upon opening a file for reading, the open() call would block
3040 while the entire file was retrieved from tahoe into the cache directory.
3041 This change adds a DownloaderWithReadQueue class, and associated plumbing,
3042 such that an open() will return promptly with the download initiated 'in
3043 the background'.  Subsequent read() operations will block until enough
3044 data has been downloaded to satisfy that request.  This provides a behaviour
3045 similar to streaming, i.e. the client application will be able to read
3046 data from the fuse interface while the remainder of the file is still being
3047 downloaded.
3048 
3049]
3050[fuse/blackmatch: add readability to some logging, fix a permissions problem
3051robk-tahoe@allmydata.com**20081017004421
3052 
3053 adds a couple of functions to unpack 'mode' and 'flags' for open() calls, to
3054 facilitate debugging.
3055 
3056 adds a fix to ensure that all tmp files created for writing are opened with
3057 permissions 0600 - one problem I had with testing with the Finder was that
3058 files were being opened write only (0200) and were then failing to upload
3059 to tahoe due to internal permission denied errors.
3060 
3061 there remain a variety of problems with finder access which I'm unable to
3062 comprehend at this time.  sometimes copies to tahoe will work fine, sometimes
3063 they yield "the finder cannot complete the operation because some data ...
3064 could not be read or written. (Error code -36)" sometimes "You may need to
3065 enter the name and password for an administrator on this computer to change
3066 the item" sometimes "The operation cannot be completed because an item with
3067 the name ... already exists." and sometimes "The operation cannot be completed
3068 because the item ... is locked."  What seems to be absent is rhyme or reason.
3069 
3070 unix operations (cp, mv) work fine, rsync works fine.
3071 
3072]
3073[fuse/blackmatch: log exception in server startup
3074robk-tahoe@allmydata.com**20081017014650
3075 
3076 humphf.  my build runs the fuse stuff fine, but the build from the buildslave
3077 doesn't seem to start up properly.  hopefully this will elicit some useful info
3078]
3079[fuse/blackmatch: split into client/server (twisted server)
3080robk-tahoe@allmydata.com**20081016150846
3081 
3082 This implements a client/server split for blackmatch, where the client
3083 implements the fuse_main bindings and a simple blocking rpc client mechanism.
3084 The server implements the other half of that rpc mechanism, and contains all
3085 the actual logic for interpreting fuse requests in the context of the on disk
3086 cache and requests to the tahoe node.  The server is based on a twisted reactor.
3087 
3088 The rpc mechanism implements a simple method dispatch including marshalling,
3089 using json, of basic inert data types, in a flat namespace (no objects).
3090 The client side is written in a blocking idiom, to interface with the threading
3091 model used by the fuse_main bindings, whereas the server side is written for a
3092 twisted reactor-based environment, intended to facilitate implementing more
3093 sophisticated logic in that paradigm.  The two communicate over a unix domain
3094 socket, allocated within the nodedir.
3095 
3096 Command line usage is unchanged; the server is launched automatically by the
3097 client. The server daemonizes itself, to avoid preventing the original parent
3098 process (e.g. 'runtests') from waiting upon the server exiting.
3099 
3100 The client keeps open a 'keepalive' connection to the server; upon loss thereof
3101 the server will exit. This addresses the fact that the python-fuse bindings
3102 provide no notification of exit of the client process upon unmount.
3103 
3104 The client thus provides a relatively thin 'shim' proxying requests from the
3105 fuse_main bindings across the rpc to the server process, which handles the
3106 logic behind each request. 
3107 
3108 For the time being, a '--no-split' option is provided to surpress the splitting
3109 into client/server, yielding the prior behaviour.  Once the server logic gets
3110 more complex and more entrenched in a twisted idiom, this might be removed.
3111 The 'runtests' test harness currently tests both modes, as 'impl_c' and
3112 'impl_c_no_split'
3113 
3114]
3115[macfuse: fix unicode handling
3116robk-tahoe@allmydata.com**20080306234325
3117 
3118 at one point I'd thrown in a 'str' since fuse api bits required a str instance
3119 but tahoe returns unicode objects from its json parsing.  that, naturally
3120 enough should really be a utf8 encoded str of the unicode object...
3121]
3122[tahoefuse: return bogus but useful data to statfs call
3123robk-tahoe@allmydata.com**20080507234009
3124 
3125 previously tahoefuse returned the fs stat for the filesystem the fuse plugin
3126 was running upon (e.g. '/').  this works ok until you need to copy more to
3127 tahoe than the local machine has free disk space, at which point Finder will
3128 refuse to copy 'too much' data.
3129 
3130 this changes it so that tahoe always reports 2TiB used of an 8TiB filesystem
3131 this is entirely bogus, but allows copies of up to 2TiB to be initiated.
3132]
3133[fuse/impl_c: UNDO --auto-fsid option
3134robk-tahoe@allmydata.com**20080925134730
3135 
3136 rolling back:
3137 
3138 Thu Sep 25 14:42:23 BST 2008  robk-tahoe@allmydata.com
3139   * fuse/impl_c: add --auto-fsid option
3140   
3141   this was inspired by reading the fuse docs and discovering the 'fsid' option
3142   to fuse_main, and was _intended_ to support a sort of 'stability' to the
3143   filesystem (specifically derived from the root-uri mounted, whether directly
3144   or via an alias) to support mac aliases across unmount/remount etc.
3145   
3146   some experimentation shows that that doesn't actually work, and that, at
3147   least for mac aliases in my testing, they're tied to path-to-mountpoint and
3148   not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
3149   is causing weirdness therein.
3150   
3151   at any rate, I'm recording it simply for posterity, in case it turns out to
3152   be useful after all somewhere down the road.
3153   
3154 
3155     M ./contrib/fuse/impl_c/blackmatch.py +13
3156]
3157[fuse/impl_c: add --auto-fsid option
3158robk-tahoe@allmydata.com**20080925134223
3159 
3160 this was inspired by reading the fuse docs and discovering the 'fsid' option
3161 to fuse_main, and was _intended_ to support a sort of 'stability' to the
3162 filesystem (specifically derived from the root-uri mounted, whether directly
3163 or via an alias) to support mac aliases across unmount/remount etc.
3164 
3165 some experimentation shows that that doesn't actually work, and that, at
3166 least for mac aliases in my testing, they're tied to path-to-mountpoint and
3167 not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
3168 is causing weirdness therein.
3169 
3170 at any rate, I'm recording it simply for posterity, in case it turns out to
3171 be useful after all somewhere down the road.
3172 
3173]
3174[fuse/runtests: added --tests, renamed --suites
3175robk-tahoe@allmydata.com**20081016142836
3176 
3177 changed the --tests option to be --suites, as it takes a prefix, e.g. 'read'
3178 'write' (or 'all', the default) and runs those suites which are applicable to
3179 each implementation being tested.
3180 
3181 added a --tests option, which takes a list of tests, e.g. 'read_file_contents'
3182 'write_overlapping_large_writes' and runs all tests specified without regard
3183 to whether the implementation(s) under test are declared to support them.
3184 
3185 this is basically to allow a specific test or two to be run, saving time
3186 during development and debugging by not running the entire suite
3187]
3188[fuse/impl_c: move mac tahoefuse impl out into contrib/fuse
3189robk-tahoe@allmydata.com**20080925014214
3190 
3191 For a variety of reasons, high amongst them the fact that many people
3192 interested in fuse support for tahoe seem to have missed its existence,
3193 the existing fuse implementation for tahoe, previously 'mac/tahoefuse.py'
3194 has been renamed and moved.
3195 
3196 It was suggested that, even though the mac build depends upon it, that
3197 the mac/tahoefuse implementation be moved into contrib/fuse along with
3198 the other fuse implementations.  The fact that it's not as extensively
3199 covered by unit tests as mainline tahoe was given as corroboration.
3200 
3201 In a bid to try and stem the confusion inherent in having tahoe_fuse,
3202 tfuse and tahoefuse jumbled together (not necessarily helped by
3203 referring to them as impl_a, b and c respectively) I'm hereby renaming
3204 tahoefuse as 'blackmatch'  (black match is, per wikipedia "a type of
3205 crude fuse" hey, I'm a punny guy)  Maybe one day it'll be promoted to
3206 be 'quickmatch' instead...
3207 
3208 Anyway, this patch moves mac/tahoefuse.py out to contrib/fuse/impl_c/
3209 as blackmatch.py, and makes appropriate changes to the mac build process
3210 to transclude blackmatch therein.  this leaves the extant fuse.py and
3211 fuseparts business in mac/ as-is and doesn't attempt to address such
3212 issues in contrib/fuse/impl_c.
3213 
3214 it is left as an exercise to the reader (or the reader of a message
3215 to follow) as to how to deal with the 'fuse' python module on the mac.
3216 
3217 as of this time, blackmatch should work on both mac and linux, and
3218 passes the four extant tests in runtests.  (fwiw neither impl_a nor
3219 impl_b have I managed to get working on the mac yet)
3220 
3221 since blackmatch supports a read-write and caching fuse interface to
3222 tahoe, some write tests obviously need to be added to runtests.
3223 
3224]
3225[macfuse: move macfuse files around to simplify pythonpath
3226robk-tahoe@allmydata.com**20080219231817
3227 
3228 the mac/macfuse subdirectory needed to be added to the pythonpath in order
3229 to build a binary incorporating the mac fuse system.  this change should
3230 make those modules accessible relative to the mac/ directory which is
3231 implicitly included in the .app build process.
3232]
3233[mac build: updates to respect UPLOAD_DEST argument to make
3234robk-tahoe@allmydata.com**20080226230353
3235 
3236 the make mac-upload target now requires an UPLOAD_DEST argument to be given,
3237 which is the rsync destination (including trailing '/') to which the version
3238 stamped directory containing the .dmg should be placed.  the account the
3239 build is running as (e.g. 'buildslave') should have ssh access to the account
3240 specified in that dest. one might also consider locking the key down to the
3241 target directory by adding something like
3242 command="rsync --server -vlogDtpr . /home/amduser/public_html/dist/mac-blah/"
3243 to the corresponding authorized_key entry on the target machine.
3244 
3245]
3246[Makefile: split mac 'make .dmg' and 'upload' into separate steps
3247warner@allmydata.com**20080125222913]
3248[mac build: ahem. fix makefile probs
3249robk-tahoe@allmydata.com**20080227004822
3250 
3251 oops. I screwed up the makefile syntax further. buildslave would spend a
3252 lot of fruitless time trawling the entire drive.  this fixes that. and a
3253 stray -n.  ahem.  [looks down sheepishly]
3254]
3255[mac build: fix makefile bug
3256robk-tahoe@allmydata.com**20080227002010
3257 
3258 blah $( foo )  is more explicit than blah ` foo ` in a bash-like context
3259 unfortunately it doesn't translate very well to makefiles, for which $(
3260 means something else entirely
3261]
3262[mac build: tweaks to build fuse for 10.4 and 10.5
3263robk-tahoe@allmydata.com**20080227000844
3264 
3265 rather than trying to build a single .app with both 10.4 and 10.5 fuse
3266 libraries embedded within it, for the time being, we're just going to
3267 have independant 10.4 and 10.5 builds.
3268 
3269 this provides a 10.5 _fusemodule.so, and build changes to copy the
3270 appropriate versions of files for 10.4 or 10.5 from sub dirs of mac/
3271 into the build tree before triggering py2app
3272]
3273[fuse/runtests: added a --web-open option
3274robk-tahoe@allmydata.com**20081003172026
3275 
3276 similar to the --debug-wait option which causes the test harness to
3277 pause at various stages of the process to facilitate debugging, this
3278 option simplifies that debugging by automatically opening a web browser
3279 to the root dir of that implementation's tests when tests are commenced.
3280 
3281 in addition, if --web-open is specfied but --debug-wait is not, the
3282 harness will still pause after running tests but before tearing down
3283 the tahoe grid - this allows all tests to run to completion, but
3284 provide a debugging hook to investigate the end state of the grid's
3285 contents thereafter.
3286]
3287[fuse/tests: slew of changes to fuse 'runtests'
3288robk-tahoe@allmydata.com**20080924183601
3289 
3290 This patch makes a significant number of changes to the fuse 'runtests' script
3291 which stem from my efforts to integrate the third fuse implementation into this
3292 framework.  Perhaps not all were necessary to that end, and I beg nejucomo's
3293 forebearance if I got too carried away.
3294 
3295 - cleaned up the blank lines; imho blank lines should be empty
3296 
3297 - made the unmount command switch based on platform, since macfuse just uses
3298 'umount' not the 'fusermount' command (which doesn't exist)
3299 
3300 - made the expected working dir for runtests the contrib/fuse dir, not the
3301 top-level tahoe source tree - see also discussion of --path-to-tahoe below
3302 
3303 - significantly reworked the ImplProcManager class.  rather than subclassing
3304 for each fuse implementation to be tested, the new version is based on
3305 instantiating objects and providing relevant config info to the constructor.
3306 this was motivated by a desire to eliminate the duplication of similar but
3307 subtly different code between instances, framed by consideration of increasing
3308 the number of platforms and implementations involved. each implementation to
3309 test is thus reduced to the pertinent import and an entry in the
3310 'implementations' table defining how to handle that implementation. this also
3311 provides a way to specify which sets of tests to run for each implementation,
3312 more on that below.
3313 
3314 
3315 - significantly reworked the command line options parsing, using twisted.usage;
3316 
3317 what used to be a single optional argument is now represented by the
3318 --test-type option which allows one to choose between running unittests, the
3319 system tests, or both.
3320 
3321 the --implementations option allows for a specific (comma-separated) list of
3322 implemenations to be tested, or the default 'all'
3323 
3324 the --tests option allows for a specific (comma-separated) list of tests sets
3325 to be run, or the default 'all'.  note that only the intersection of tests
3326 requested on the command line and tests relevant to each implementation will
3327 be run. see below for more on tests sets.
3328 
3329 the --path-to-tahoe open allows for the path to the 'tahoe' executable to be
3330 specified. it defaults to '../../bin/tahoe' which is the location of the tahoe
3331 script in the source tree relative to the contrib/fuse dir by default.
3332 
3333 the --tmp-dir option controls where temporary directories (and hence
3334 mountpoints) are created during the test.  this defaults to /tmp - a change
3335 from the previous behaviour of using the system default dir for calls to
3336 tempfile.mkdtemp(), a behaviour which can be obtained by providing an empty
3337 value, e.g. "--tmp-dir="
3338 
3339 the --debug-wait flag causes the test runner to pause waiting upon user
3340 input at various stages through the testing, which facilitates debugging e.g.
3341 by allowing the user to open a browser and explore or modify the contents of
3342 the ephemeral grid after it has been instantiated but before tests are run,
3343 or make environmental adjustments before actually triggering fuse mounts etc.
3344 note that the webapi url for the first client node is printed out upon its
3345 startup to facilitate this sort of debugging also.
3346 
3347 
3348 - the default tmp dir was changed, and made configurable. previously the
3349 default behaviour of tempfile.mkdtemp() was used.  it turns out that, at least
3350 on the mac, that led to temporary directories to be created in a location
3351 which ultimately led to mountpoint paths longer than could be handled by
3352 macfuse - specifically mounted filesystems could not be unmounted and would
3353 'leak'. by changing the default location to be rooted at /tmp this leads to
3354 mountpoint paths short enough to be supported without problems.
3355 
3356 - tests are now grouped into 'sets' by method name prefix.  all the existing
3357 tests have been moved into the 'read' set, i.e. with method names starting
3358 'test_read_'. this is intended to facilitate the fact that some implementations
3359 are read-only, and some support write, so the applicability of tests will vary
3360 by implementation. the 'implementations' table, which governs the configuration
3361 of the ImplProcManager responsible for a given implementation, provides a list
3362 of 'test' (i.e test set names) which are applicable to that implementation.
3363 note no 'write' tests yet exist, this is merely laying the groundwork.
3364 
3365 - the 'expected output' of the tahoe command, which is checked for 'surprising'
3366 output by regex match, can be confused by spurious output from libraries.
3367 specfically, testing on the mac produced a warning message about zope interface
3368 resolution various multiple eggs.  the 'check_tahoe_output()' function now has
3369 a list of 'ignorable_lines' (each a regex) which will be discarded before the
3370 remainder of the output of the tahoe script is matched against expectation.
3371 
3372 - cleaned up a typo, and a few spurious imports caught by pyflakes
3373 
3374]
3375[fuse: runtests: Move exception classes to top scope.
3376nejucomo@gmail.com**20080607070600]
3377[tahoe_fuse: system test: Verify file contents can be properly read.
3378nejucomo@gmail.com**20080130091448]
3379[fuse: runtests.py: Fix bug in polling_operation error that always referred to introducer.furl.
3380nejucomo@gmail.com**20080607061719]
3381[tahoe_fuse: system test: Replace repeated attempts at webapi calls with single calls, abstract webapi calls into a single function.
3382nejucomo@gmail.com**20080130085625]
3383[tahoe_fuse: system test: webapi connection: bug fix and small log output change.
3384nejucomo@gmail.com**20080121021031]
3385[fuse: runtests: Create an interface for setup/cleanup of the two implementations...
3386nejucomo@gmail.com**20080607070825
3387 
3388 The impl_b cleanup appears incorrect.  I'm not sure what the proper behavior is.
3389 
3390]
3391[tahoe_fuse: system test: Populate a testdir with files and empty children directories, then test the fuse interface for proper listings and size metadata.
3392nejucomo@gmail.com**20080130085943]
3393[tahoe_fuse: system test: Make output checking into non-fatal warnings, and make patterns looser.
3394nejucomo@gmail.com**20080130071053]
3395[fuse: runtests.py: Fix a typo bug in fusermount output checking.
3396nejucomo@gmail.com**20080607061815]
3397[fuse: runtests: Make test numbers (and everything in general) 0-indexed for consistency.
3398nejucomo@gmail.com**20080607061915]
3399[fuse/blackmatch: 'flatten' the fuse api implementation
3400robk-tahoe@allmydata.com**20081016143547
3401 
3402 the previous revision of blackmatch used a file_class to delegate all fuse
3403 api operations on files to a specific per-file class, which is an option
3404 given by the python-fuse bindings.
3405 
3406 this is a pre-cursor to the 'split' client/server version, which uses a
3407 simple, moreover flat, rpc mechanism to broker access to methods.
3408]
3409[test_web.py: one more line of test coverage
3410warner@allmydata.com**20081029050015]
3411[uri: add abbrev_si() method, which returns the abbreviated storage index
3412warner@allmydata.com**20090131013110
3413 Ignore-this: bb3d9483570dbe0dc9ecdc1f31d8d79f
3414]
3415[web: make sure that PUT /uri?mutable=false really means immutable, fixes #675
3416warner@lothar.com**20090408021340]
3417[Tweak wording in directory page: not-read-only is "modifiable", mention creating a directory _in this directory_.
3418Kevin Reid <kpreid@mac.com>**20090526232414
3419 Ignore-this: f006ec52ba2051802e025a60bcface56
3420]
3421[directories: fix semantic conflict between my "keep track of position" optimization patch and Kevan's "cache serialized entries" optimization patch
3422zooko@zooko.com**20090710032028
3423 Ignore-this: 46f8b00fd3eca4adf89dec437e65d696
3424]
3425[directories: keep track of your position as you decode netstring after netstring from an input buffer instead of copying the trailing part
3426zooko@zooko.com**20090705025109
3427 Ignore-this: bee1ae76060fbc920bddb6e839b7dd1a
3428 This makes decoding linear in the number of netstrings instead of O(N^2).
3429]
3430[netstring: add required_trailer= argument
3431warner@allmydata.com**20080926165754]
3432[test_netstring.py: move netstring tests to a separate file
3433warner@allmydata.com**20080926165526]
3434[webapi.txt: document t=set_children, other small edits
3435Brian Warner <warner@lothar.com>**20091009200446
3436 Ignore-this: 4d7e76b04a7b8eaa0a981879f778ea5d
3437]
3438[webapi: fix t=check for DIR2-LIT (i.e. empty immutable directories)
3439Brian Warner <warner@lothar.com>**20091126232731
3440 Ignore-this: 8513c890525c69c1eca0e80d53a231f8
3441]
3442[control.py: fix speedtest: use download_best_version (not read) on mutable nodes
3443Brian Warner <warner@lothar.com>**20091207060512
3444 Ignore-this: 7125eabfe74837e05f9291dd6414f917
3445]
3446[Simplify immutable download API: use just filenode.read(consumer, offset, size)
3447Brian Warner <warner@lothar.com>**20091201225330
3448 Ignore-this: bdedfb488ac23738bf52ae6d4ab3a3fb
3449 
3450 * remove Downloader.download_to_data/download_to_filename/download_to_filehandle
3451 * remove download.Data/FileName/FileHandle targets
3452 * remove filenode.download/download_to_data/download_to_filename methods
3453 * leave Downloader.download (the whole Downloader will go away eventually)
3454 * add util.consumer.MemoryConsumer/download_to_data, for convenience
3455   (this is mostly used by unit tests, but it gets used by enough non-test
3456    code to warrant putting it in allmydata.util)
3457 * update tests
3458 * removes about 180 lines of code. Yay negative code days!
3459 
3460 Overall plan is to rewrite immutable/download.py and leave filenode.read() as
3461 the sole read-side API.
3462]
3463[SFTP/FTP: merge user/account code, merge docs
3464warner@allmydata.com**20081106012558]
3465[ftpd: make sure we're using a patched/fixed Twisted, to avoid confusion later
3466warner@allmydata.com**20081007011411]
3467[ftpd: hush pyflakes
3468warner@allmydata.com**20081007014513]
3469[ftpd: add native_client.php -based HTTP authentication scheme
3470warner@allmydata.com**20081006231511]
3471[docs/ftp.txt: correct Twisted dependency: we don't need VFS, we can use a release, as long as you apply the patch
3472warner@allmydata.com**20081104235840]
3473[ftp/sftp: move to a new frontends/ directory in preparation for factoring out password-auth component
3474warner@allmydata.com**20081105200733]
3475[ftp: change the twisted hack necessary for async-write-close, to one more agreeable to the twisted-dev folks, add a copy of the necessary patch to docs/ftp.txt
3476warner@allmydata.com**20081007010605]
3477[ftpd: remove debug messages
3478warner@allmydata.com**20081006231620]
3479[ftpd: add ftp.accounts checker, remove InMemoryPasswordChecker
3480warner@allmydata.com**20081006225124]
3481[trivial: M-x whitespace-cleanup on src/immutable/download.py
3482zooko@zooko.com**20090108164901
3483 Ignore-this: bb62daf511e41a69860be657cde8df04
3484]
3485[immutable/download.py: wrap to 80cols, no functional changes
3486Brian Warner <warner@lothar.com>**20091005192542
3487 Ignore-this: 6b05fe3dc6d78832323e708b9e6a1fe
3488]
3489[immutable: when downloading an immutable file, use primary shares if they are available
3490zooko@zooko.com**20081220131456
3491 Ignore-this: f7b8b76fd7df032673ab072384eaa989
3492 Primary shares require no erasure decoding so the more primary shares you have, the less CPU is used.
3493]
3494[immutable: handle another form of share corruption with LayoutInvalid exception instead of AssertionError
3495zooko@zooko.com**20090105234645
3496 Ignore-this: fee5f6572efca5435ef54ed32552ca9d
3497]
3498[contrib: fix fuse_impl_c to use new Python API
3499zooko@zooko.com**20100109174956
3500 Ignore-this: 51ca1ec7c2a92a0862e9b99e52542179
3501 original patch by Thomas Delaet, fixed by François, reviewed by Brian, committed by me
3502]
3503[hush pyflakes-0.4.0 warnings: remove trivial unused variables. For #900.
3504Brian Warner <warner@lothar.com>**20100114221529
3505 Ignore-this: e96106c8f1a99fbf93306fbfe9a294cf
3506]
3507[provisioning: more repair/survivability data
3508warner@lothar.com**20070907055453]
3509[test_system: assert that BASEDIR/node.url is created properly
3510warner@allmydata.com**20080107234622]
3511[mutable/servermap.py: fix needs_merge(), it was incorrectly claiming that mixed shares with distinct seqnums needed a merge, causing repair(force=False) to fail
3512warner@lothar.com**20081024040024]
3513[reliability.py: fix the numpy conversion, it was completely broken. Thanks to Terrell Russell for the help.
3514warner@lothar.com**20090219195515
3515 Ignore-this: f2b1eb65855111b338e1487feee1bbcf
3516]
3517[reliability: switch to NumPy, since Numeric is deprecated
3518warner@lothar.com**20090219074435
3519 Ignore-this: f588a68e9bcd3b0bc3653570882b6fd5
3520]
3521[storage/immutable: raise a specific error upon seeing a bad version number, instead of using assert. Also wrap to 80cols.
3522warner@lothar.com**20090309030732
3523 Ignore-this: 5331d9680ffceff029fbbbcdece7f282
3524]
3525[storage/mutable: raise a specific error upon seeing bad magic, instead of using assert
3526warner@lothar.com**20090309020201
3527 Ignore-this: 8daa77362902f5d6ef793e9602a1383b
3528]
3529[hashtree: fix O(N**2) behavior, to improve fatal alacrity problems in a 10GB file (#670). Also improve docstring.
3530warner@lothar.com**20090331202127
3531 Ignore-this: a04f72ed2b783fc880932fc5c482182b
3532]
3533[Fix broken link from Provisioning to Reliability page.
3534Kevin Reid <kpreid@mac.com>**20090501191050
3535 Ignore-this: 56dc1a5e659b70cc02dc4df7b5d518cd
3536]
3537[dirnode.set_children: take a dict, not a list
3538Brian Warner <warner@lothar.com>**20091013002440
3539 Ignore-this: 540ce72ce2727ee053afaae1ff124e21
3540]
3541[dirnode.set_uri/set_children: change signature to take writecap+readcap
3542Brian Warner <warner@lothar.com>**20091012235126
3543 Ignore-this: 5df617b2d379a51c79148a857e6026b1
3544 instead of a single cap. The webapi t=set_children call benefits too.
3545]
3546[tolerate simplejson-2.0.0 and newer, which frequently return bytestrings instead of unicode objects. Closes #523
3547warner@allmydata.com**20080930222106]
3548[check_load: add stats-gathering
3549warner@allmydata.com**20071218200737]
3550[dirnode.pack_children(): add deep_immutable= argument
3551Brian Warner <warner@lothar.com>**20091026162809
3552 Ignore-this: d5a2371e47662c4bc6eff273e8181b00
3553 
3554 This will be used by DIR2:CHK to enforce the deep-immutability requirement.
3555]
3556[repairer: add deterministic test for #819, mark as TODO
3557zooko@zooko.com**20100110013619
3558 Ignore-this: 4cb8bb30b25246de58ed2b96fa447d68
3559]
3560[test_repairer: rename Verifier test cases to be more precise and less verbose
3561Brian Warner <warner@lothar.com>**20091005201115
3562 Ignore-this: 64be7094e33338c7c2aea9387e138771
3563]
3564[Fix webapi t=mkdir with multpart/form-data, as on the Welcome page. Closes #919.
3565Brian Warner <warner@lothar.com>**20100121065052
3566 Ignore-this: 1f20ea0a0f1f6d6c1e8e14f193a92c87
3567]
3568[Fix race conditions and missing callback in allmydata.test.test_cli.Cp.test_copy_using_filecap, add utilities for one-liner reading and writing of files, and fix cases in test_cli where files were not being closed after writing.
3569david-sarah@jacaranda.org**20100206013727
3570 Ignore-this: 49da6c33190d526a4ae84c472f04d5f4
3571]
3572[fix test_cli to put the root_dir.cap in the private subdir
3573zooko@zooko.com**20080103234853]
3574[test_cli.py: use str objects instead of unicode ones
3575francois@ctrlaltdel.ch**20081114134137
3576 
3577 This will hopefully fix failing tests with LC_ALL=C
3578]
3579[docs: NEWS and relnotes-short.txt and CREDITS for v1.6.1
3580zooko@zooko.com**20100224065231
3581 Ignore-this: 41c056ae48c639e5a934d4c1983bc118
3582]
3583[docs: CREDITS: where due
3584zooko@zooko.com**20100202053831
3585 Ignore-this: 11646dd603ac715ae8277a4bb9562215
3586]
3587[docs: further CREDITS level-ups for Nils, Kevan, David-Sarah
3588zooko@zooko.com**20100126170021
3589 Ignore-this: 1e513e85cf7b7abf57f056e6d7544b38
3590]
3591[docs: more CREDITS for François, Kevan, and David-Sarah
3592zooko@zooko.com**20100126132133
3593 Ignore-this: f37d4977c13066fcac088ba98a31b02e
3594]
3595[docs: CREDITS
3596zooko@zooko.com**20090213034228
3597 Ignore-this: d6bb651d657ed8967ca1dfb23afbd00e
3598]
3599[CREDITS: format to <= 79 columns, add Marc Tooley, update Kevan Carstensen
3600zooko@zooko.com**20090720131354
3601 Ignore-this: 3b8bbf952e69eb26597c7bce15e830e0
3602]
3603[docs: CREDITS for Nathan and for Armin Rigo
3604zooko@zooko.com**20080610231424]
3605[docs: CREDITS: add David-Sarah to the CREDITS file
3606zooko@zooko.com**20100109060435
3607 Ignore-this: 896062396ad85f9d2d4806762632f25a
3608]
3609[docs: edits for docs/running.html from Sam Mason
3610zooko@zooko.com**20090809201416
3611 Ignore-this: 2207e80449943ebd4ed50cea57c43143
3612]
3613[docs: a couple of small edits to release notes (thanks Peter)
3614zooko@zooko.com**20100202054832
3615 Ignore-this: 1d0963c43ff19c92775b124c49c8a88a
3616]
3617[docs: a few edits and updates to relnotes.txt, relnotes-short.txt, and NEWS in preparation for v1.6.0
3618zooko@zooko.com**20100202043222
3619 Ignore-this: d90c644fa61d78e33cbdf0be428bb07a
3620]
3621[docs: updates to relnotes.txt, NEWS, architecture, historical_known_issues, install.html, etc.
3622zooko@zooko.com**20100201181809
3623 Ignore-this: f4fc924652af746862c8ee4d9ba97bf6
3624]
3625[architecture.txt: explain the introducer SPOF and why it really isn't that bad. Closes #323.
3626warner@allmydata.com**20080530015111]
3627[docs: mention issues using flogtool on Windows
3628zooko@zooko.com**20090204033410
3629 Ignore-this: 6122bcb82eea32d2a936a59d77233743
3630]
3631[docs: some small edits to install.html
3632zooko@zooko.com**20090413160414
3633 Ignore-this: 1e7142ea444fef61c684c089407d675
3634]
3635[setup: simplify install.html a tad
3636zooko@zooko.com**20090119210447
3637 Ignore-this: 529b2f225b3d98ed3bc99a4962e781ee
3638]
3639[setup: use setup.cfg aliases to map "setup.py test" to "setup.py trial" and "setup.py build" to "setup.py darcsver --count-all-patches build_tahoe"
3640zooko@zooko.com**20090120183723
3641 Ignore-this: f390676787f4d521c17fbe96fb2cd2a6
3642 Thanks to dpeterson for the suggestion.
3643]
3644[setup: attempt to remove the custom setuptools-ish logic in setup.py -- the result works on my Windows box but doesn't yield a working ./bin/tahoe on Windows, and hasn't been tested yet on other platforms
3645zooko@zooko.com**20081205233054
3646 Ignore-this: 843e7514870d7a4e708646acaa7c9699
3647]
3648[setup: require setuptools >= v0.6c8
3649zooko@zooko.com**20080326191302]
3650[setup: fix the md5sum of the bundled setuptools egg
3651zooko@zooko.com**20080206183529]
3652[setup: use a customized version of ez_setup.py which bootstraps from Python-version-agnostic setuptools bootstrap eggs
3653zooko@zooko.com**20080122170056]
3654[setup: add a setuptools bootstrap egg that works on all versions of Python
3655zooko@zooko.com**20080122170012
3656 For versions of Python >= 2.3.
3657]
3658[setup: bundle setuptools-0.6c8, we need a bugfix in it
3659zooko@zooko.com**20080326191234]
3660[setup: fix site-dirs to find system installed twisted on mac.
3661robk-tahoe@allmydata.com**20080924174255
3662 
3663 zooko helped me unravel a build weirdness today.  somehow the system installed
3664 twisted (/System/Library) was pulling in parts of the other twisted (/Library)
3665 which had been installed by easy_install, and exploding.
3666 
3667 getting rid of the latter helped, but it took this change to get the tahoe
3668 build to stop trying to rebuild twisted and instead use the one that was
3669 already installed. c.f. tkt #229
3670]
3671[setup: turn off --multi-version until I can figure out why it breaks test_runner
3672zooko@zooko.com**20081121043645
3673 Ignore-this: 36bf5db4122e6bc4e12588d9717a1e32
3674]
3675[setup: use "setup.py develop --multi-version" so that if there is a too-old version of a dependency installed this doesn't prevent Tahoe's "develop" and run-in-place from working
3676zooko@zooko.com**20081120201545
3677 Ignore-this: 898f21fc1b16ae39c292fdd1ef42c446
3678]
3679[setup.py,Makefile: move the 'chmod +x bin/tahoe' into setup.py
3680warner@lothar.com**20080917230756]
3681[Makefile: touch .built on every build, so other targets can depend upon .built and avoid redundant rebuilds
3682warner@lothar.com**20080130073257]
3683[setup: remove custom Trial class inside our setup.py and use the setuptools_trial plugin
3684zooko@zooko.com**20081205232207
3685 Ignore-this: e0f68169e8ac1b5a54b796e8905c7b80
3686]
3687[setup: integrate the bundled setuptools_trial plugin with Chris Galvan's patch to use that plugin
3688zooko@zooko.com**20081201174804
3689 Ignore-this: 5d03e936cf45f67a39f993704024788c
3690]
3691[setup: bundle setuptools_trial in misc/dependencies/
3692zooko@zooko.com**20081201174438
3693 Ignore-this: f13a4a1af648f9ab9b3b3438cf94053f
3694]
3695[use_setuptools_trial.patch
3696cgalvan@mail.utexas.edu**20081121205759]
3697[setup.py trial: improve --verbose suggestion a bit
3698warner@lothar.com**20080919193922]
3699[setup: pretend the tahoe requires twisted to set up, so that twisted will be there for nevow
3700zooko@zooko.com**20081025135042
3701 Ignore-this: 4e6c7e580f7e30df571e2e63be663734
3702]
3703[docs: remove extra <h1> from install.html (thanks, David-Sarah Hopwood)
3704zooko@zooko.com**20090726142436
3705 Ignore-this: a6fcab5e6524505b5b8514f62d9a97f3
3706]
3707[docs: update install.html to point to 1.5.0 and edit the instructions (broadening the recommendation on Python versions to bless >= v2.4.2 <= v2.6.x)
3708zooko@zooko.com**20090802030523
3709 Ignore-this: 6aabf53148df1bc7a5dd25b1d290829a
3710]
3711[docs: mention pywin32 earlier
3712zooko@zooko.com**20090726133452
3713 Ignore-this: 67e0d5b32af136113ec5b4e6c6d6c37
3714]
3715[docs: remove warning about inability to build modules on py2.6 on Windows with mingw, differentiate between clients and servers, reflow to a consistent column width (79), add hint about firewall/NAT docs.
3716zooko@zooko.com**20090621175005
3717 Ignore-this: 85e7c1ccb258317ca4dd37917afb48f5
3718]
3719[docs: edit running.html
3720zooko@zooko.com**20080215170219]
3721[docs: shorter running.html
3722zooko@zooko.com**20080506222904]
3723[docs: edits to [source:docs/install.html] and [source:docs/running.html]
3724zooko@zooko.com**20080611022200]
3725[docs: mention configuration, suggested by ben hyde's question about storage servers
3726zooko@zooko.com**20080506203935]
3727[docs: explain better how to invoke the tahoe executable when creating and starting nodes
3728zooko@zooko.com**20080611021923]
3729[docs: lowercase "introducer"
3730zooko@zooko.com**20080611022314
3731 He's not that important.
3732]
3733[setup: edit install.html to warn Windows users away from Python v2.6
3734zooko@zooko.com**20090611225506
3735 Ignore-this: 89ad63eab49ede883ef92f2de5b5fc54
3736]
3737[docs: edit install.html regarding versions of Python
3738zooko@zooko.com**20090413160612
3739 Ignore-this: 1de165ad7645be32ef671ece3fcae9ea
3740]
3741[docs: setup: Norm Hardy suggested that it would be easier if users realized that they already had Python (especially true for Mac users)
3742zooko@zooko.com**20090325035459
3743 Ignore-this: e1bb76a1be4d6d541090d8d9e7e73db9
3744]
3745[docs: suggest Python 2.5 -- Python 2.6 is not as well tested yet
3746zooko@zooko.com**20090210054421
3747 Ignore-this: 3ef6988c693330d4937b4d8e1a996c39
3748]
3749[doc: specify Python >= 2.4.2
3750zooko@zooko.com**20090204213840
3751 Ignore-this: 108c60b69fdb1d0fcb95810703ce415a
3752]
3753[docs: update install.html to recommend Python v2 instead of Python v2.5.2
3754zooko@zooko.com**20090103183100
3755 Ignore-this: 5dbea379c59e0d9be817cdd9c8393d65
3756]
3757[docs: install.html: instruct Debian users to use this document and not to go find the DownloadDebianPackages page, ignore the warning at the top of it, and try it
3758zooko@zooko.com**20090804123840
3759 Ignore-this: 49da654f19d377ffc5a1eff0c820e026
3760 http://allmydata.org/pipermail/tahoe-dev/2009-August/002507.html
3761]
3762[docs: add note about pywin32 to install.html
3763zooko@zooko.com**20090413185210
3764 Ignore-this: d386abfccfdc1015b8f1216d95b4792f
3765]
3766[docs: fix helper.txt to describe new config style
3767zooko@zooko.com**20091224223522
3768 Ignore-this: 102e7692dc414a4b466307f7d78601fe
3769]
3770[NEWS: improve "tahoe backup" notes, mention first-backup-after-upgrade duration
3771Brian Warner <warner@lothar.com>**20100111190132
3772 Ignore-this: 10347c590b3375964579ba6c2b0edb4f
3773 
3774 Thanks to Francois Deppierraz for the suggestion.
3775]
3776[NEWS: update with all recent user-visible changes
3777Brian Warner <warner@lothar.com>**20100127222209
3778 Ignore-this: 277d24568018bf4f3fb7736fda64eceb
3779]
3780[NEWS: update with all user-visible changes since the last release
3781Brian Warner <warner@lothar.com>**20091127224217
3782 Ignore-this: 741da6cd928e939fb6d21a61ea3daf0b
3783]
3784[docs: add a couple of details to NEWS, change date and a bit of formatting, name of 'Tahoe-LAFS' project
3785zooko@zooko.com**20090802022601
3786 Ignore-this: 9c35cdaaec10613570225b19c902b0ef
3787]
3788[NEWS: more minor edits
3789Brian Warner <warner@lothar.com>**20090722024522
3790 Ignore-this: e2c199cfdbaa32a125819f14df971d45
3791]
3792[docs: update relnotes.txt for Tahoe-LAFS v1.6
3793zooko@zooko.com**20100128171257
3794 Ignore-this: 920df92152aead69ef861b9b2e8ff218
3795]
3796[Miscellaneous documentation, test, and code formatting tweaks.
3797david-sarah@jacaranda.org**20100127070309
3798 Ignore-this: 84ca7e4bb7c64221ae2c61144ef5edef
3799]
3800[fuse/impl_c: reworking of mac/tahoefuse, command line options, test integration
3801robk-tahoe@allmydata.com**20080925001535
3802 
3803 a handful of changes to the tahoefuse implementation used by the mac build, to
3804 make command line option parsing more flexible and robust, and moreover to
3805 facilitate integration of this implementation with the 'runtests' test harness
3806 used to test the other two implementations.
3807 
3808 this patch includes;
3809 - improvements to command line option parsing [ see below ]
3810 - support for 'aliases' akin to other tahoe tools
3811 - tweaks to support linux (ubuntu hardy)
3812 
3813 the linux support tweaks are, or at least seem to be, a result of the fact that
3814 hardy ships with fuse 0.2pre3, as opposed to the fuse0.2 that macfuse is based
3815 upon.  at least the versions I was working with have discrepencies in their
3816 interfaces, but on reflection this is probably a 'python-fuse' version issue
3817 rather than fuse per se.  At any rate, the fixes to handling the Stat objects
3818 should be safe against either version, it's just that the bindings on hardy
3819 lacked code that was in the 'fuse' python module on the mac...
3820 
3821 command line options:
3822 
3823 the need for more flexible invocation in support of the runtests harness led
3824 me to rework the argument parsing from some simple positional hacks with a
3825 pass-through of the remainder to the fuse binding's 'fuse_main' to a system
3826 using twisted.usage to parse arguments, and having just one option '-o' being
3827 explicitly a pass-through for -o options to fuse_main. the options are now:
3828 
3829 --node-directory NODEDIR : this is used to look up the node-url to connect
3830 to if that's not specified concretely on the command line, and also used to
3831 determine the location of the cache directory used by the implementation,
3832 specifically '_cache' within the nodedir.  default value: ~/.tahoe
3833 
3834 --node-url NODEURL : specify a node-url taking precendence over that found
3835 in the node.url file within the nodedir
3836 
3837 --alias ALIAS : specifies the named alias should be mounted. a lookup is
3838 performed in the alias table within 'nodedir' to find the root dir cap
3839 the named alias must exist in the alias table of the specified nodedir
3840 
3841 --root-uri ROOTURI : specifies that the given directory uri should be mounted
3842 
3843 at least one of --alias and --root-uri must be given (which directory to mount
3844 must be specified somehow)  if both are given --alias takes precedence.
3845 
3846 --cache-timeout TIMEOUTSECS : specifies the number of seconds that cached
3847 directory data should be considered valid for.  this tahoefuse implementation
3848 implements directory caching for a limited time; largely because the mac (i.e.
3849 the Finder in particular) tends to make a large number of requests in quick
3850 successsion when browsing the filesystem.  on the flip side, the 'runtests'
3851 unit tests fail in the face of such caching because the changes made to the
3852 underlying tahoe directories are not reflected in the fuse presentation.  by
3853 specifying a cache-timeout of 0 seconds, runtests can force the fuse layer
3854 into refetching directory data upon each request.
3855 
3856 any number of -oname=value options may be specified on the command line,
3857 and they will all be passed into the underlying fuse_main call.
3858 
3859 a single non-optional argument, the mountpoint, must also be given.
3860 
3861 
3862 
3863]
3864[macfuse: slew of updates
3865robk-tahoe@allmydata.com**20080301021241
3866 
3867 various updates to improve the functionality of the mac fuse plugin
3868 
3869 
3870 1. caching
3871 
3872 previously, the experimental tahoefuse plugin pre-loaded the whole
3873 structure of the specified mount into memory at launch time. changes
3874 which were made through that fuse plugin would be remembered, but any
3875 changes made through other tahoe clients would not be reflected.
3876 
3877 now directory contents are only loaded when needed, and the data is
3878 cached for a limited time.  any use of Directory objects should first
3879 call maybe_refresh() which will check the time since the cache was last
3880 loaded, and if the data is older than some validity period (currently
3881 26s) then the directory's contents will be refetched and reloaded.
3882 this replaces the 'load_dir()' method of TFS
3883 
3884 whenever a local change is made to a Directory object, or when the
3885 aforementioned cache reloading notices a change in directory data, the
3886 mtime of the directory is automatically updated.
3887 
3888 
3889 2. stat / metadata
3890 
3891 the retrieval of 'stat' information for getattr(), and the way that
3892 metadata is handled, has been refactored to better reflect the fact that
3893 metadata in tahoe is only represented by 'edges' (i.e entries in
3894 directories) not on 'nodes' (files or directories themselves) hence a
3895 stat lookup should be a query to the parent directory (specifically the
3896 parent specified by the path being queried in the case that a node has
3897 multiple parents) for details known by that directory for the given
3898 child, rather than a query to the child itself.
3899 
3900 the TStat utility class for returning stat information to the python-
3901 fuse layer has been extended to accept a 'metadata' argument in its
3902 constructor.  any fields found in the metadata dict which match the
3903 names of the stat attributes are loaded into the TStat object.  the
3904 'ctime' and 'mtime' attributes are translated to st_ctime and st_mtime
3905 to mesh with the existing timestamp handling code. any fields specified
3906 by kwargs to the constructor override things that might be loaded from
3907 the metadata dict.
3908 
3909 Directory objects now track their children as a dict mapping name to
3910 (child_obj, metadata) tuples. This is because the metadata in tahoe
3911 will be stored exclusively on the edges of the graph. each Directory
3912 maintains its own mtime however, and get_stat() calls will report the
3913 mtime of a directory based on the last modification of the Directory
3914 object, not based on any mtime records from the parent directory's
3915 metadata for that child.  This addresses the fact that since directories
3916 may be shared, a given parent may or may not reflect the latest changes,
3917 however one of the Finder's behaviours is to examine the stat of a
3918 directory, and not to bother doing a readdir() if the stat is unchanged.
3919 i.e. unless directories report their changes in their stat info, the
3920 Finder will not show changes within that directory.
3921 
3922 
3923 3. refactoring
3924 
3925 reporting of many error codes has been refactored to raise IOError
3926 subclasses with the appropriate errno.  this exploits python-fuse's
3927 built-in mechanism for catching IOError and reporting the errno
3928 embedded within it automatically, while simplifying the code within
3929 the plugin.
3930 
3931 the add_child() method on TFS was removed in favour of simply having an
3932 add_child() method on Directory objects. this provides a more OO
3933 approach in that Directory is responsible for maintaining its own in
3934 memory state and also writing changes back to the node.  similarly for
3935 remove_child()
3936 
3937 these changes, along with the new tfs.compose_url() method,
3938 significantly simplify and improve readability of mkdir, rename methods
3939 along with the newer link and unlink.  these also get improved error
3940 reporting.
3941 
3942 various operations (chmod, chown, truncate, utime) are now ignored.
3943 previously they would report an unsupported operation (EOPNOTSUPP)
3944 but now are simply logged and ignored.  this surpresses errors caused
3945 by some client programs which try to use these operations, but at the
3946 moment those operations are meaningless to the tahoe filesystem anyway.
3947 
3948 
3949 4. link / unlink / rmdir
3950 
3951 link, symlink calls are now supported, though with semantics differing
3952 from posix, both equivalent.  unlink, rmdir calls are now supported,
3953 also equivalent.
3954 
3955 link or symlink calls duplicate the uri of the named source and adds it
3956 as a child of another directory according to the destination path.  for
3957 directories, this creates a 'hard' link, i.e. the same directory will
3958 appear in multiple locations within the filesystem, and changes in
3959 any place will be reflected everywhere.  for files, by contrast, since
3960 the uri being duplicated is an immutable CHK uri, link/symlink for files
3961 is equivalent to a copy - though significantly cheaper. (a file copy
3962 with the fuse plugin is likely to cause a new file to be written and
3963 uploaded, the link command simply adds an entry referring to an
3964 existing uri)
3965 
3966 in testing, the 'ln' command is unable to make hard links (i.e. call
3967 link()) for directories, though symlink ('ln -s') is supported.
3968 either forms works equivalently for files.
3969 
3970 unlink and rmdir both remove the specified entry from its parent
3971 directory.
3972 
3973 
3974 5. logging
3975 
3976 the 'tfuse.log' file now only reports launches of the fuse plugin. once
3977 the plugin has parsed the options, it reopens the log file with the
3978 name of the mount, e.g. tfuse.root_dir.log, so that multiple instances
3979 running concurrently will not interfere with each others' logging.
3980 
3981 
3982 6. bug fixes
3983 
3984 the tmp_file in the cache dir backing files opened for write was
3985 intermittently failing to open the file.  added O_CREAT to the os.open
3986 call so that files will be created if missing, not throw errors.
3987 
3988 a failure to correctly parse arguments if no mount (dir_cap) name was
3989 given but also no fuse options were given has been fixed. now the
3990 command 'tahoe fuse mountpoint' will correctly default to root_dir
3991 also when running from source, arguments to tahoefuse were not handled
3992 to correctly match the 'tahoe fuse ...' behaviour.
3993 
3994]
3995[macfuse: rework fuse initialisation, integrate with 'tahoe'
3996robk-tahoe@allmydata.com**20080219231608
3997 
3998 this provides a variety of changes to the macfuse 'tahoefuse' implementation.
3999 most notably it extends the 'tahoe' command available through the mac build
4000 to provide a 'fuse' subcommand, which invokes tahoefuse.  this addresses
4001 various aspects of main(argv) handling, sys.argv manipulation to provide an
4002 appropriate command line syntax that meshes with the fuse library's built-
4003 in command line parsing.
4004 
4005 this provides a "tahoe fuse [dir_cap_name] [fuse_options] mountpoint"
4006 command, where dir_cap_name is an optional name of a .cap file to be found
4007 in ~/.tahoe/private defaulting to the standard root_dir.cap. fuse_options
4008 if given are passed into the fuse system as its normal command line options
4009 and the mountpoint is checked for existence before launching fuse.
4010 
4011 the tahoe 'fuse' command is provided as an additional_command to the tahoe
4012 runner in the case that it's launched from the mac .app binary.
4013 
4014 this also includes a tweak to the TFS class which incorporates the ctime
4015 and mtime of files into the tahoe fs model, if available.
4016]
4017[uri: generalize regexp that recognizes tahoe URLs to work for any host and port
4018zooko@zooko.com**20081216234930
4019 Ignore-this: 4a7716b8034c8e5ed9698a99f1ec5cb4
4020]
4021[Touch up #705 changes:
4022Brian Warner <warner@lothar.com>**20090720153803
4023 Ignore-this: 583517a3d80c2c1c6a397b6934b78b73
4024 
4025  webapi.txt: clarify replace=only-files argument, mention replace= on POST t=uri
4026  test_cli.py: insert whitespace between logical operations
4027  web.common.parse_replace_arg: make it case-insensitive, to match the docs
4028]
4029[Update webapi docs to reference new PUT behavior.
4030kevan@isnotajoke.com**20090720034447
4031 Ignore-this: 981c43767ee4d7d3e7711dfbea89b590
4032]
4033[Add a function to parse arguments for the replace parameter
4034kevan@isnotajoke.com**20090720034723
4035 Ignore-this: f27aae3befa76b7bec1b697b5588332
4036]
4037[docs: relnotes.txt: reflow to 63 chars wide because google groups and some web forms seem to wrap to that
4038zooko@zooko.com**20090802135016
4039 Ignore-this: 53b1493a0491bc30fb2935fad283caeb
4040]
4041[docs: relnotes.txt: fix edits noticed by Amber
4042zooko@zooko.com**20090802031003
4043 Ignore-this: 5ea62f161924d2ce8477b59c50d9ecc0
4044]
4045[docs: update relnotes.txt, relnotes-short.txt, and others documentation bits for v1.5.0 release!
4046zooko@zooko.com**20090802025710
4047 Ignore-this: cd95f569a2c0b4fada453e409f101679
4048]
4049[amdlib.util: merge in changes to humanreadable.py that were made in pyutil
4050"Zooko O'Whielacronx <zooko@zooko.com>"**20070525224957]
4051[trivial: source code metadata
4052zooko@zooko.com**20090403233315
4053 Ignore-this: 23858d0320b9b7ba0e6d2fe4adeccea8
4054]
4055[clean up debian packaging: we have control files for etch/lenny/sid, and
4056"Brian Warner <warner@lothar.com>"**20090703072804
4057 everything else uses one of those. Add dependency on python-pysqlite2 for
4058 platforms that use py2.4 by default. Update foolscap dependency to 0.4.1.
4059]
4060[debian/changelog: remove all versions but 0.0.1, so debchange can always override it. The 'deb-X' Makefile targets should not be used; run 'make deb-X-head' instead
4061warner@allmydata.com**20080715222341]
4062[debian: oops, set debian/changelog version to 0.6.0-1+, to be less than everything the buildbot is creating
4063warner@allmydata.com**20070927011513]
4064[debian: put a version string of '0.6.0+' in the debian changelog
4065warner@allmydata.com**20070927005842]
4066[debian/control: update dependencies to match _auto_deps: foolscap-0.3.0, pycryptopp-0.5
4067warner@lothar.com**20080806013222]
4068[debian: add python-setuptools to the debian install-time dependencies. Should close #382.
4069warner@allmydata.com**20080424230104]
4070[debian: include misc/cpu-watcher.tac in the debian package
4071warner@allmydata.com**20080827223026]
4072[misc/spacetime: add munin plugins, add everything to .deb
4073warner@lothar.com**20080807060003]
4074[debian/rules: put munin plugins in /usr/share/PACKAGENAME/munin/, make them +x, remove packagename from rules to make branches easier to manage
4075warner@allmydata.com**20080716014741]
4076[debian: use our own /usr/bin/tahoe, remove runtime dependency on setuptools (since it required egg-aware versions of all dependencies too)
4077warner@allmydata.com**20080410232959]
4078[debian: use setuptools-generated support/bin/tahoe instead of bin/tahoe, to match Zooko's change that makes our in-tree bin/tahoe spawn support/bin/tahoe
4079warner@allmydata.com**20080410213627]
4080[debian: we now require setuptools at build time, and that or pkg_resources at runtime
4081warner@allmydata.com**20080410224356]
4082[oops, change debian dependency on zfec to 1.1, not 1.1.0
4083warner@allmydata.com**20080410004552]
4084[make debian dependencies match _auto_deps.py ones, for foolscap and zfec
4085warner@allmydata.com**20080409172301]
4086[debian/sid: add more docs to package, including munin plugins
4087warner@lothar.com**20080714195534]
4088[copy debian/sid changes to debian/feisty
4089warner@lothar.com**20080714195638]
4090[disk-watcher: first draft of a daemon to use the HTTP stats interface and its new storage_server.disk_avail feature, to track changes in disk space over time
4091warner@lothar.com**20080807042222]
4092[setup: update the debian/copyright text to reflect the current licences
4093zooko@zooko.com**20090311152952
4094 Ignore-this: 806a95b1b79d6bb20507db5c7201af45
4095]
4096[setup: specify in the debian/control files that tahoe is compatible with Python 2.6
4097zooko@zooko.com**20090311225902
4098 Ignore-this: d0793013e4c868d92793d932ef92a62d
4099]
4100[sid/control: set python versions to 2.4,2.5 , to match feisty/control, since sid has had 2.5 available forever now
4101warner@allmydata.com**20080716014238]
4102[Makefile: add jaunty support, rearrange debian sections in order of release
4103warner@lothar.com**20090618050502]
4104[makefile: fix deb-edgy-head and deb-etch-head targets
4105warner@allmydata.com**20070711202623]
4106[setup: create a "make deb-lenny-head" target
4107zooko@zooko.com**20090306191057
4108 Ignore-this: 4b2ff187a3d08dcfe9318980ca92f097
4109 I made this patch by copying [20090305220021-92b7f-89d987c7d05306b5cb03a64f2956a652c10a7296] and changing the name from "intrepid" to "lenny".  I haven't tested it.
4110]
4111[docs: edit about.html, add P.S. about expansion of LAFS, add Andrew Orlowski to media list
4112zooko@zooko.com**20090722022430
4113 Ignore-this: 6717610239104d273a417769c8cf66a5
4114]
4115[docs: how_to_make_a_tahoe_release.txt: a couple of small edits
4116zooko@zooko.com**20090507214932
4117 Ignore-this: ae92aa835ad369f4b9e6e49d681957a3
4118]
4119[docs: modify how-to-relase notes a tiny bit
4120warner@lothar.com**20090407021135]
4121[docs: add "darcs pull" to how_to_make_a_tahoe_release.txt, and renumber
4122zooko@zooko.com**20090414024342
4123 Ignore-this: d54d33e5f7e170eea12b6d6a16d0fc87
4124]
4125[doc: update how_to_make_a_tahoe_release.txt
4126zooko@zooko.com**20090222175739
4127 Ignore-this: 6a2e1592741b362bc170167a9cadc0b
4128]
4129[docs: add a note about the process of making a new Tahoe release
4130zooko@zooko.com**20080917170839]
4131[docs: add some notes about things to do for a Tahoe release on pypi, freshmeat, and launchpad
4132zooko@zooko.com**20081001210703]
4133[docs: update NEWS, about.html, relnotes-short.txt, and known_issues.txt in preparation for v1.5.0
4134zooko@zooko.com**20090721234311
4135 Ignore-this: bc81915d7d4f48c231fa86f0b8308d83
4136 Especially note that strong claims of specialness that I've added, e.g. in about.html .
4137]
4138[docs: known_issues.txt: my version of #615, remove "issue numbers", edits, move tahoe-1.1.0 issues to historical
4139zooko@zooko.com**20090213041621
4140 Ignore-this: 58dee952a3139791ba0fe03f03fcf8bb
4141]
4142[known_issues.txt: edits suggested by Brian
4143zooko@zooko.com**20080721174406]
4144[docs: editing changes and updated news in known_issues.txt
4145zooko@zooko.com**20081230070116
4146 Ignore-this: e5dddc4446e3335a6c4eee7472e0670e
4147]
4148[docs: known_issues.txt: edit to emphasize that other sorts of local-filesystem-unwritability will lead to the same problems
4149zooko@zooko.com**20080611193857]
4150[docs: split historical/historical_known_issues.txt out of known_issues.txt
4151zooko@zooko.com**20081230065226
4152 Ignore-this: 9b6d0d679294110deeb0ea18b4ad7ac8
4153 All issues which are relevant to users of v1.1, v1.2, or v1.3 go in known_issues.txt.  All issues which are relevant to users of v1.0 go in historical/historical_known_issues.txt.
4154]
4155[move historical docs from wiki pages into the source tree, clearly marked as historical
4156warner@allmydata.com**20080603013832]
4157[docs: known_issues.txt: change the release data of Tahoe v1.1.0 to 2008-06-11 from 2008-06-10
4158zooko@zooko.com**20080611194033]
4159[docs/known_issues: mention #615 javascript-vs-frames, for zooko to improve/rewrite
4160warner@allmydata.com**20090211201453
4161 Ignore-this: b4805670c3700d90db39fb008b0f2c92
4162]
4163[known_issues.txt: fix up the argv leakage issue -- it applies to Tahoe 1.2.0.  Other editing corrections.
4164zooko@zooko.com**20080722010249]
4165[known_issues.txt: command-line arguments are leaked to other processes
4166zooko@zooko.com**20080722004334]
4167[known_issues.txt: add issue #491 and renumber issues
4168zooko@zooko.com**20080721172101]
4169[docs: known_issues.txt: add the issue of files > 12 GiB being silently corrupted
4170zooko@zooko.com**20080611195159]
4171[docs: known_issues.txt: add the security issue concerning leakage of file cap by active content or referrer-bearing hyperlinks embedded in the file
4172zooko@zooko.com**20080611193937]
4173[docs: reformat for 70 columns plus a few small edits
4174zooko@zooko.com**20080610233725]
4175[docs: explain exactly what false alarms are caused in the unit tests by Twisted v8 and pyOpenSSL v0.7
4176zooko@zooko.com**20080610233126]
4177[docs: [source:docs/known_issues.txt]
4178zooko@zooko.com**20080610232425]
4179[docs: relnotes-short.txt
4180zooko@zooko.com**20090215163510
4181 Ignore-this: 683649bb13499bbe0e5cea2e1716ff59
4182 linkedin.com imposed a strict limit on the number of characters I could post.  This forced me to prune and prune and edit and edit until relnotes.txt was a quarter of its former size.  Here's the short version.
4183]
4184[docs: small edit to about.html
4185zooko@zooko.com**20090528233422
4186 Ignore-this: 1cfbb1f8426ed6d63b2d3952e4464ddc
4187]
4188[docs: add links to Tahoe-LAFS for Paranoids and Tahoe-LAFS for Corporates in about.html
4189zooko@zooko.com**20090528232717
4190 Ignore-this: 7b70baa700d6b6f6e9ceec4132efe5
4191]
4192[docs: edit about.html and include network-and-reliance-topology.png (loaded from http://allmydata.org )
4193zooko@zooko.com**20090527150916
4194 Ignore-this: 44adc61cde8ced8be2f0a7dfc7d95dad
4195]
4196[docs: small edit to about.html
4197zooko@zooko.com**20090210170219
4198 Ignore-this: fa79838f4cdac17c09b6c3332e8a68b5
4199]
4200[setup: tidy up formatting and comments in _auto_deps.py
4201zooko@zooko.com**20090727193008
4202 Ignore-this: 99fcb61a27caae0e63ae8ce8d7505c05
4203]
4204[setup: increase requirement on pycryptopp to >= 0.5.15
4205zooko@zooko.com**20090706140815
4206 Ignore-this: f3839c7c1f9ebff1fcf2eea47ed3c48b
4207]
4208[setup: require pycryptopp>=0.5.14 if on Windows and with Python>=2.6
4209zooko@zooko.com**20090630184807
4210 Ignore-this: f7e9beeb5d5613a7c0ffed14d1dda3c6
4211]
4212[setup: require pycryptopp >= v0.5
4213zooko@zooko.com**20080506181747]
4214[setup: loosen our requirement on pycryptopp from >= 0.2.9 to >= 0.2.8
4215zooko@zooko.com**20080123170035
4216 Again, tahoecs2 has pycryptopp v0.2.8, and reviewing the pycryptopp change history shows that there were no important bugfixes added since 0.2.8.
4217]
4218[setup: require pysqlite >= v2.0.5. if we are running on Python < 2.5
4219zooko@zooko.com**20090604154548
4220 Ignore-this: cf04f46079821df209d01dad2e24b40b
4221]
4222[setup: remove attempt to automatically satisfy dependency on pywin32
4223zooko@zooko.com**20090213234939
4224 Ignore-this: ac02d54a956f7cc58bd3c0802764005f
4225]
4226["tahoe webopen": add --info flag, to get ?t=info
4227Brian Warner <warner@lothar.com>**20100424233003
4228 Ignore-this: 126b0bb6db340fabacb623d295eb45fa
4229 
4230 Also fix some trailing whitespace.
4231]
4232[change docs and --help to use "grid" instead of "virtual drive": closes #892.
4233Brian Warner <warner@lothar.com>**20100114201119
4234 Ignore-this: a20d4a4dcc4de4e3b404ff72d40fc29b
4235 
4236 Thanks to David-Sarah Hopwood for the patch.
4237]
4238[cli.py: fix typo in synopsis
4239warner@allmydata.com**20070817004724]
4240[add a simple load-generating tool to do random reads and writes
4241warner@allmydata.com**20071218030607]
4242[architecture.txt: make it clear that accounting/leases are not yet implemented
4243warner@allmydata.com**20080310192519]
4244[test_client.py: improve test coverage a bit
4245warner@allmydata.com**20081029044335]
4246[CLI: fix examples in tahoe put --help
4247warner@allmydata.com**20090127213909
4248 Ignore-this: 1fe319f70c3791482bb381c06d4a066b
4249]
4250[test_cli: add test coverage for help strings
4251warner@lothar.com**20090216210833
4252 Ignore-this: d2020849107f687448e159a19d0e5dab
4253]
4254[Add missing synopsis and descriptions for alias commands.
4255Alberto Berti <alberto@metapensiero.it>**20090221003106
4256 Ignore-this: 8aedd03d36d92d912102c7f29e4ca697
4257]
4258[Removed '.hgrags' from vcs excludes
4259Alberto Berti <alberto@metapensiero.it>**20090222223946
4260 Ignore-this: 3e94c22fc9d85f380ee11fb8bdb4d1e9
4261]
4262[tahoe cp -r: add --caps-only flag, to write filecaps into local files instead of actual file contents. Used only for debugging and as a quick tree-comparison tool.
4263warner@lothar.com**20090315231958
4264 Ignore-this: 8ecdf2b08601ae9e9fec5885bf640262
4265]
4266[test_system: even more 'cp -r' coverage
4267warner@allmydata.com**20080522014049]
4268[test_system.py: improve 'cp -r' coverage: exercise copy from tahoe to local disk
4269warner@allmydata.com**20080522013625]
4270[backup: remove the --no-backupdb command, the handling of "can't import sqlite", and the related tests, and change an error message to more correctly indicate failure to load the database from disk rather than failure to import sqlite module
4271zooko@zooko.com**20090604173131
4272 Ignore-this: 8200a9fdfc49243c280ecd1d0c44fa19
4273 Fixes #728.
4274]
4275[backupdb: cosmetic: capitalize the no-pysqlite instructions properly. Thanks to Terrell Russell for the catch.
4276warner@allmydata.com**20090211212830
4277 Ignore-this: a17b34a12bbe96ad5b531ef5d293471e
4278]
4279[cli: add some --help text to 'tahoe cp'
4280warner@lothar.com**20090625235751]
4281[cli: webopen: when called with no arguments, open the Welcome page
4282Brian Warner <warner@lothar.com>**20090701200548
4283 Ignore-this: ae7d6cb42165d0c751926065378343dd
4284]
4285[Update tahoe mv help text.
4286kevan@isnotajoke.com**20090720034503
4287 Ignore-this: 9124164acf459a4aa030c25e286bcb19
4288]
4289[docs: reflow architecture.txt to 78-char lines
4290zooko@zooko.com**20091208232943
4291 Ignore-this: 88f55166415f15192e39407815141f77
4292]
4293[docs: warn that the "garbage-collection and accounting" section of architecture.txt is out of date, and clarify that "deleted" therein means ciphertext getting garbage-collected
4294zooko@zooko.com**20080822154605]
4295[docs: update architecture.txt 's section on the vdrive a.k.a. filesystem layer
4296zooko@zooko.com**20081006210500
4297 Remove some obsolete parts (correct at the time, now incorrect), change terminology to reflect my preference: s/vdrive/filesystem/ and s/dirnode/directory/, and make a few other small changes.
4298]
4299[docs: a couple of minor edits to NEWS and docs/architecture.txt
4300zooko@zooko.com**20090721014112
4301 Ignore-this: f82d77a46e442d38d5a17609f4b3dfa5
4302]
4303[more minor architecture.txt changes
4304warner@allmydata.com**20080214022043]
4305[update NEWS to cover all recent changes, sort by end-user importance
4306Brian Warner <warner@lothar.com>**20090703014303
4307 Ignore-this: 6ddac78075d7547a19712d505818949c
4308]
4309[edit NEWS
4310Brian Warner <warner@lothar.com>**20090630174115
4311 Ignore-this: c4461a2304fcd45bee95e11418693a18
4312]
4313[docs: start updating the NEWS and relnotes.txt files, add Kevan to CREDITS
4314zooko@zooko.com**20090621055114
4315 Ignore-this: 35e05a5739549ffa693d55df51ffcfd
4316]
4317[setup: enable build of .debs for Ubuntu Intrepid, thanks to DarKNesS_WolF
4318zooko@zooko.com**20090305220021
4319 Ignore-this: 88dbb3f72c2446b7734ac437189b67df
4320]
4321[Makefile: add ubuntu/hardy deb targets
4322warner@allmydata.com**20080617222618]
4323[Makefile: add ubuntu 'gutsy' as a .deb target
4324warner@allmydata.com**20071017203511]
4325[cease producing .debs for dapper, since they'd depend upon a library (simplejson) that isn't packaged for dapper. Feisty++ are fine. Dapper users are encouraged to build from source.
4326warner@allmydata.com**20070711213104]
4327[update debian/copying to reflect GPLv2+12months license
4328warner@lothar.com**20070426083833]
4329[docs: CREDITS to Alberto Berti
4330zooko@zooko.com**20090222193314
4331 Ignore-this: 74d370ada3234cce9e58aec15d739f71
4332]
4333[NEWS: list all user-visible changes since 1.4.1 . Needs lots of editing.
4334Brian Warner <warner@lothar.com>**20090630170734
4335 Ignore-this: f606a5d678d0db8065b9f84e796d59b0
4336]
4337[docs: update NEWS, relnotes.txt, CREDITS to mention WUI Style
4338zooko@zooko.com**20090526233654
4339 Ignore-this: 72d16ec833bc4a22af23d29ea1d5ff8b
4340]
4341[docs: CREDITS
4342zooko@zooko.com**20090213201245
4343 Ignore-this: 5d3101e680739e6cdacb4351b518ae33
4344]
4345[doc: add Toby Murray to the CREDITS
4346zooko@zooko.com**20090120043857
4347 Ignore-this: eedb7e9d47ddee5cbe189b55251d0859
4348]
4349[doc: add Larry Hosken to CREDITS
4350zooko@zooko.com**20090117164943
4351 Ignore-this: f2433a296ab2485872d22538bd0f64b2
4352]
4353[New credit file entry
4354francois@ctrlaltdel.ch**20081114140548]
4355[CREDITS: thanks to Chris Galvan
4356zooko@zooko.com**20080827183950]
4357[docs: CREDITS for Justin
4358zooko@zooko.com**20080611020547]
4359[CREDITS: add Paul Gerhardt, who submitted a small patch for make check-deps to be more newbie-friendly
4360zooko@zooko.com**20080325184739]
4361[CREDITS
4362zooko@zooko.com**20080313160444]
4363[CREDITS for nejucomo
4364zooko@zooko.com**20080108165417]
4365[CREDITS: more credit to nejucomo since we accepted a doc patch
4366zooko@zooko.com**20071107160107]
4367[CREDITS: Nathan Wilcox ++
4368zooko@zooko.com**20071015021312]
4369[docs: edit relnotes.txt and promote Tahoe from filesystem to cloud storage thingie
4370zooko@zooko.com**20090414021913
4371 Ignore-this: 78cc79078c234d0467f6290dcae456b9
4372]
4373[docs: inaugurate Tahoe-1.4.1, since I left out a handful of patches from the Tahoe-1.4.0 release
4374zooko@zooko.com**20090414025430
4375 Ignore-this: 12d5ff7dc842668bdf318c5539272089
4376]
4377[docs: update relnotes.txt, NEWS for Tahoe-1.4.0 release!
4378zooko@zooko.com**20090413041405
4379 Ignore-this: d2eacb26b359a020956ee14b63d95dc5
4380]
4381[docs: edit about.html
4382zooko@zooko.com**20090210080102
4383 Ignore-this: d96f9b21f88d4c7a552f9ed3db5c6af4
4384]
4385[docs: about.html: a couple of edits suggested by kpreid's comments
4386zooko@zooko.com**20080227150138]
4387[setup: relnotes.txt mention the iPhone app and CIFS/SMB (tahoe-w32-client)
4388zooko@zooko.com**20090213044121
4389 Ignore-this: 2c9b8720579c4c146e4416c5a02c77a5
4390]
4391[doc: a few edits to docs made after the 1.3.0 release
4392zooko@zooko.com**20090216201539
4393 Ignore-this: dbff3b929d88134d862f1dffd1ef068a
4394]
4395[NEWS: format some (but not all) items
4396warner@lothar.com**20090407211514]
4397[NEWS: add unformatted list of code changes since previous release
4398warner@lothar.com**20090407021155]
4399[docs: change install.html to point to the 1.4.0 release zip file instead of 1.3.0
4400zooko@zooko.com**20090413160649
4401 Ignore-this: ec6b177d6689894b9842a012da04e5dc
4402]
4403[docs: a few last-minute edits to the docs for 1.3.0 (also this patch will accompany the tag and conveniently trigger the buildbots to build a 1.3.0 version)
4404zooko@zooko.com**20090214000500
4405 Ignore-this: 879c9b10f0e5b9ed0031236e0714ddfa
4406]
4407[docs/install.html: reference InstallDetails instead of debian-specific stuff
4408warner@lothar.com**20080917225742]
4409[setup: add link to the DownloadDebianPackages page
4410zooko@zooko.com**20080908215451
4411 Because I want that link off of the front page of the wiki...
4412]
4413[merge_install.patch
4414cgalvan@mail.utexas.edu**20090102164434
4415 Ignore-this: aa6d4c05d583a0724eb218fef04c3940
4416]
4417[remove_sumo_install.patch
4418cgalvan@mail.utexas.edu**20090102162347
4419 Ignore-this: f328570b1da1ccfbaebc770d40748046
4420]
4421[setup: new install doc -- doesn't require GNU make or a C++ compiler any more!
4422zooko@zooko.com**20081201180933
4423 Ignore-this: 753e8d1e6f32e2ddcd7a082050114725
4424]
4425[docs: edit to install.html suggested by Brian
4426zooko@zooko.com**20080506193115]
4427[doc: mention that "Mac Developer Tools" is the way to get gcc/g++ for Mac
4428zooko@zooko.com**20080610231934]
4429[setup: edit the text of install.html
4430zooko@zooko.com**20080908215549]
4431[docs: a couple of tiny docs updates
4432zooko@zooko.com**20080409225759]
4433[docs: update install.html to reflect Justin's user test
4434zooko@zooko.com**20080611020458]
4435[Make the purpose and location of the tahoe executable more explicit in install.html.
4436nejucomo@gmail.com**20080108173326
4437 
4438]
4439[Makefile,docs: tahoe-deps.tar.gz now lives in separate source/deps/ directory on http://allmydata.org
4440warner@lothar.com**20080917204452]
4441[#249: get dependent libs from tahoe-deps and ../tahoe-deps
4442warner@lothar.com**20080917013627]
4443[setup: add a setup.cfg file which instructs setuptools to install all eggs in unzipped form and to always copy them into the target directory (even if they are already installed somewhere else on the path that setuptools searches, which includes the CWD)
4444zooko@zooko.com**20080122194647]
4445[rewrite parts of the Makefile in setup.py. Add 'build_tahoe' and 'trial' subcommands.
4446warner@allmydata.com**20080912010321
4447 
4448 The 'make build' target now runs 'setup.py build_tahoe', which figures out
4449 where the target 'supportlib' directory should go, and invokes 'setup.py
4450 develop' with the appropriate arguments.
4451 
4452 The 'make test' target now runs 'setup.py trial', which manages sys.path and
4453 runs trial as a subroutine instead of spawning an external process. This
4454 simplifies the case where Twisted was built as a dependent library (and thus
4455 the 'trial' executable is not on PATH).
4456 
4457 setup.py now manages sys.path and PYTHONPATH for its internal subcommands, so
4458 the $(PP) prefix was removed from all Makefile targets that invoke setup.py .
4459 For the remaining ones, the 'setup.py -q show_pythonpath' subcommand was
4460 added to compute this prefix with python rather than with fragile
4461 shell/Makefile syntax.
4462 
4463 
4464]
4465[setup: remove obsolete makefile target build-deps
4466zooko@zooko.com**20080422190712]
4467[setup: test depends on build, which means it invokes setup.py every time, which is slower but does "the right thing" more often
4468zooko@zooko.com**20080424165704
4469 There is a new target "quicktest" which depends on the .built and .checked-deps files.  test-figleaf also depends on the build target now.
4470]
4471[tests: test depends on _version.py
4472zooko@zooko.com**20080228202924
4473 because there is a test that asserts that our version is not "unknown"
4474 
4475]
4476[Makefile: add quicktest-figleaf: this is in my edit-test-repeat loop, and I need it to be fast
4477warner@allmydata.com**20080424183038]
4478[setup: don't use "python" in Makefile, use $(PYTHON) everywhere
4479zooko@zooko.com**20080721162849]
4480[setup: whoops, really remove the default reactor=poll this time
4481zooko@zooko.com**20080730032358]
4482[setup: pass --reactor=poll to trial unless REACTOR variable is set, in which case pass --reactor=$(REACTOR)
4483zooko@zooko.com**20080730023906
4484 This hopefully works around the problem that Twisted v8.1.0 has a bug when used
4485 with pyOpenSSL v0.7 which bug causes some unit tests to spuriously fail -- see
4486 known_issues.txt r2788:
4487 
4488 http://allmydata.org/trac/tahoe/browser/docs/known_issues.txt?rev=2788#L122
4489 
4490 Also it matches with the fact that --reactor=poll is required on cygwin.
4491 
4492]
4493[setup: fix bug in Makefile -- ifeq, not ifneq -- so that now it sets poll reactor only if the user hasn't specified a REACTOR variable, instead of setting poll reactor only if the user has specified a REACTOR variable
4494zooko@zooko.com**20080730160429]
4495[setup: turn back on reactor=poll for cygwin trial (else it runs out of fds)
4496zooko@zooko.com**20080730181217]
4497[setup: instead of setting --reactor=poll for trial in all cases (which fails on platforms that don't have poll reactor, such as Windows and some Mac OS X), just set --reactor=poll for linux2.
4498zooko@zooko.com**20080730031656
4499 
4500]
4501[setup: patch from Chris Galvan to build sdists with no deps in them normally, but include deps if --sumo
4502zooko@zooko.com**20080827182644]
4503[setup: don't assert that trial is present when the Makefile is evaluated
4504zooko@zooko.com**20080903171837
4505 This should fix #506, but it means that if (for some weird reason) Twisted can't be auto-installed and the find_trial.py script doesn't work, the user will get a weird failure message instead of a clean failure message explaining that trial couldn't be found.  Oh well.
4506 
4507 Chris Galvan is working on a much nicer fix to all these issues -- see #505.
4508 
4509]
4510[Makefile: avoid bare quotes, since the emacs syntax-highlighter gets confused by them
4511warner@lothar.com**20080807183001]
4512[setup: don't attempt to escape quote marks, just delete them.  Ugly, but it works okay.
4513zooko@zooko.com**20080806232742]
4514[setup: remove accidentally duplicated lines from Makefile
4515zooko@zooko.com**20080807193029]
4516[setup: if the user passes a TRIALOPT env var then pass that on to trial
4517zooko@zooko.com**20080730205806
4518 This is useful for --reporter=bwverbose, for example.
4519]
4520[setup: don't quote REACTOROPT -- when it is empty then we want no argument at all to be passed to trial, rather than the empty-string-argument
4521zooko@zooko.com**20080609185324]
4522[setup: don't quote TRIALCMD in Makefile -- it can be a pair of (python executable, path to command) paths
4523zooko@zooko.com**20080605233912]
4524[setup: quote variables which are going to be passed through a shell and which might contain spaces
4525zooko@zooko.com**20080605221951]
4526[setup: escape any double-quote chars in the PATH before using the PATH to find and invoke trial
4527zooko@zooko.com**20080806231143]
4528[setup: quote another place where spaces in paths cause shell command misparsing
4529zooko@zooko.com**20080609232150]
4530[Makefile: give setup.py develop a '--site-dirs' arg to work around the #249 setuptools bug which causes us to unnecessarily rebuild pyopenssl and other support libs installed via debian's python-support. Should be harmless on other platforms.
4531warner@allmydata.com**20080910233432]
4532[setup: indentation
4533zooko@zooko.com**20080605210249]
4534[Makefile: build twice, since sometimes the Nevow build fails the first time. See #455. This ought to be undone once that ticket is fixed by a new release of setuptools
4535warner@allmydata.com**20080609230629]
4536[Makefile: desert-island: don't re-fetch tahoe-deps.tar.gz if it's already there, remove the tahoe-deps/ before untarring directory to avoid unpacking weirdness
4537warner@lothar.com**20080917052204]
4538[#249: add 'test-desert-island', to assert that a tahoe-deps.tar.gz -enabled build does not download anything
4539warner@lothar.com**20080917013702]
4540[add 'tarballs' target, to generate compressed source tarballs
4541warner@allmydata.com**20080131024514]
4542[docs: mention -SUMO tarballs, point users at release tarballs instead of development ones
4543warner@lothar.com**20080917203631]
4544[setup: change URL from which to get source tarballs
4545zooko@zooko.com**20080908215409
4546 So that when you look at that directory you won't see distracting other things such as darcs repositories.
4547]
4548[docs: install.html: link to http://allmydata.org/source/tahoe/ instead of http://allmydata.org/source/tahoe/tarballs/
4549zooko@zooko.com**20080611213522]
4550[docs: edit install.html a tad
4551zooko@zooko.com**20080826154929]
4552[setup: remove the developer note about doing without GNU make (the GNU make requirement is about to hurt Peter if he tries to follow this doc, by the way)
4553zooko@zooko.com**20081021163200
4554 add classifiers showing with which versions of Python it is known to work.
4555]
4556[setup.py: cosmetic, remove trailing whitespace
4557warner@allmydata.com**20080714215325]
4558[setup: update licensing information in setup.py comments and metadata
4559zooko@zooko.com**20080108174500]
4560[comment-out the 'license' field because PyPI rejects upload if you have an invalid value therein
4561zooko@zooko.com**20071016034809
4562 
4563 This means that we have no machine-readable licence for now.  I will make the
4564 human-readable licensing.
4565 
4566]
4567[setup: stop claiming that we are under GPL in the "license" field of the PyPI database
4568zooko@zooko.com**20071016025742
4569 Unfortunately, there is no way to claim that we are under a Free Software/Open
4570 Source licence without also claiming to be under a licence that we are not or
4571 claiming to have approval from DFSG or OSI, which we haven't.
4572 
4573 Until now, I erred on the side of choosing the licence that is closest to our
4574 from the list (GPL), but that was a bad idea and now I'm erring on the side of
4575 not including a machine-readable licensing claim at all.
4576 
4577 Hopefully humans who are interested will quickly find out that we are actually
4578 under a Real Free Software Licence.
4579 
4580 But really, this underscores that we need to talk to FSF, edit our licence for
4581 clarity of intent, and submit it to DFSG/OSI.
4582 
4583]
4584[fix the 'license' field of the PyPI db (not the Trove Classifiers that I was changing in recent patches) to describe our licence and link to it
4585czooko@zooko.com**20071016035510
4586 The earlier patches were changing the Trove Classifiers, which is a different thing to this 'license' field.
4587]
4588[setup: add excited DEVELOPER NOTE to install.html
4589zooko@zooko.com**20080908215603
4590 It should be removed before 1.3.0 release, of course...
4591]
4592[docs: relnotes.txt final (!?) update for 1.3.0!
4593zooko@zooko.com**20090213042814
4594 Ignore-this: 7a959eba00115474ff048cd84ecab495
4595]
4596[docs: not-quite-final version of relnotes.txt for tahoe-1.3.0
4597zooko@zooko.com**20090210170227
4598 Ignore-this: 64e11f3619d537eae28f4d33977bd7ab
4599]
4600[docs: a couple of tiny edits
4601zooko@zooko.com**20080619192619]
4602[docs: relnotes.txt: reflow to 70 cols
4603zooko@zooko.com**20080611230256]
4604[relnotes.txt: update and edit for the 1.2.0 release!
4605zooko@zooko.com**20080722010403]
4606[docs: relnotes.txt: re-arrange sections a bit
4607zooko@zooko.com**20080611195234]
4608[docs: start updating the relnotes.txt in preparation for the next release
4609zooko@zooko.com**20080701201936]
4610[docs: relnotes.txt: trivial change (really just to trigger the buildbot when it comes in a bundle along with the 1.1.0 tag)
4611zooko@zooko.com**20080611213202]
4612[docs: relnotes.txt: update the release notes for the v1.1.0 release!
4613zooko@zooko.com**20080611194055]
4614[docs: fix name of docs dir in relnotes.txt
4615zooko@zooko.com**20080218220805]
4616[docs: small edit to relnotes.txt
4617zooko@zooko.com**20080313185655]
4618[docs: update relnotes.txt for Tahoe v1.0!
4619zooko@zooko.com**20080326012800]
4620[docs: fix typo in relnotes.txt
4621zooko@zooko.com**20080313190147]
4622[docs: link to the current CREDITS file from relnotes.txt
4623zooko@zooko.com**20080313190420]
4624[docs: small edit to relnotes.txt
4625zooko@zooko.com**20080313191326]
4626[docs: update relnotes.txt for allmydata.org "Tahoe" v0.9.0 !
4627zooko@zooko.com**20080313184326
4628 Whee!
4629 
4630]
4631[docs: update relnotes.txt
4632zooko@zooko.com**20080215233533]
4633[docs: update relnotes.txt for v0.8.0!
4634zooko@zooko.com**20080214150026]
4635[docs: update relnotes, running.html
4636zooko@zooko.com**20080214145434]
4637[docs: beginning of update to relnotes.txt for v0.8
4638zooko@zooko.com**20080213234302]
4639[docs: relnotes for 0.7.0
4640zooko@zooko.com**20080108170144]
4641[relnotes.txt: fix bug in relnotes.txt for v0.6.1 -- it incorrectly described v0.6 as having been released in August; it was actually September
4642czooko@zooko.com**20071016043325]
4643[relnote.txt: update relnotes.txt for the v0.6.1 release
4644zooko@zooko.com**20071015215602]
4645[relnotes.txt a few tiny branding edits
4646zooko@zooko.com**20070817203303
4647 Uncertain about the branding, but what the heck.
4648]
4649[relnotes.txt: tweak #129 description a bit
4650Brian Warner <warner@allmydata.com>**20070920062433]
4651[relnotes.txt: link to the final version of the README for v0.6
4652zooko@zooko.com**20070924214238]
4653[relnotes.txt: add Performance section, fix link to foolscap
4654zooko@zooko.com**20070924213231]
4655[relnotes.txt: line-wrap to 70-chars and a small edit
4656zooko@zooko.com**20070922030327]
4657[relnotes.txt: correct description of leases
4658zooko@zooko.com**20070919022416]
4659[relnotes.txt: a few final touch-ups for v0.6
4660zooko@zooko.com**20070923170804]
4661[relnotes.txt: add ticket #129
4662zooko@zooko.com**20070919212646]
4663[relnotes.txt: update for v0.6 (not complete)
4664zooko@zooko.com**20070918220430]
4665[relnotes.txt: v0.5.1
4666zooko@zooko.com**20070823205141]
4667[webapi: don't accept zero-length childnames during traversal. Closes #358, #676.
4668Brian Warner <warner@lothar.com>**20091227201043
4669 Ignore-this: a9119dec89e1c7741f2289b0cad6497b
4670 
4671 This forbids operations that would implicitly create a directory with a
4672 zero-length (empty string) name, like what you'd get if you did "tahoe put
4673 local /oops/blah" (#358) or "POST /uri/CAP//?t=mkdir" (#676). The error
4674 message is fairly friendly too.
4675 
4676 Also added code to "tahoe put" to catch this error beforehand and suggest the
4677 correct syntax (i.e. without the leading slash).
4678]
4679[interface name cleanups: IFileNode, IImmutableFileNode, IMutableFileNode
4680Brian Warner <warner@lothar.com>**20091120075255
4681 Ignore-this: e3d193c229e2463e1d0b0c92306de27f
4682 
4683 The proper hierarchy is:
4684  IFilesystemNode
4685  +IFileNode
4686  ++IMutableFileNode
4687  ++IImmutableFileNode
4688  +IDirectoryNode
4689 
4690 Also expand test_client.py (NodeMaker) to hit all IFilesystemNode types.
4691]
4692[interfaces.py: minor improvement to IDirectoryNode.set_node
4693warner@allmydata.com**20080909233416]
4694[Add t=mkdir-immutable to the webapi. Closes #607.
4695Brian Warner <warner@lothar.com>**20091118070900
4696 Ignore-this: 311e5fab9a5f28b9e8a28d3d08f3c0d
4697 
4698 * change t=mkdir-with-children to not use multipart/form encoding. Instead,
4699   the request body is all JSON. t=mkdir-immutable uses this format too.
4700 * make nodemaker.create_immutable_dirnode() get convergence from SecretHolder,
4701   but let callers override it
4702 * raise NotDeepImmutableError instead of using assert()
4703 * add mutable= argument to DirectoryNode.create_subdirectory(), default True
4704]
4705[webapi: use t=mkdir-with-children instead of a children= arg to t=mkdir .
4706Brian Warner <warner@lothar.com>**20091026011321
4707 Ignore-this: 769cab30b6ab50db95000b6c5a524916
4708 
4709 This is safer: in the earlier API, an old webapi server would silently ignore
4710 the initial children, and clients trying to set them would have to fetch the
4711 newly-created directory to discover the incompatibility. In the new API,
4712 clients using t=mkdir-with-children against an old webapi server will get a
4713 clear error.
4714]
4715[make get_size/get_current_size consistent for all IFilesystemNode classes
4716Brian Warner <warner@lothar.com>**20091118191624
4717 Ignore-this: bd3449cf96e4827abaaf962672c1665a
4718 
4719 * stop caching most_recent_size in dirnode, rely upon backing filenode for it
4720 * start caching most_recent_size in MutableFileNode
4721 * return None when you don't know, not "?"
4722 * only render None as "?" in the web "more info" page
4723 * add get_size/get_current_size to UnknownNode
4724]
4725[mutable: add get_size_of_best_version to the interface, to simplify the web HEAD code, and tests
4726warner@allmydata.com**20080813020252]
4727[class name cleanups: s/FileNode/ImmutableFileNode/
4728Brian Warner <warner@lothar.com>**20091120072239
4729 Ignore-this: 4b3218f2d0e585c62827e14ad8ed8ac1
4730 
4731 also fix test/bench_dirnode.py for recent dirnode changes
4732]
4733[nodemaker: implement immutable directories (internal interface), for #607
4734Brian Warner <warner@lothar.com>**20091112002233
4735 Ignore-this: d09fccf41813fdf7e0db177ed9e5e130
4736 
4737 * nodemaker.create_from_cap() now handles DIR2-CHK and DIR2-LIT
4738 * client.create_immutable_dirnode() is used to create them
4739 * no webapi yet
4740]
4741[dirnode.py: move pack_children() out to a function, for eventual use by others
4742Brian Warner <warner@lothar.com>**20091017180707
4743 Ignore-this: 6a823fb61f2c180fd38d6742d3196a7a
4744]
4745[dirnode.py/_encrypt_rwcap: rename IV to "salt", which is more accurate
4746Brian Warner <warner@lothar.com>**20090712235025
4747 Ignore-this: 1b8d6a4e8667655f52abe2b3be46a0ed
4748]
4749[dirnode.py: security bug: also use child writecap to derive child enc key,
4750Brian Warner <warner@lothar.com>**20090712234750
4751 Ignore-this: 13867ebc123b521df60e4013b75716e
4752 not just the dirnode writecap. The previous code (which only hashed the
4753 dirnode writecap) would use the same key for all children, which is very bad.
4754 This is the correct implementation of #750.
4755]
4756[directories: make the IV for the writecaps in directory entries be computed from the secure hash of the writecap itself
4757zooko@zooko.com**20090705024815
4758 Ignore-this: cb9cc29f8f0687f2545e95d5b7b42d44
4759 This makes encoding of directory entries deterministic, and it is also a tad faster on Macbook Pro than getting a random IV with os.urandom(16).
4760]
4761[move dirnode.CachingDict to dictutil.AuxValueDict, generalize method names,
4762Brian Warner <warner@lothar.com>**20091017180005
4763 Ignore-this: b086933cf429df0fcea16a308d2640dd
4764 improve tests. Let dirnode _pack_children accept either dict or AuxValueDict.
4765]
4766[Add CachingDict dict subclass to dirnode.py
4767kevan@isnotajoke.com**20090705212345
4768 Ignore-this: 484bdcecbc1ae25e04bf659abcfcf834
4769]
4770[stop using IURI()/etc as an adapter
4771Brian Warner <warner@lothar.com>**20091111224542
4772 Ignore-this: 9611da7ea6a4696de2a3b8c08776e6e0
4773]
4774[upload: fix #758 recursion-loop in peer-selection when servers report errors.
4775Brian Warner <warner@lothar.com>**20090717050709
4776 Ignore-this: 9c28ef13649c4475ede23815b69e51fd
4777 The bug was in the code that handles a third-or-later pass, and was
4778 previously untested.
4779]
4780[hush pyflakes
4781warner@lothar.com**20090625021809]
4782[Split out NoSharesError, stop adding attributes to NotEnoughSharesError, change humanize_failure to include the original exception string, update tests, behave better if humanize_failure fails.
4783warner@lothar.com**20090625021707]
4784[test_system.py minor typo
4785warner@allmydata.com**20070926190737]
4786[nodemaker.create_new_mutable_directory: pack_children() in initial_contents=
4787Brian Warner <warner@lothar.com>**20091020005118
4788 Ignore-this: bd43c4eefe06fd32b7492bcb0a55d07e
4789 instead of creating an empty file and then adding the children later.
4790 
4791 This should speed up mkdir(initial_children) considerably, removing two
4792 roundtrips and an entire read-modify-write cycle, probably bringing it down
4793 to a single roundtrip. A quick test (against the volunteergrid) suggests a
4794 30% speedup.
4795 
4796 test_dirnode: add new tests to enforce the restrictions that interfaces.py
4797 claims for create_new_mutable_directory(): no UnknownNodes, metadata dicts
4798]
4799[update many dirnode interfaces to accept dict-of-nodes instead of dict-of-caps
4800Brian Warner <warner@lothar.com>**20091017192829
4801 Ignore-this: b35472285143862a856bf4b361d692f0
4802 
4803 interfaces.py: define INodeMaker, document argument values, change
4804                create_new_mutable_directory() to take dict-of-nodes. Change
4805                dirnode.set_nodes() and dirnode.create_subdirectory() too.
4806 nodemaker.py: use INodeMaker, update create_new_mutable_directory()
4807 client.py: have create_dirnode() delegate initial_children= to nodemaker
4808 dirnode.py (Adder): take dict-of-nodes instead of list-of-nodes, which
4809                     updates set_nodes() and create_subdirectory()
4810 web/common.py (convert_initial_children_json): create dict-of-nodes
4811 web/directory.py: same
4812 web/unlinked.py: same
4813 test_dirnode.py: update tests to match
4814]
4815[dirnode.set_nodes: change return value: fire with self instead of None
4816Brian Warner <warner@lothar.com>**20091013014546
4817 Ignore-this: b75b3829fb53f7399693f1c1a39aacae
4818]
4819[webapi: t=mkdir now accepts initial children, using the same JSON that t=json
4820Brian Warner <warner@lothar.com>**20091013023444
4821 Ignore-this: 574a46ed46af4251abf8c9580fd31ef7
4822 emits.
4823 
4824 client.create_dirnode(initial_children=) now works.
4825]
4826[replace Client.create_empty_dirnode() with create_dirnode(), in anticipation
4827Brian Warner <warner@lothar.com>**20091012224506
4828 Ignore-this: cbdaa4266ecb3c6496ffceab4f95709d
4829 of adding initial_children= argument.
4830 
4831 Includes stubbed-out initial_children= support.
4832]
4833[test_web: improve test coverage of PUT DIRURL t=uri replace=false
4834warner@allmydata.com**20081029045744]
4835[test_web: test behavior of broken-dirnode GET, both html and json
4836warner@lothar.com**20090307105707
4837 Ignore-this: c0e5b45eee28959f899efa1bd189d6bd
4838]
4839[The initial_children= argument to nodemaker.create_new_mutable_directory is
4840Brian Warner <warner@lothar.com>**20091013031922
4841 Ignore-this: 72e45317c21f9eb9ec3bd79bd4311f48
4842 now enabled.
4843]
4844[replace dirnode.create_empty_directory() with create_subdirectory(), which
4845Brian Warner <warner@lothar.com>**20091013021520
4846 Ignore-this: 6b57cb51bcfcc6058d0df569fdc8a9cf
4847 takes an initial_children= argument
4848]
4849[test_dirnode: improve coverage of not-mutable-error a bit
4850warner@allmydata.com**20080508235335]
4851[CLI: modify 'tahoe manifest' and 'tahoe deep-check' to report ERROR: properly. For #590.
4852warner@allmydata.com**20090225054415
4853 Ignore-this: 99162f894fdd24112a869e14848c3dea
4854]
4855[test_dirnode.py: add tests of initial_children= args to client.create_dirnode
4856Brian Warner <warner@lothar.com>**20091017194159
4857 Ignore-this: 2e2da28323a4d5d815466387914abc1b
4858 and nodemaker.create_new_mutable_directory
4859]
4860[tests: remove obsolete test (it tests functionality that is long gone) which occasionally ERRORs now that we have more metadata (since [20090411225205-92b7f-7adfb89cb4db4ac7d28427934dea3d2c108f6476])
4861zooko@zooko.com**20090413023621
4862 Ignore-this: b9f1b1225015f59ffd7e0ee1633e4098
4863]
4864[dirnode: don't check MAC on entries in dirnodes
4865zooko@zooko.com**20081221233518
4866 Ignore-this: efacb56d18259219c910cf5c84b17340
4867 In an ancient version of directories, we needed a MAC on each entry.  In modern times, the entire dirnode comes with a digital signature, so the MAC on each entry is redundant.
4868 With this patch, we no longer check those MACs when reading directories, but we still produce them so that older readers will accept directories that we write.
4869 
4870]
4871[clean up uri-vs-cap terminology, emphasize cap instances instead of URI strings
4872Brian Warner <warner@lothar.com>**20091111222619
4873 Ignore-this: 93626385f6e7f039ada71f54feefe267
4874 
4875  * "cap" means a python instance which encapsulates a filecap/dircap (uri.py)
4876  * "uri" means a string with a "URI:" prefix
4877  * FileNode instances are created with (and retain) a cap instance, and
4878    generate uri strings on demand
4879  * .get_cap/get_readcap/get_verifycap/get_repaircap return cap instances
4880  * .get_uri/get_readonly_uri return uri strings
4881 
4882 * add filenode.download_to_filename() for control.py, should find a better way
4883 * use MutableFileNode.init_from_cap, not .init_from_uri
4884 * directory URI instances: use get_filenode_cap, not get_filenode_uri
4885 * update/cleanup bench_dirnode.py to match, add Makefile target to run it
4886]
4887[Makefile: add simple 'repl' target to start a python interpreter with a useful PYTHONPATH
4888warner@allmydata.com**20071103053255]
4889[filenode: add get_repair_cap(), which uses the read-write filecap for immutable files, and the verifycap for immutable files
4890warner@allmydata.com**20090123033836]
4891[dirnode: add get_repair_cap()
4892warner@allmydata.com**20090123034449]
4893[directories: in bench_dirnode.py, use a real CacheDirectoryManager instead of a fake one (because CacheDirectoryManager is a significant user of CPU and/or time)
4894zooko@zooko.com**20090707034119
4895 Ignore-this: 207a2dc346ca2c01dc7b341e88a0ca0a
4896]
4897[Modify bench_dirnode.py to use CachingDict.
4898kevan@isnotajoke.com**20090705223142
4899 Ignore-this: 9ba62a16fd37ef281368715a887fd9f8
4900]
4901[immutable.Downloader: pass StorageBroker to constructor, stop being a Service
4902Brian Warner <warner@lothar.com>**20090815192543
4903 Ignore-this: af5ab12dbf75377640a670c689838479
4904 child of the client, access with client.downloader instead of
4905 client.getServiceNamed("downloader"). The single "Downloader" instance is
4906 scheduled for demolition anyways, to be replaced by individual
4907 filenode.download calls.
4908]
4909[test/common.py: update FakeMutableFileNode to new contents= callable scheme
4910Brian Warner <warner@lothar.com>**20091013052154
4911 Ignore-this: 62f00a76454a2190d1c8641c5993632f
4912]
4913[Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
4914Brian Warner <warner@lothar.com>**20090815112846
4915 Ignore-this: 1db1b9c149a60a310228aba04c5c8e5f
4916 
4917 * stop using IURI as an adapter
4918 * pass cap strings around instead of URI instances
4919 * move filenode/dirnode creation duties from Client to new NodeMaker class
4920 * move other Client duties to KeyGenerator, SecretHolder, History classes
4921 * stop passing Client reference to dirnode/filenode constructors
4922   - pass less-powerful references instead, like StorageBroker or Uploader
4923 * always create DirectoryNodes by wrapping a filenode (mutable for now)
4924 * remove some specialized mock classes from unit tests
4925 
4926 Detailed list of changes (done one at a time, then merged together)
4927 
4928 always pass a string to create_node_from_uri(), not an IURI instance
4929 always pass a string to IFilesystemNode constructors, not an IURI instance
4930 stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
4931 client.py: move SecretHolder code out to a separate class
4932 test_web.py: hush pyflakes
4933 client.py: move NodeMaker functionality out into a separate object
4934 LiteralFileNode: stop storing a Client reference
4935 immutable Checker: remove Client reference, it only needs a SecretHolder
4936 immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
4937 immutable Repairer: replace Client reference with StorageBroker and SecretHolder
4938 immutable FileNode: remove Client reference
4939 mutable.Publish: stop passing Client
4940 mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
4941 MutableChecker: reference StorageBroker and History directly, not through Client
4942 mutable.FileNode: removed unused indirection to checker classes
4943 mutable.FileNode: remove Client reference
4944 client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
4945 move create_mutable_file() into NodeMaker
4946 test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
4947 test_mutable.py: clean up basedir names
4948 client.py: move create_empty_dirnode() into NodeMaker
4949 dirnode.py: get rid of DirectoryNode.create
4950 remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
4951 stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
4952 remove Client from NodeMaker
4953 move helper status into History, pass History to web.Status instead of Client
4954 test_mutable.py: fix minor typo
4955]
4956[added is_uri() function to allmydata.uri
4957robk-tahoe@allmydata.com**20080111024342]
4958[mutable WIP: merge in patches from current trunk
4959warner@allmydata.com**20080417200922]
4960[mutable.py: catch errors during publish.. previously they were ignored. oops.
4961warner@allmydata.com**20080412055102]
4962[test_mutable.py: remove spurious Retrieve during a publish test
4963warner@allmydata.com**20080415182038]
4964[mutable: improve test coverage in Retrieve, when shares change after mapupdate
4965warner@allmydata.com**20080423002514]
4966[test_mutable.py: add tests for no-servers conditions, closes #463.
4967warner@lothar.com**20080707191810]
4968[dirnode: cleanup, make get_verifier() always return a URI instance, not a string
4969warner@lothar.com**20080910083755]
4970[trivial: remove unused imports; thanks, pyflakes
4971zooko@zooko.com**20080925180422]
4972[mutable: respect the new tahoe.cfg 'shares.needed' and 'shares.total' settings
4973warner@allmydata.com**20081119200501]
4974[trivial: whitespace
4975zooko@zooko.com**20090118165815
4976 Ignore-this: 6f97042f221da3ad931c6b545edc6a30
4977 Ran "M-x whitespace-cleanup" on files that Toby's recent patch touched, even though they didn't have trailing whitespace.
4978]
4979[test_dirnode: #625 run deep-check on a readonly dirnode too
4980warner@lothar.com**20090213205337
4981 Ignore-this: 2a18d33a7cc99c9959b7182e37b35077
4982]
4983[tests: bump up the timeout on a bunch of tests that took longer than the default timeout (120s) on François Lenny-armv5tel
4984zooko@zooko.com**20090605031444
4985 Ignore-this: 84d67849b1f8edc88bf7001e31b5f7f3
4986]
4987[remove upper limit on SDMF filesize
4988kevan@isnotajoke.com**20090620213130
4989 Ignore-this: 5bc48c7421c73827909a17e651799d0c
4990]
4991[big rework of introducer client: change local API, split division of responsibilites better, remove old-code testing, improve error logging
4992warner@lothar.com**20090623021047]
4993[test_introducer.py: increase timeouts on poll() calls
4994warner@allmydata.com**20080205223758]
4995[introducer: fix bug in recent simplification caught by Brian's sharp code-reviewing eye
4996zooko@zooko.com**20081208231634
4997 Ignore-this: 29854954577018d658be49142177edf2
4998]
4999[#620: storage: allow mutable shares to be deleted, with a writev where new_length=0
5000warner@allmydata.com**20090211053756
5001 Ignore-this: 81f79e0d72f7572bdc1c9f01bb91620
5002]
5003[storage #596: announce 'tolerates-immutable-read-overrun' to the version announcement, to indicate that a read() on an immutable share where offset+length is beyond the end of the file will return a truncated string instead of raising an exception
5004warner@lothar.com**20090209015602
5005 Ignore-this: cbd07102909449da55067184a63fc0d1
5006]
5007[test_introducer.py: add a test for the python2.4.0/2.4.1 bug in base64.b32decode
5008warner@lothar.com**20090519034101]
5009[switch to using RemoteException instead of 'wrapped' RemoteReferences. Should fix #653, the rref-EQ problem
5010warner@lothar.com**20090522004632]
5011[trivial: remove unused import -- thanks, pyflakes
5012zooko@zooko.com**20081231212556
5013 Ignore-this: a70cd39a7d633bde2bb5275dfd4d3781
5014]
5015[immutable: do not catch arbitrary exceptions/failures from the attempt to get a crypttext hash tree -- catch only ServerFailure, IntegrityCheckReject, LayoutInvalid, ShareVersionIncompatible, and DeadReferenceError
5016zooko@zooko.com**20090108042551
5017 Ignore-this: 35f208af1b9f8603df25ed69047360d1
5018 Once again I inserted a bug into the code, and once again it was hidden by something catching arbitrary exception/failure and assuming that it means the server failed to provide valid data.
5019]
5020[immutable/checker.py: trap ShareVersionIncompatible too. Also, use f.check
5021warner@lothar.com**20090224041405
5022 Ignore-this: b667e8d3192116293babcacdeed42898
5023 instead of examining the value returned by f.trap, because the latter appears
5024 to squash exception types down into their base classes (i.e. since
5025 ShareVersionIncompatible is a subclass of LayoutInvalid,
5026 f.trap(Failure(ShareVersionIncompatible)) == LayoutInvalid).
5027 
5028 All this resulted in 'incompatible' shares being misclassified as 'corrupt'.
5029]
5030[immutable/checker: wrap comments to 80cols, my laptop does not have a wide screen. No functional changes.
5031warner@lothar.com**20090207200439
5032 Ignore-this: ad8f03eb17b217987268f76d15fa5655
5033]
5034[servermap add-lease: fix the code that's supposed to catch remote IndexErrors, I forgot that they present as ServerFailures instead. This should stop the deluge of Incidents that occur when you do add-lease against 1.3.0 servers
5035warner@allmydata.com**20090227070426
5036 Ignore-this: 3d7bc87d9587b51d44b27317d9eded23
5037]
5038[immutable checker add-lease: catch remote IndexError here too
5039warner@allmydata.com**20090227071724
5040 Ignore-this: 94ee6064ce26409381c6451cd50fdade
5041]
5042[rrefutil: add check_remote utility function
5043warner@allmydata.com**20090227065957
5044 Ignore-this: d859d0fae87b7e84ad3c2893350ed519
5045]
5046[util/pipeline.py: new utility class to manage size-limited work pipelines, for #392
5047warner@lothar.com**20090518234326]
5048[rrefutil: add trap_remote utility and friends
5049warner@allmydata.com**20090227065524
5050 Ignore-this: a594050cdd9bcca073d8029819dbc35
5051]
5052[test_util: get almost full test coverage of dictutil, starting with the original pyutil tests as a base. The remaining three uncovered lines involve funny cases of ValueOrderedDict that I can't figure out how to get at
5053warner@lothar.com**20090216023210
5054 Ignore-this: dc1f0c6d8c003c0ade38bc8f8516b04d
5055]
5056[switch all foolscap imports to use foolscap.api or foolscap.logging
5057warner@lothar.com**20090522003823]
5058[add in-line doc that Josh wrote as he was trying to understand this code
5059"Zooko O'Whielacronx <zooko@zooko.com>"**20070523221123]
5060[add OneShotObserverList from the amdlib tree
5061warner@lothar.com**20070308210738]
5062[confwiz: add command line options
5063robk-tahoe@allmydata.com**20080215014429
5064 
5065 adds command line option parsing to the confwiz.
5066 
5067 the previous --uninstall option behaves as before, but it parsed
5068 more explicitly with the twisted usage library.
5069 
5070 added is a --server option, which controls which web site the
5071 backend script for configuration is to be found on. (it is looked
5072 for at /native_client.php on the given server) this option can be
5073 used on conjunction with --uninstall to control where the uninstall
5074 is recorded
5075 
5076 Options:
5077   -u, --uninstall  record uninstall
5078   -s, --server=    url of server to contact
5079                    [default: https://beta.allmydata.com/]
5080 
5081 e.g. confwiz.py -s https://www-test.allmydata.com/
5082 
5083 
5084]
5085[confwiz: update to record install and uninstall events.
5086robk-tahoe@allmydata.com**20080130225207]
5087[confwiz: use get_config call to backend
5088robk-tahoe@allmydata.com**20080126010132
5089 
5090 this will write an arbitrary number of config files, instead of being restricted
5091 to just the introducer.furl, based on the response of the php backend. 
5092 the get_config is passed username/password
5093]
5094[updating installer for beta release
5095secorp@allmydata.com**20080214033609]
5096[windows installer: remove uninstall tracking, add welcome page
5097robk-tahoe@allmydata.com**20080214001716
5098 
5099 in justin's testing, the uninstall tracking was hanging the uninstall
5100 process (on vista) for now, until we see enough need for it to warrant
5101 more detailed testing/debugging/tweaks, I'm simply disabling the call
5102 to confwiz --uninstall
5103 
5104 also this adds a 'welcome page' to the install process. once the user
5105 has installed the windows build, then the installer will open a web
5106 browser to the 'welcome page' on the website ('/welcome_install')
5107 
5108]
5109[windows: include latest windown build, winfuse and tray.exe
5110robk-tahoe@allmydata.com**20080205001250]
5111[windows: track uninstalls
5112robk-tahoe@allmydata.com**20080206201249
5113 
5114 the confwiz and the native_client backend both gained hooks to track
5115 uninstall events.  however that somehow didn't make it to the uninstaller :-)
5116]
5117[servermap: don't log late arrivals, and don't log DeadReferenceError at log.WEIRD
5118warner@allmydata.com**20080827003729]
5119[various: use util.log.err instead of twisted.log.err, so we get both Incidents and trial-test-flunking
5120warner@lothar.com**20080920173545]
5121[update assertutil to use twisted log instead of amdlib Log
5122robk@allmydata.com**20061130212408]
5123[setup: when using the foolscap "what versions are here?" feature, use allmydata.get_package_versions() instead of specifically importing allmydata, pycryptopp, and zfec
5124zooko@zooko.com**20080923000351]
5125[trivial: fix redefinition of name "log" in imports (pyflakes)
5126zooko@zooko.com**20090107040829
5127 Ignore-this: cdcf7ff84082323ebc022b186127e678
5128]
5129[setup: refactor versions-and-paths and use pkg_resources to find them
5130zooko@zooko.com**20090119210435
5131 Ignore-this: b368d8ede7531f1d79ee3c2c1a2cc116
5132 Using pkg_resources is probably better if it works -- zope.interface doesn't have a __version__ attribute that we can query, but pkg_resources knows zope.interface's version number, for one thing.
5133 This code falls back to the old way -- looking at the __version__ attributes and __file__ attributes -- if the pkg_resources way doesn't answer.
5134 Note that this patch also changes the capitalization of "Nevow", "Twisted", and "pyOpenSSL", and the spelling of "allmydata-tahoe".  These changes are not frivolous: they are reflecting the fact that we are naming Python packages (technically called Python "distributions") instead of Python modules (technically and confusingly called Python "packages") here.  The package ("distribution") is named "allmydata-tahoe".  The module ("package") is named "allmydata".
5135]
5136[setup: fix missing import -- thanks, pyflakes
5137zooko@zooko.com**20081125155528
5138 Ignore-this: 1fc042da2882b7b2f71cde93eb234a47
5139]
5140[setup: simplify the implementation of allmydata.get_package_versions() and add "platform" which is a human-oriented summary of the underlying operating system and machine
5141zooko@zooko.com**20080922235354]
5142[setup: simplify parsing of python version number
5143zooko@zooko.com**20080829000045]
5144[setup: emit the version of python in the list of versions
5145zooko@zooko.com**20080828220454]
5146[remove runtime dependency upon setuptools (which crept into allmydata.get_package_versions)
5147warner@allmydata.com**20080105025341]
5148[add option to show version and path to the tahoe executable
5149cgalvan@mail.utexas.edu**20090116184751]
5150[dirnode deep_traverse: insert a turn break (fireEventually) at least once every 100 files, otherwise a CHK followed by more than 158 LITs can overflow the stack, sort of like #237.
5151warner@allmydata.com**20090313233135
5152 Ignore-this: 39b78faa947ed9461f2d120f6843e59f
5153]
5154[Modify markup of Tahoe web pages to be more amenable to styling; some minor changes of wording.
5155Kevin Reid <kpreid@mac.com>**20090526232545
5156 Ignore-this: 8845937f0df6c7ddc07abe3211428a6f
5157]
5158[welcome page: add link to statistics page
5159warner@allmydata.com**20080710003722]
5160[wui: fix bug in which empty directory is marked as "unreadable", add test, remove exclamation point
5161zooko@zooko.com**20090407182834
5162 Ignore-this: 2623a7ecd9c7c46b3c984fbaddf43ad0
5163]
5164[WUI: fix display of empty directories, it threw an exception before
5165warner@allmydata.com**20090320235809
5166 Ignore-this: e598bb806d75411d202ba90fc251ad2b
5167]
5168[web: when a dirnode can't be read, emit a regular HTML page but with the child-table and upload-forms replaced with an apologetic message. Make sure to include the 'get info' links so the user can do a filecheck
5169warner@lothar.com**20090307105601
5170 Ignore-this: f949d6bd58c0c2fd60fd5fa730115f3f
5171]
5172[web/directory: add a link from readwrite directories to a read-only version, and fix the 'SI=xxx' header to actually use the storage index, not the writekey
5173warner@allmydata.com**20090131013205
5174 Ignore-this: a1f21f81e6dbf88e591085efd1a57740
5175]
5176[wui: edit some of the human-readable parts of the wui such as button labels
5177zooko@zooko.com**20090407185459
5178 Ignore-this: 145722f4627271ea1d43107a0c7ce0e1
5179 (The word "parent" suggests that you can go up a directory hierarchy -- perhaps that word is vestigial.)
5180]
5181[tests: bump up timeouts so that the tests can finish before timeout on Francois's little arm box
5182zooko@zooko.com**20090608225557
5183 Ignore-this: fb83698338b2f12546cd3e1dcb896d34
5184]
5185[tests: increase timeouts on some other tests that timed-out on Francois's arm box
5186zooko@zooko.com**20090605143437
5187 Ignore-this: 2903cc20d914fc074c8d7a6c47740ba6
5188]
5189[unit tests: bump up a timeout which I encountered when running on a very slow machine
5190zooko@zooko.com**20071129204735]
5191[tests: bump up timeout on a test that timed out on draco
5192zooko@zooko.com**20090610044628
5193 Ignore-this: f598b98cbae44dc947937c6ca54c10cb
5194]
5195[mutable/filenode.py: set _writekey to None, rather than leaving it missing
5196Brian Warner <warner@lothar.com>**20090626062022
5197 Ignore-this: be111c37dabd6c7aa47abd7bf160926e
5198 
5199 This will at least turn the really really weird error when a repair of a
5200 readonly mutable file is attempted into a merely really weird assertion that
5201 mentions "repair currently requires a writecap".
5202]
5203[remove trailing whitespace
5204Brian Warner <warner@lothar.com>**20090629200358
5205 Ignore-this: 7a3756618dcfca0a40acb4c3d15f6440
5206]
5207[More lossmodel work, on repair.
5208Shawn Willden <shawn-tahoe@willden.org>**20090116025648]
5209[Loss model work (temp1)
5210Shawn Willden <shawn@willden.org>**20090115030058]
5211[Statistics module
5212Shawn Willden <shawn-tahoe@willden.org>**20090114021235
5213 
5214 Added a statistics module for calculating various facets of
5215 share survival statistics.
5216]
5217[util/cachedir.py: add a cache-directory manager class, which expires+deletes unused files after a while
5218warner@allmydata.com**20081030200120]
5219[change max filesize limit tests
5220kevan@isnotajoke.com**20090620212822
5221 Ignore-this: 38e7c62a308c3c93e79df4bf72f4f675
5222 
5223 Instead of testing to see that the previous SDMF filesize limit was being
5224 obeyed, we now test to make sure that we can insert files larger than that
5225 limit.
5226]
5227[repairer: raise a better exception when faced with a readonly filenode. Still
5228Brian Warner <warner@lothar.com>**20090626063230
5229 Ignore-this: a100005b973a6a57566b943073352828
5230 produces an error, though.
5231]
5232[repairer.py: wrap to 80cols. No code changes.
5233Brian Warner <warner@lothar.com>**20090701000047
5234 Ignore-this: 4a84ac95a849be0656d362882876082a
5235]
5236[clean up storage_broker interface: should fix #732
5237warner@lothar.com**20090621235119
5238 Ignore-this: fb93cd670e809eed2bc123142dd8d4ff
5239]
5240[client.py: improve docstring
5241warner@lothar.com**20090216231532
5242 Ignore-this: bbaa9e3f63fdb0048e3125c4681b2d1f
5243]
5244[client: add get_servers()
5245zooko@zooko.com**20081208230400
5246 Ignore-this: 1b9b3ff483849563342f467c39fdd15d
5247]
5248[introducer: simplify get_permuted_peers() implementation and add get_peers()
5249zooko@zooko.com**20081208225725
5250 Ignore-this: 8299c0dc187521f34187e54c72e57dc9
5251]
5252[tests/no_network: move GET into the GridTestMixin class
5253warner@allmydata.com**20090225003300
5254 Ignore-this: 7779ad38c2d687ae328ba3cb6164a7a4
5255]
5256[test_repairer: change to use faster no_network.GridTestMixin, split Verifier tests into separate cases, refactor judgement funcs into shared methods
5257warner@lothar.com**20090224041506
5258 Ignore-this: 584ce72d6276da5edc00562793d4ee53
5259]
5260[immutable: tests: the real WRITE_LEEWAY is 35 (it was a mistake to move it from 10 to 35 earlier -- I had seen a failure in which it took 35 times as many writes as I thought were optimal, but I misread and thought it took only 20 times as many)
5261zooko@zooko.com**20090210055348
5262 Ignore-this: e81c34d31fe2e3fd641a284a300352cc
5263]
5264[immutable: tests: sigh, raise, again the limit of how many extra writes you can do and still pass this test
5265zooko@zooko.com**20090210020931
5266 Ignore-this: 91faf5d6919ca27f8212efc8d19b04c5
5267 Obviously requiring the code under test to perform within some limit isn't very meaningful if we raise the limit whenever the test goes outside of it.
5268 But I still don't want to remove the test code which measures how many writes (and, elsewhere, how many reads) a client does in order to fulfill these duties.
5269 Let this number -- now 20 -- stand as an approximation of the inefficiency of our code divided by my mental model of how many operations are actually optimal for these duties.
5270 
5271]
5272[test_repairer: change Repairer to use much-faster no_network.GridTestMixin. As a side-effect, fix what I think was a bug: some of the assert-minimal-effort-expended checks were mixing write counts and allocate counts
5273warner@lothar.com**20090223234227
5274 Ignore-this: d58bd0a909f9939775730cda4a858cae
5275]
5276[test_repairer.py: hush pyflakes: remove duplicate/shadowed function name, by using the earlier definition (which is identical)
5277warner@allmydata.com**20090112214509]
5278[immutable: test: add a test after attempting to repair from corruption: does a full verify run give the file a clean bill of health?  If not, the you haven't successfully repaired it.
5279zooko@zooko.com**20090210010149
5280 Ignore-this: 43faea747e7afccaae230d50c067adc6
5281 This will make the repairer tests more consistent -- less accidentally passing due to getting lucky.
5282]
5283[immutable: tests: assert that verifier gives a clean bill of health after corruption and repair (the previous patch mistakenly did this only after deletion and repair), and also test whether deleting seven other shares and then downloading works.  Also count the number of shares stored in the local filesystem.
5284zooko@zooko.com**20090210020841
5285 Ignore-this: ac803d0599f336c308fe74a2582e6aa4
5286]
5287[test_repairer: wrap comments to 80cols, my laptop does not have a wide screen. No functional changes.
5288warner@lothar.com**20090207200626
5289 Ignore-this: f539c156f3b79cfe49c7cf0fa788994e
5290]
5291[immutable: tests: put shares back to their pristine condition in between each test of corrupting-and-repairing them
5292zooko@zooko.com**20090210002956
5293 Ignore-this: 45de680a6ac69b1845c0c74534913dec
5294 This is important, because if the repairer doesn't completely repair all kinds of corruption (as the current one doesn't), then the successive tests get messed up by assuming that the shares were uncorrupted when the test first set about to corrupt them.
5295]
5296[test_repairer: disable repair-from-corruption tests until other things are improved well enough to make it useful
5297warner@allmydata.com**20090211210159
5298 Ignore-this: bf2c780be028f0f5556f1aed04cc29b9
5299]
5300[immutable repairer: errback any pending readers of DownUpConnectorwhen it runs out of bytes, and test that fact
5301zooko@zooko.com**20090212021129
5302 Ignore-this: efd1fac753dad541fe5a0f232bcbf161
5303]
5304[immutable: repairer: add a simple test to exercise the "leftover" code path, fix the bug (and rename the variable "leftover" to "extra")
5305zooko@zooko.com**20090210181245
5306 Ignore-this: 8426b3cd55ff38e390c4d1d5c0b87e9d
5307]
5308[immutable: tighten preconditions -- you can write empty strings or read zero bytes, and add the first simple unit test of DownUpConnector
5309zooko@zooko.com**20090210065647
5310 Ignore-this: 81aad112bb240b23f92e38f06b4ae140
5311]
5312[add more information to NotEnoughSharesError, split out new exceptions for no-servers and no-source-of-ueb-hash
5313warner@lothar.com**20090304013715]
5314[upload: when using a Helper, insist that it provide protocols/helper/v1 . Related to #538.
5315warner@allmydata.com**20081122022932]
5316[more refactoring: move get_all_serverids() and get_nickname_for_serverid() from Client to storage_broker
5317warner@lothar.com**20090602030750]
5318[test/no_network.py: add a basic stats provider
5319warner@lothar.com**20090223233937
5320 Ignore-this: c9f3cc4eed99cfc36f68938ceff4162c
5321]
5322[test/no_network: do startService on the storage servers, make it easier to customize the storage servers
5323warner@lothar.com**20090220022254
5324 Ignore-this: e62f328721c007e4c5ee023a6efdf66d
5325]
5326[more storage_broker refactoring: downloader gets a broker instead of a client,
5327warner@lothar.com**20090602022511
5328 use Client.get_storage_broker() accessor instead of direct attribute access.
5329]
5330[immutable/download: instrument do-you-have-block responses to investigate #732
5331warner@lothar.com**20090621041209]
5332[start to factor server-connection-management into a distinct 'StorageServerFarmBroker' object, separate from the client and the introducer. This is the starting point for #467: static server selection
5333warner@lothar.com**20090601210604]
5334[introducer: add get_nickname_for_peerid
5335warner@allmydata.com**20080906050700]
5336[web checker_results: include a table of servers in permuted order, so you can see the places where new servers have been inserted
5337warner@allmydata.com**20081205080309]
5338[mutable publish: if we are surprised by shares that match what we would have written anyways, don't be surprised. This should fix one of the two #546 problems, in which we re-use a server and forget that we already sent them a share.
5339warner@allmydata.com**20081210044449]
5340[test_upload: add test of maximum-immutable-share-size, to complete the last item of #538
5341warner@lothar.com**20090209014127
5342 Ignore-this: 943b9b11812ad784ec824db7a8a7aff9
5343]
5344[upload: don't use servers which can't support the share size we need. This ought to avoid #439 problems. Some day we'll have a storage server which advertises support for a larger share size. No tests yet.
5345warner@allmydata.com**20081122022812]
5346[test_checker: improve test coverage for checker results
5347warner@lothar.com**20090223201943
5348 Ignore-this: 83e173602f0f4c811a7a9893d85385df
5349]
5350[mutable repairer: skip repair of readcaps instead of throwing an exception.
5351Brian Warner <warner@lothar.com>**20090701011343
5352 Ignore-this: 2c24493426cdc1db8f0e3815ee2c5f87
5353 This should improve the behavior of #625 a bit: at least all the files will
5354 get repaired.
5355]
5356[hush pyflakes with recent FileTooLarge removal
5357warner@lothar.com**20090621231757
5358 Ignore-this: 4231b38c7e9091b0577b07ec99ac2df0
5359]
5360[directories: make the profiling behavior of bench_dirnode.py accessible by adding '--profile' to the cmdline
5361zooko@zooko.com**20090707033035
5362 Ignore-this: 159c36ac1cafaa4e9a6239025ef9d57b
5363]
5364[directories: update the directory benchmarks to exercise the unpack-and-repack functionality, and add optional profiling
5365zooko@zooko.com**20090705162953
5366 Ignore-this: 4a1b11c9b1880772c923b3c03e10770b
5367]
5368[directories: make initialization of the download cache lazy
5369zooko@zooko.com**20090708004040
5370 Ignore-this: 3c3714ccc09ae1de811664d52211e143
5371 If you open up a directory containing thousands of files, it currently computes the cache filename and checks for the cache file on disk immediately for each immutble file in that directory.  With this patch, it delays those steps until you try to do something with an immutable file that could use the cache.
5372]
5373[Add tests for CachingDict, _pack_contents, _unpack_contents
5374kevan@isnotajoke.com**20090704034328
5375 Ignore-this: 12f3e989244288c211ba393d3a205111
5376]
5377[Use CachingDict instead of dict in dirnode.py
5378kevan@isnotajoke.com**20090704034301
5379 Ignore-this: 53f12260176a5170b3599eda54f38e98
5380]
5381[Alter Adder + Adder tests to look for 'only-files' instead of 'only_files'
5382kevan@isnotajoke.com**20090720034318
5383 Ignore-this: 65d66133f4db6c082e716864bc273e13
5384]
5385[Add 'only_files' option to the overwrite field in Adder
5386kevan@isnotajoke.com**20090718030010
5387 Ignore-this: 56605f6740f692549acdd9b236ce6443
5388]
5389[Add unit tests for the Adder in dirnode.py
5390kevan@isnotajoke.com**20090718195049
5391 Ignore-this: 93434af3656249962cf9bc6d7ac5bc01
5392]
5393[Add tests for new PUT behavior
5394kevan@isnotajoke.com**20090720034632
5395 Ignore-this: a64a8e8767b4d03d87445104475b045d
5396]
5397[add parser for immutable directory caps: DIR2-CHK, DIR2-LIT, DIR2-CHK-Verifier
5398Brian Warner <warner@lothar.com>**20091104181351
5399 Ignore-this: 854398cc7a75bada57fa97c367b67518
5400]
5401[rename NewDirectoryNode to DirectoryNode, NewDirectoryURI to DirectoryURI
5402Brian Warner <warner@lothar.com>**20090717221549
5403 Ignore-this: 5e6226e8d9fba824bf45f67ea5821e0e
5404]
5405[interfaces: remove spurious line that counted against the figleaf coverage
5406warner@allmydata.com**20080206224126]
5407[rename "get_verifier()" to "get_verify_cap()"
5408zooko@zooko.com**20081208184411
5409 Ignore-this: 3ea4d7a78c802b23f628a37cc643c11a
5410]
5411[test_dirnode.py: convert Deleter to new no-network gridtest
5412warner@lothar.com**20090216232348
5413 Ignore-this: 8041739442ec4db726675e48f9775ae9
5414]
5415[mutable.modify(): after UCWE, publish even if the second invocation of the modifier didn't modify anything. For #551.
5416warner@allmydata.com**20081206044923]
5417[test/benchmark: benchmark the time to pack and unpack dirnodes
5418zooko@zooko.com**20090704224300
5419 Ignore-this: cd8f6a6ded44a3f6f102f9cd0b60ca62
5420 See also the prof_benchmarks() function in this file which will run the benchmarks under profiling.
5421]
5422[Allow tests to pass with -OO by turning some AssertionErrors (the ones that
5423Brian Warner <warner@lothar.com>**20090715064510
5424 Ignore-this: db08d38b720a5260b5d1dc6d6a9878c1
5425 we actually exercise during tests) into more specific exceptions, so they
5426 don't get optimized away. The best rule to follow is probably this: if an
5427 exception is worth testing, then it's part of the API, and AssertionError
5428 should never be part of the API. Closes #749.
5429]
5430[Tolerate unknown URI types in directory structures. Part of #683.
5431Brian Warner <warner@lothar.com>**20090703010749
5432 Ignore-this: afd0e15e2e39d3b87743ec7ccd87054d
5433 
5434 The idea is that future versions of Tahoe will add new URI types that this
5435 version won't recognize, but might store them in directories that we *can*
5436 read. We should handle these "objects from the future" as best we can.
5437 Previous releases of Tahoe would just explode. With this change, we'll
5438 continue to be able to work with everything else in the directory.
5439 
5440 The code change is to wrap anything we don't recognize as an UnknownNode
5441 instance (as opposed to a FileNode or DirectoryNode). Then webapi knows how
5442 to render these (mostly by leaving fields blank), deep-check knows to skip
5443 over them, deep-stats counts them in "count-unknown". You can rename and
5444 delete these things, but you can't add new ones (because we wouldn't know how
5445 to generate a readcap to put into the dirnode's rocap slot, and because this
5446 lets us catch typos better).
5447]
5448[web/directory: t=manifest output=html: make the caps into clickable hrefs
5449warner@allmydata.com**20081007201845]
5450[web/info: don't let an unrecoverable file break the page (show ? instead of a size)
5451warner@allmydata.com**20081107045117]
5452[dirnode.py: dirnode.delete which hits UCWE should not fail with NoSuchChildError. Fixes #550.
5453warner@allmydata.com**20081206040837]
5454[test_dirnode: add an explainError call
5455warner@allmydata.com**20081119220212]
5456[MutableFileNode.modify: pass first_time= and servermap= to the modifier callback
5457warner@allmydata.com**20081206040710]
5458[test_mutable.py: test replacing a file that has one new outlier share present: closes #272
5459warner@allmydata.com**20080514201041]
5460[web/directory.py: really really fix #553. Unfortunately it's tricky to simulate the behavior of a brower's relative-url handling in a unit test.
5461warner@allmydata.com**20081206051412]
5462[web: fix moreinfo link
5463zooko@zooko.com**20081205212939
5464 Ignore-this: 89913601a159437a2c151dd3652e6a94
5465]
5466[web: "More Info" link describes the same file that the "file" link points to, rather than to the file under the same name in this directory
5467zooko@zooko.com**20081205210502
5468 Ignore-this: 5017754e11749b376c7fa66d1acb2a58
5469 It's a subtle but real difference.
5470 Fixes #553 -- "More Info" link should point to a file/dir, not a dir+childname .
5471]
5472[webapi: pass client through constructor arguments, remove IClient, should make it easier to test web renderers in isolation
5473warner@lothar.com**20090220181554
5474 Ignore-this: e7848cd1bee8faf2ce7aaf040b9bf8e3
5475]
5476[webish: make /cap/ equivalent to /uri/, accepting both with the same meanings. Closes #428
5477warner@allmydata.com**20080603213400]
5478[web: make nickname more visible in the welcome page, closes #361
5479warner@allmydata.com**20080603220210]
5480[webish: add an extra newline to JSON output
5481warner@lothar.com**20080915204314]
5482[web: make t=json stats pages use text/plain, instead of leaving it at text/html
5483warner@allmydata.com**20080726002427]
5484[web: add /status/?t=json, with active upload/download ops. Addresses #493.
5485warner@allmydata.com**20080726004110]
5486[web/directory.py: slight shuffle to improve test coverage
5487warner@allmydata.com**20081029045406]
5488[web: test (and fix) PUT DIRURL t=uri, which replaces a directory in-place with some other cap
5489warner@allmydata.com**20081029045446]
5490[webapi: introducer stats: add 'announcement_distinct_hosts' to the t=json form, to show how many distinct hosts are providing e.g. storage services
5491warner@allmydata.com**20081118213015]
5492[rollback the feature of making "ambient upload authority" configurable
5493zooko@zooko.com**20090121024735
5494 Ignore-this: 3fcea1b8179e6278adc360414b527b8b
5495 
5496 This reverses some, but not all, of the changes that were committed in the following set of patches.
5497 
5498 rolling back:
5499 
5500 Sun Jan 18 09:54:30 MST 2009  toby.murray
5501   * add 'web.ambient_upload_authority' as a paramater to tahoe.cfg
5502 
5503     M ./src/allmydata/client.py -1 +3
5504     M ./src/allmydata/test/common.py -7 +9
5505     A ./src/allmydata/test/test_ambient_upload_authority.py
5506     M ./src/allmydata/web/root.py +12
5507     M ./src/allmydata/webish.py -1 +4
5508 Sun Jan 18 09:56:08 MST 2009  zooko@zooko.com
5509   * trivial: whitespace
5510   I ran emacs's "M-x whitespace-cleanup" on the files that Toby's recent patch had touched that had trailing whitespace on some lines.
5511 
5512     M ./src/allmydata/test/test_ambient_upload_authority.py -9 +8
5513     M ./src/allmydata/web/root.py -2 +1
5514     M ./src/allmydata/webish.py -2 +1
5515 Mon Jan 19 14:16:19 MST 2009  zooko@zooko.com
5516   * trivial: remove unused import noticed by pyflakes
5517 
5518     M ./src/allmydata/test/test_ambient_upload_authority.py -1
5519 Mon Jan 19 21:38:35 MST 2009  toby.murray
5520   * doc: describe web.ambient_upload_authority
5521 
5522     M ./docs/configuration.txt +14
5523     M ./docs/frontends/webapi.txt +11
5524 Mon Jan 19 21:38:57 MST 2009  zooko@zooko.com
5525   * doc: add Toby Murray to the CREDITS
5526 
5527     M ./CREDITS +4
5528]
5529[trivial: whitespace
5530zooko@zooko.com**20090118165608
5531 Ignore-this: 8539e7e73e43f459f7b82e84dface95c
5532 I ran emacs's "M-x whitespace-cleanup" on the files that Toby's recent patch had touched that had trailing whitespace on some lines.
5533]
5534[trivial: remove unused import noticed by pyflakes
5535zooko@zooko.com**20090119211619
5536 Ignore-this: 4999f513a5c8d73ed8f79c2b012fea6b
5537]
5538[doc: describe web.ambient_upload_authority
5539toby.murray**20090120043835
5540 Ignore-this: cc1920b2c5d4d587af84c4d251ad0e4b
5541]
5542[add 'web.ambient_upload_authority' as a paramater to tahoe.cfg
5543toby.murray**20090118165430
5544 Ignore-this: 2c6ed484009c03fe9db1bb6eb67500ff
5545]
5546[web/root.py: fix minor typo
5547warner@lothar.com**20080707071816]
5548[web: fix handling of reliability page when Numeric is not available
5549warner@lothar.com**20090217015658
5550 Ignore-this: 9d329182f1b2e5f812e5e7eb5f4cf2ed
5551]
5552[webapi: modify streaming deep-manifest/deep-checker to emit an ERROR: line if they encounter an unrecoverable+untraversable directory. For #590.
5553warner@allmydata.com**20090225051335
5554 Ignore-this: e6bc49368fb0e7ada7cff477fd63ffe6
5555]
5556[make streaming-manifest stop doing work after the HTTP connection is dropped
5557warner@allmydata.com**20090124013908]
5558[test_web: add (disabled) test to see what happens when deep-check encounters an unrecoverable directory. We still need code changes to improve this behavior.
5559warner@lothar.com**20090224214017
5560 Ignore-this: e839f1b0ec40f53fedcd809c2a30d5f9
5561]
5562[test_deepcheck: switch deep-check tests to use no-network too. This cuts the runtime down by about 50%
5563warner@allmydata.com**20090225030457
5564 Ignore-this: b3a98ed18c5752c9016c047e95d42b
5565]
5566[test_deepcheck: convert MutableChecker to no-network GridTest
5567warner@allmydata.com**20090225020010
5568 Ignore-this: eccba7fda129330b642886271a61a573
5569]
5570[dirnode.py: when doing deep-traverse, walk each directory in alphabetical order, to make things like 'manifest' more predictable
5571warner@allmydata.com**20090313065046
5572 Ignore-this: 9a80055a93a6b11853d4e8202bacec14
5573]
5574[expirer: clean up constructor args, add tahoe.cfg controls, use cutoff_date instead of date_cutoff
5575warner@allmydata.com**20090319010009
5576 Ignore-this: 2b6aaa6d5e6ff9fd417f32978b443fd2
5577]
5578[change StorageServer to take nodeid in the constructor, instead of assigning it later, since it's cleaner and because the original problem (Tubs not being ready until later) went away
5579warner@lothar.com**20090218222301
5580 Ignore-this: 740d582f20c93bebf60e21d9a446d3d2
5581]
5582[expirer: change setup, config options, in preparation for adding tahoe.cfg controls
5583warner@allmydata.com**20090319002138
5584 Ignore-this: b23a53e97f2a9fb7a005e9fe40e83fac
5585]
5586[expirer: track mutable-vs-immutable sharecounts and sizes, report them on the web status page for comparison
5587warner@allmydata.com**20090318202504
5588 Ignore-this: 87e809bf5dedef3f0bc8f4a7b90e42d2
5589]
5590[test_storage: solaris doesn't appear to give the same block count as other platforms, so don't assert as much about 'diskbytes' recovered
5591warner@lothar.com**20090307084518
5592 Ignore-this: 55b35c094ce78c50c8ede42062c5ea13
5593]
5594[storage.expirer: exercise the last missing line of webstatus code
5595warner@lothar.com**20090309033828
5596 Ignore-this: fc4aa34734cae32eec1db623ca0b145b
5597]
5598[expirer: tolerate corrupt shares, add them to the state and history for future examination
5599warner@lothar.com**20090309030840
5600 Ignore-this: 5ae7e68471ed700cc68beb408e0f303
5601]
5602[expirer: add mode to expire only-mutable or only-immutable shares
5603warner@lothar.com**20090317065118
5604 Ignore-this: b0b25427e3b1516bdfe293528b8e4a4e
5605]
5606[GC: add date-cutoff -based expiration, add proposed docs
5607warner@lothar.com**20090317051041
5608 Ignore-this: a5c0ecbcc2666eb04f2daa67331d1948
5609]
5610[expirer: make web display a bit more consistent
5611warner@lothar.com**20090307221442
5612 Ignore-this: 7fec9d9bffc0bddeb51c1baa8e7ea020
5613]
5614[web/storage.py: tolerate unknown-future displays, I'm not sure why LeaseCrawler.test_unpredictable_future didn't catch this
5615warner@lothar.com**20090307220243
5616 Ignore-this: 3d4e5baa8cc6d5d26edcea29fda8593d
5617]
5618[dirnode: add 'tahoe'/'linkcrtime' and 'tahoe'/'linkmotime' to take the place of what 'mtime'/'ctime' originally did, and make the 'tahoe' subdict be unwritable through the set_children API
5619zooko@zooko.com**20090411225205
5620 Ignore-this: b48b0812f353891c62f371bedb3e9880
5621 Also add extensive documentation in docs/frontends/webapi.txt about the behaviors of these values.  See ticket #628.
5622]
5623[docs/dirnodes.txt: add notes on dirnode sizes
5624warner@allmydata.com**20080213234045]
5625[docs/dirnodes.txt: rewrite to reflect 0.7.0's RSA-based SDMF dirnodes
5626warner@allmydata.com**20080130011358]
5627[dirnodes.txt: minor edits
5628warner@allmydata.com**20070703201648]
5629[docs: add not to dirnode.txt that it is obsolete
5630zooko@zooko.com**20080108165025]
5631[document our current directory node (dirnode) design
5632warner@allmydata.com**20070703003224]
5633[docs/webapi.txt: update to discuss tahoe.cfg, not BASEDIR/webport
5634warner@lothar.com**20081203010612]
5635[docs/webapi.txt: update helper section to discuss tahoe.cfg
5636warner@lothar.com**20081203010726]
5637[docs: rename wapi.txt to webapi.txt
5638zooko@zooko.com**20090114195348
5639 Ignore-this: 419685f2807714bab4069fbaa3a02c1c
5640 Because Brian argues that the file contains a description of the wui as well as of the wapi, and because the name "webapi.txt" might be more obvious to the untrained eye.
5641]
5642[wui/wapi: change the default port number from 8123 to 3456 to avoid conflict with TorButton
5643zooko@zooko.com**20081125235737
5644 Ignore-this: 47ea30bafd5917a7e1dbc88aa0190f8e
5645 See ticket #536 for details.
5646]
5647[macfuse: another tahoe fuse implementation
5648robk-tahoe@allmydata.com**20080215003510
5649 
5650 This is the result of various experimentation done into using python-fuse
5651 to provide access to tahoe on the mac.  It's rough in quite a few places,
5652 and is really the result of investigation more than a thorough
5653 implemenation of the fuse api.
5654 
5655 upon launch, it looks for the users root_dir by opening ~/.tahoe/node.url
5656 and ~/.tahoe/private/root_dir.cap it then proceeds to cache the directory
5657 structure found by walking the users tahoe drive (safely in the face of
5658 directory loops) into memory and then mounts that filesystem.
5659 
5660 when a file is read, it calls the tahoe node to first download the file
5661 into a cache directory (~/.tahoe/_cache) and then serves up the file
5662 from there.
5663 
5664 when a file is written, a temporary file is allocated within the tmp dir
5665 of the cache, and upon close() (specifically upon release()) the file is
5666 uploaded to the tahoe node, and the new directory entry written.
5667 
5668 note that while the durectory structure is cached into memory only when
5669 the filesystem is mounted, that it is 'write through' i.e. changes made
5670 via fuse are reflected into the underlying tahoe fs, even though changes
5671 made to the tahoe fs otherwise show up only upon restart.
5672 
5673 in addition to opening files for read and write, the mkdir() and rename()
5674 calls are supported.  most other file system operations are not yet
5675 supported.  notably stat() metadata is not currently tracked by tahoe,
5676 and is variably reported by this fs depending on write cache files.
5677 
5678 
5679 also note that this version does not fully support Finder.  access through
5680 normal unix commands such as cat, cp, mv, ls etc works fine, and read
5681 access to file from within finder (including preview images and double-
5682 click to open) work ok.  but copies to the tahoe drive from within finder
5683 may or may not succeed, but will always report an error. This is still
5684 under investigation.
5685 
5686 also note that this does not include any build integration.  the included
5687 _fusemodule.so was built on mac os 10.4 against macfuse 1.3.0, and is
5688 known to not work against 10.5-1.3.1  it's possible it may also contain
5689 dependencies upon parts of macports used to build the python that it was
5690 built against. this will be cleaned up later.
5691 
5692 usage:
5693     python tahoefuse.py /Path/to/choice/of/mountpoint
5694 or optionally
5695     python tahoefuse.py -ovolicon=/Path/to/icon.icns /Path/to/mountpoint
5696 
5697 upon startup, tahoefuse will walk the tahoe directory, then print a
5698 summary of files and folders found, and then daemonise itself. to exit,
5699 either eject the 'drive' (note: 10.5 doesn't show it as a drive, since
5700 it considers fuse to be a connected server instead) or unmount it via
5701 umount /Path/to/mountpoint etc.
5702 
5703 
5704 
5705]
5706[uri.py: get 100% test coverage, fix a few bugs in the process
5707warner@allmydata.com**20080304202745]
5708[docs/helper.txt: explain more about the helper
5709warner@allmydata.com**20080506204901]
5710[architecture.txt: fix some things that have changed a lot in recent releases
5711warner@allmydata.com**20080214021429]
5712[fuse: Reorganize directory tree and modify runtests.py to run against both implementations...
5713nejucomo@gmail.com**20080607051923
5714 
5715 Currently, fuse impl_b does not support a --basedir argument, and always
5716 uses ~/.tahoe, which makes it incompatible with these system tests.
5717 
5718 
5719]
5720[Rename the unittest script for tahoe-fuse.
5721nejucomo@gmail.com**20080119061612]
5722[tahoe_fuse.py: system test: setup: fixed a bug in which the mointpoint was not created before mounting.
5723nejucomo@gmail.com**20080129043913]
5724[contrib: add a note about Armin Rigo's fuse implementation
5725zooko@zooko.com**20080428140544]
5726[fuse_a: Fix the expected path in runtests.py.
5727nejucomo@gmail.com**20080531074202]
5728[fuse_a: Remove unused webport files...
5729nejucomo@gmail.com**20080601020351
5730 
5731 This prevents the third client from failing to start due to a port
5732 collision with the second client.  The first client, which is used for
5733 testing has a random high port written to webport, and thus does not
5734 interfere.
5735]
5736[fuse_a: runtests.py: The current ubuntu python-fuse ignores the -f option and always forks, so this updates runtests to use fusermount for clean shutdown.
5737nejucomo@gmail.com**20080601031605]
5738[tahoe_fuse: system test: Move test summary to end of output.
5739nejucomo@gmail.com**20080130084624]
5740[tahoe_fuse.py: system test: Distinguish between TestFailures and unexpected exceptions during testing (and fix a typo).
5741nejucomo@gmail.com**20080129044228]
5742[tahoe_fuse: system test: Remove some needless comments.
5743nejucomo@gmail.com**20080130085553]
5744[tahoe_fuse: system test: Create a separate directory for each test and pass the cap and local path to each test.  Add two basic sanity tests for empty directories.
5745nejucomo@gmail.com**20080130085754]
5746[tahoe_fuse.py: system test: setup: lexically sort test names, create a TestFailure class, implement an empty directory listing test.
5747nejucomo@gmail.com**20080129044047]
5748[Individual tests run after all the setup layers are in place.
5749nejucomo@gmail.com**20080129042511]
5750[fuse_a: Fix a bug in test cleanup code.
5751nejucomo@gmail.com**20080601020541]
5752[tahoe_fuse.py: system test: Many changes to framework...
5753nejucomo@gmail.com**20080129042719
5754 
5755 The flow control has been de-obfuscated a bit.
5756 
5757 Some output changes.
5758 
5759 The test framework has quite a few race conditions, but it does a reasonable job of setting up and cleaning up.
5760 
5761]
5762[tahoe_fuse: system test: Manage multiple clients for test grid...  System test setup is almost complete.
5763nejucomo@gmail.com**20080121020220
5764 
5765 This is a little convoluted because of the "layer" design, but it appears
5766 to function correctly and do properly ordered cleanup.
5767 
5768 Before system test setup is complete, tahoe_fuse.py needs to be modified
5769 to allow arbitrary client base directories.
5770 
5771]
5772[tahoe_fuse: system test: factor out some cleanup code.
5773nejucomo@gmail.com**20080120235448]
5774[Small log output change.
5775nejucomo@gmail.com**20080121021853]
5776[tahoe_fuse: cmdline args & system test: Allow nonstandard client basedirs to be specified and update the system tests to use this feature...
5777nejucomo@gmail.com**20080121025627
5778 
5779 The commandline option handling of the version of python-fuse I use is arcane.  This is an ugly hack.
5780 
5781]
5782[tahoe_fuse: system test: Add FIXME comments.
5783nejucomo@gmail.com**20080121020619]
5784[tahoe_fuse: system test: Attempt to create a dirnode to place in <basedir>/private/root_dir.cap, but this fails because the network is too small...
5785nejucomo@gmail.com**20080121004747
5786 
5787 This patch also factors out the "polling_operation" pattern.
5788 
5789]
5790[tahoe_fuse: system test: Launch the fuse interface.
5791nejucomo@gmail.com**20080120235551]
5792[tahoe_fuse: system test: Copy the introducer.furl with a possible race condition due to timeout.
5793nejucomo@gmail.com**20080120230944]
5794[A start at adding a system test for tahoe_fuse.  Incomplete...
5795nejucomo@gmail.com**20080120225456]
5796[The start of unit tests for tahoe_fuse.py.
5797nejucomo@gmail.com**20080113015603]
5798[A patch to make tahoe-fuse.py work with 0.7.0 plus a howto README.
5799nejucomo@gmail.com**20080112230639]
5800[User friendly error messages, and updates to use new URI formats.
5801nejucomo@gmail.com**20080108182121
5802 
5803]
5804[tahoe-fuse: print out helpful error messages if the caller didn't give the right context
5805zooko@zooko.com**20080108164035]
5806[Use "my_vdrive.uri" for the root.  The old "fuse-bookmarks.uri" served exactly the same purpose.
5807nejucomo@gmail.com**20071120200001]
5808[docs: rename frontends/webapi.txt to frontends/wapi.txt
5809zooko@zooko.com**20090114025143
5810 Ignore-this: c35acd8dc7c1106ca31104b6db43e5ad
5811 rename CLI.txt to frontends/CLI.txt
5812 change a few mentions of "webapi" to "wapi"
5813 fixes #582
5814]
5815[docs/using.html: update CLI section to reflect the new alias: scheme. Closes #431
5816warner@allmydata.com**20080603010016]
5817[docs: change example capability
5818zooko@zooko.com**20080219213419]
5819[docs/logging.txt: explain tahoe/foolscap logging. Addresses #239.
5820warner@allmydata.com**20080904002531]
5821[webapi: serve the /static URL tree from /public_html (configurable)
5822warner@allmydata.com**20081029223431]
5823[fix webish unit tests by making node.url file optional
5824robk-tahoe@allmydata.com**20080108183614]
5825[test_web.py: localdir=/localfile= is going away, so remove the tests that exercise it
5826warner@allmydata.com**20080519193209]
5827[fix small bug in unit tests which caused spurious failures on Windows
5828zooko@zooko.com**20070816211441]
5829[test_web.py: survive localdir/localfile= names with spaces. Should close #223
5830warner@allmydata.com**20071212014704]
5831[test_web: remove leftover import to hush pyflakes
5832warner@allmydata.com**20080519212839]
5833[NEWS: update with all user-visible changes since the last update
5834warner@allmydata.com**20081030213604]
5835[docs: move webapi/ftp/sftp into a new frontends/ directory
5836warner@allmydata.com**20081105233050]
5837[#531: implement an SFTP frontend. Mostly works, still lots of debug messages. Still needs tests and auth-by-pubkey in accounts.file
5838warner@allmydata.com**20081105000022]
5839[doc: use the term "filesystem" rather than "virtual drive" in CLI.txt
5840zooko@zooko.com**20081224211614
5841 Ignore-this: c9541955201671c1a3a8c6ca7be4e7d
5842]
5843[webapi: add verifycap (spelled 'verify_url') to the t=json output on files and directories. Closes #559.
5844warner@allmydata.com**20090204012248
5845 Ignore-this: 7da755304f6708b4973e4a7c1bcf8a43
5846]
5847[web t=json: add 'mutable' key to the information dict
5848warner@allmydata.com**20080520224049]
5849[docs: fix example JSON in webapi.txt to be legal JSON.  ;-)
5850zooko@zooko.com**20080301003925]
5851[web: fix JSON output for mutable files
5852warner@allmydata.com**20080520221419]
5853[tahoe_ls.py: add comment about error cases to improve
5854warner@lothar.com**20090317051206
5855 Ignore-this: 7c678b92a55b2f7c6f0d96fb6ece74ed
5856]
5857[tahoe_ls: CLI command should return rc=0, not None
5858warner@allmydata.com**20090203030720
5859 Ignore-this: 18993c782cf84edc01e4accb6f8bf31a
5860]
5861[cli scripts: remove the for-educational-purposes standalone clauses. Closes #261.
5862warner@lothar.com**20080116060851]
5863[trailing-whitespace eradication, no functional changes
5864warner@allmydata.com**20071101222854]
5865[trailing-whitespace eradication, no functional changes
5866warner@allmydata.com**20071101222858]
5867[trailing-whitespace eradication, no functional changes
5868warner@allmydata.com**20071101222912]
5869[docs: webapi.txt edits to explain a few things better, adjust indentation, editing
5870zooko@zooko.com**20090411224828
5871 Ignore-this: 3a8a5559c7f0c8a585a4c0b5a2c80451
5872]
5873[use 522-bit RSA keys in all unit tests (except one)
5874Brian Warner <warner@lothar.com>**20090629223124
5875 Ignore-this: 7a4c3685683ff9da5ceb2d8cb7b19b7
5876 
5877 This reduces the total test time on my laptop from 400s to 283s.
5878 * src/allmydata/test/test_system.py (SystemTest.test_mutable._test_debug):
5879   Remove assertion about container_size/data_size, this changes with keysize
5880   and was too variable anyways.
5881 * src/allmydata/mutable/filenode.py (MutableFileNode.create): add keysize=
5882 * src/allmydata/dirnode.py (NewDirectoryNode.create): same
5883 * src/allmydata/client.py (Client.DEFAULT_MUTABLE_KEYSIZE): add default,
5884   this overrides the one in MutableFileNode
5885]
5886[test_system: split off checker tests to test_deepcheck.py, this file is too big
5887warner@lothar.com**20090218214234
5888 Ignore-this: 82bf8db81dfbc98224bbf694054a8761
5889]
5890[test_system: make 'where' strings more helpful, to track down test failures better
5891warner@allmydata.com**20081119002950]
5892[test_system: oops, re-enable some tests that got bypassed
5893warner@lothar.com**20080910060245]
5894[oops, update tests to match 'tahoe stats' change
5895warner@allmydata.com**20081119023259]
5896[#509: test_system.py: add test for streamed-manifest
5897warner@allmydata.com**20090123223247]
5898[#509: remove non-streaming 'tahoe manifest' CLI form
5899warner@allmydata.com**20090123230002]
5900[#509 CLI: add 'tahoe manifest --stream'
5901warner@allmydata.com**20090123223321]
5902[cli: factor out slow-http-operation to a separate module
5903warner@allmydata.com**20081119011113]
5904[test_system: rearrange DeepCheckWebGood to make it easier to add CLI tests
5905warner@allmydata.com**20090123221306]
5906[test_system.py: fix new 'tahoe manifest' tests to not break on windows, by providing --node-directory instead of --node-url
5907warner@allmydata.com**20081113212748]
5908[cli: tahoe stats/manifest: change --verbose to --raw, since I want -v for --verify for check/deep-check/repair
5909warner@allmydata.com**20081119003608]
5910[cli: add tests for 'tahoe stats --verbose'
5911warner@allmydata.com**20081118041114]
5912[cli: add --verbose to 'tahoe manifest', to show the raw JSON data
5913warner@allmydata.com**20081118040219]
5914[create_node_from_uri: take both writecap+readcap, move logic out of dirnode.py
5915Brian Warner <warner@lothar.com>**20090702222537
5916 Ignore-this: 93051498076e90d3f1dc85161ce8247a
5917]
5918[test_web: add get_permuted_peers, to unbreak recent checker_results change
5919warner@allmydata.com**20081205081210]
5920[dirnode deep-traversal: remove use of Limiter, stick with strict depth-first-traversal, to reduce memory usage during very large (300k+ dirnode) traversals
5921warner@allmydata.com**20090109014116]
5922[dirnode.build_manifest: include node.list in the limiter, that's the most important thing to slow down
5923warner@allmydata.com**20081007201929]
5924[dirnode.py: prepare to preserve both rwcap+rocap when copying
5925Brian Warner <warner@lothar.com>**20090702211254
5926 Ignore-this: f128c02da32f86d7e39527a35dfc2e02
5927 
5928 This will make it easier to tolerate unknown nodes safely.
5929]
5930[Add tests for #939
5931Kevan Carstensen <kevan@isnotajoke.com>**20100212062137
5932 Ignore-this: 5459e8c64ba76cca70aa720e68549637
5933]
5934[scripts/common: fix alias handling on windows again, emit slightly nicer error message in response to an unknown alias
5935warner@allmydata.com**20090225042136
5936 Ignore-this: 76df800d131aed6701b5c7408105b134
5937]
5938[test_cli: exercise the recent tolerate-'c:\dir\file.txt' fix in scripts/common, recorded in a separate match to make it easier to merge the fix to prod
5939warner@allmydata.com**20090224235620
5940 Ignore-this: 2cae196dd4ccb578b2abae085376e0d7
5941]
5942[scripts/common: on windows, tolerate paths like 'c:\dir\file.txt', by treating single-letter aliases on windows/cygwin as non-aliases
5943warner@allmydata.com**20090224235522
5944 Ignore-this: 96d37644b7f81ac768ff4a1d1915eb46
5945]
5946['tahoe stats': tolerate empty directories. Closes #693.
5947Brian Warner <warner@lothar.com>**20090715075109
5948 Ignore-this: a713325132e05d5d122111f978fe5e14
5949]
5950[cli: 'tahoe stats': add abbreviated size to the histogram. Not sure this actually improves things.
5951warner@allmydata.com**20081119021736]
5952[test_cli: validate non-HTML error response of 'tahoe get' on an unrecoverable file
5953warner@lothar.com**20090304041146]
5954[Add tests for tahoe mv behavior
5955kevan@isnotajoke.com**20090720034609
5956 Ignore-this: 9f20cc5c19ded743c4b129cdf16e04d9
5957]
5958[test_cli.py: assert that 'ls' on an unrecoverable file now gives a better error message
5959warner@lothar.com**20090307110815
5960 Ignore-this: 18e9758e4d0ca7faeaf5bd481c2d72ff
5961]
5962[web/common: split out exception-to-explanation+code mapping to a separate humanize_failure() function, so it can be used by other code. Add explanation for mutable UnrecoverableFileError.
5963warner@lothar.com**20090307105408
5964 Ignore-this: 92f326804ba73bb446c5df5992b7d72e
5965]
5966[web/common.py: use 'Accept:' header to control HTML-vs-text/plain traceback renderings
5967warner@lothar.com**20090304035457]
5968[web: full patch for HTML-vs-plaintext traceback renderings, improve test coverage of exception rendering
5969warner@lothar.com**20090304035630]
5970[storage: add a lease-checker-and-expirer crawler, plus web status page.
5971warner@allmydata.com**20090307044517
5972 Ignore-this: 4355224f89b959c6f1a256a7e6c88c3b
5973 
5974 This walks slowly through all shares, examining their leases, deciding which
5975 are still valid and which have expired. Once enabled, it will then remove the
5976 expired leases, and delete shares which no longer have any valid leases. Note
5977 that there is not yet a tahoe.cfg option to enable lease-deletion: the
5978 current code is read-only. A subsequent patch will add a tahoe.cfg knob to
5979 control this, as well as docs. Some other minor items included in this patch:
5980 
5981  tahoe debug dump-share has a new --leases-only flag
5982  storage sharefile/leaseinfo code is cleaned up
5983  storage web status page (/storage) has more info, more tests coverage
5984  space-left measurement on OS-X should be more accurate (it was off by 2048x)
5985   (use stat .f_frsize instead of f_bsize)
5986]
5987['tahoe debug dump-share': add --offsets, to show section offsets
5988warner@allmydata.com**20080812214656]
5989[storage.py: announce a maximum-immutable-share-size based upon a 'df' of the disk. Fixes #569, and this should be the last requirement for #346 (remove 12GiB filesize limit)
5990warner@allmydata.com**20090110013736]
5991[storage: also report space-free-for-root and space-free-for-nonroot, since that helps users understand the space-left-for-tahoe number better
5992warner@lothar.com**20090221032856
5993 Ignore-this: 9fdf0475f758acd98b73026677170b45
5994]
5995[stop using RuntimeError in unit tests, for #639
5996warner@lothar.com**20090222232722
5997 Ignore-this: 475ce0c0dcd7a1f5ed83ef460312efea
5998]
5999[test_util.py: fix problems
6000warner@allmydata.com**20070406233622]
6001[test_util.py: sigh, one last minor python-2.5 issue
6002warner@allmydata.com**20070407002125]
6003[test_util.py: fix another minor python-2.5 issue
6004warner@allmydata.com**20070407001226]
6005[crawler: add ETA to get_progress()
6006warner@allmydata.com**20090227014248
6007 Ignore-this: 27ae76c0530b83323209be70df3d8a4b
6008]
6009[crawler: load state from the pickle in init, rather than waiting until startService, so get_state() can be called early
6010warner@lothar.com**20090221035720
6011 Ignore-this: ecd128a5f4364c0daf4b72d791340b66
6012]
6013[crawler: fix performance problems: only save state once per timeslice (not after every bucket), don't start the crawler until 5 minutes after node startup
6014warner@lothar.com**20090221205649
6015 Ignore-this: e6551569982bd31d19779ff15c2d6f58
6016]
6017[crawler: tolerate low-resolution system clocks (i.e. windows)
6018warner@lothar.com**20090221061533
6019 Ignore-this: 57286a3abcaf44f6d1a78c3c1ad547a5
6020]
6021[storage: add bucket-counting share crawler, add its output (number of files+directories maintained by a storage server) and status to the webapi /storage page
6022warner@lothar.com**20090221030408
6023 Ignore-this: 28761c5e076648026bc5f518506db65c
6024]
6025[trivial: "M-x whitespace-cleanup", and also remove an unused variable
6026zooko@zooko.com**20081231214233
6027 Ignore-this: 54c33c205aa88de8655e4232d07f083e
6028]
6029[crawler: provide for one-shot crawlers, which stop after their first full cycle, for share-upgraders and database-populaters
6030warner@lothar.com**20090220211911
6031 Ignore-this: fcdf72c5ffcafa374d376388be6fa5c5
6032]
6033[web/storage: make sure we can handle platforms without os.statvfs too
6034warner@lothar.com**20090220220353
6035 Ignore-this: 79d4cb8482a8543b9759dc949c86c587
6036]
6037[web: add Storage status page, improve tests
6038warner@lothar.com**20090220202926
6039 Ignore-this: e34d5270dcf0237fe72f573f717c7a4
6040]
6041[test_storage: fix pyflakes warnings
6042warner@allmydata.com**20080115032648]
6043[storage: rename the latency key names so they sort properly
6044warner@lothar.com**20080712045102]
6045[add 1%,10% percentiles to the storage server latency output
6046warner@lothar.com**20080712043436]
6047[more #514 log-webop status/cancel: add handle-expiration, test coverage
6048warner@lothar.com**20081022051354]
6049[#514: improve test coverage
6050warner@lothar.com**20081022005256]
6051[storage: include reserved_space in stats
6052warner@lothar.com**20090220202920
6053 Ignore-this: b5b480fe0abad0148ecad0c1fb47ecae
6054]
6055[crawler: add get_progress, clean up get_state
6056warner@lothar.com**20090221002743
6057 Ignore-this: 9bea69f154c75b31a53425a8ea67789b
6058]
6059[crawler: modify API to support upcoming bucket-counting crawler
6060warner@lothar.com**20090220013142
6061 Ignore-this: 808f8382837b13082f8b245db2ebee06
6062]
6063[storage: move si_b2a/si_a2b/storage_index_to_dir out of server.py and into common.py
6064warner@lothar.com**20090221030309
6065 Ignore-this: 645056428ab797f0b542831c82bf192a
6066]
6067[crawler: use fileutil.move_info_place in preference to our own version
6068warner@lothar.com**20090219051342
6069 Ignore-this: ee4e46f3de965610503ba36b28184db9
6070]
6071[crawler: fix problems on windows and our slow cygwin slave
6072warner@lothar.com**20090219042431
6073 Ignore-this: 8019cb0da79ba00c536183a6f57b4cab
6074]
6075[#633: first version of a rate-limited interruptable share-crawler
6076warner@lothar.com**20090219034633
6077 Ignore-this: 5d2d30c743e3b096a8e775d5a9b33601
6078]
6079[break storage.py into smaller pieces in storage/*.py . No behavioral changes.
6080warner@lothar.com**20090218204655
6081 Ignore-this: 312d408d1cacc5a764d791b53ebf8f91
6082]
6083[fix a few unused imports and suchlike, discovered by pyflakes
6084zooko@zooko.com**20080213133808]
6085[helper: add SI to logged progress messages
6086warner@allmydata.com**20080415022653]
6087[storage.py: leave the storage/shares/incoming/ directory in place when the bucket is closed
6088warner@allmydata.com**20080626180757]
6089[#538: add remote_get_version() to four main Referenceable objects: Introducer Service, Storage Server, Helper, CHK Upload Helper. Remove unused storage-server get_versions().
6090warner@allmydata.com**20081121234352]
6091[storage.py: remove unused import
6092warner@allmydata.com**20080610200544]
6093[storage: make storage servers declare oldest supported version == 1.0, and storage clients declare oldest supported version == 1.0
6094zooko@zooko.com**20080730225107
6095 See comments in patch for intended semantics.
6096]
6097[storage servers announce that they will support clients as old as v0.8.0
6098zooko@zooko.com**20080313161011
6099 Not that anyone pays attention to what storage servers claim about what versions they will support.
6100]
6101[doc: remove notes to self that I accidentally included in a recent patch
6102zooko@zooko.com**20090102041457
6103 Ignore-this: d0039512dbde09811fdec48a2e00dc4
6104]
6105[trivial: a few improvements to in-line doc and code, and renaming of test/test_immutable_checker.py to test/test_immutable.py
6106zooko@zooko.com**20090102224941
6107 Ignore-this: 27b97a06c3edad1821f43876b4350f3
6108 That file currently tests checker and verifier and repairer, and will soon also test downloader.
6109]
6110[trivial: another place where I accidentally committed a note-to-self about the lease fields in the server-side share file
6111zooko@zooko.com**20090103172941
6112 Ignore-this: c23c7095ffccdf5aa033ed434b50582b
6113]
6114[storage.py : replace 4294967295 with 2**32-1: python does constant folding, I measured this statement as taking 50ns, versus the 400ns for the call to min(), or the 9us required for the 'assert not os.path.exists' syscall
6115warner@allmydata.com**20090110015222]
6116[storage.py: explain what this large and hard-to-recognize 4294967295 number is
6117warner@allmydata.com**20090106195721]
6118[immutable: fix the writing of share data size into share file in case the share file is used by a < v1.3.0 storage server
6119zooko@zooko.com**20090106182404
6120 Ignore-this: 7d6025aba05fe8140bb712e71e89f1ba
6121 Brian noticed that the constant was wrong, and in fixing that I noticed that we should be saturating instead of modding.
6122 This code would never matter unless a server downgraded or a share migrated from Tahoe >= v1.3.0 to Tahoe < v1.3.0.  Even in that case, this bug would never matter unless the share size were exactly 4,294,967,296 bytes long.
6123 Brian, for good reason, wanted this to be spelled "2**32" instead of "4294967296", but I couldn't stand to see a couple of more Python bytecodes interpreted in the middle of a core, frequent operation on the server like immutable share creation.
6124 
6125]
6126[hush pyflakes by removing unused imports
6127warner@allmydata.com**20090112214120]
6128[storage: make add-lease work, change default ownernum=1 since 0 is reserved to mean 'no lease here'
6129warner@allmydata.com**20090211053938
6130 Ignore-this: 9437ec1529c34351f2725df37e0859c
6131]
6132[add --add-lease to 'tahoe check', 'tahoe deep-check', and webapi.
6133warner@lothar.com**20090218013243
6134 Ignore-this: 176b2006cef5041adcb592ee83e084dd
6135]
6136[test_dirnode.py: oops, missed a Monitor(), unbreak tests
6137warner@lothar.com**20081022085054]
6138[provisioning/reliability: add tests, hush pyflakes, remove dead code, fix web links
6139warner@lothar.com**20090215222451
6140 Ignore-this: 7854df3e0130d9388f06efd4c797262f
6141]
6142[build a 'reliability' web page, with a simulation of file decay and repair over time
6143warner@lothar.com**20090213234234
6144 Ignore-this: 9e9623eaac7b0637bbd0071f082bd345
6145]
6146[test_upload: rewrite in terms of no-network GridTestMixin, improve no_network.py as necessary
6147warner@lothar.com**20090216234457
6148 Ignore-this: 80a341d5aa3036d24de98e267499d70d
6149]
6150[test_web.Grid: change the CHECK() function to make it easier to test t= values with hyphens in them
6151warner@lothar.com**20090217050034
6152 Ignore-this: 410c08735347c2057df52f6716520228
6153]
6154[test_web: improve checker-results coverage with a no-network -based test, enhance no-network harness to assist, fix some bugs in web/check_results.py that were exposed
6155warner@lothar.com**20090217041242
6156 Ignore-this: fe54bb66a9ae073c002a7af51cd1e18
6157]
6158[test_download: rewrite in terms of no-network GridTestMixin, improve no_network.py as necessary
6159warner@lothar.com**20090216233658
6160 Ignore-this: ec2febafd2403830519120fb3f3ca04e
6161]
6162[test_download: test both mutable and immutable pre-generated shares
6163warner@lothar.com**20081203003007]
6164[test_download.py: added 'known-answer-tests', to make sure current code can download a file that was created by earlier code
6165warner@lothar.com**20081203002208]
6166[tests: fix no_network framework to work with upload/download and checker
6167warner@lothar.com**20090216231947
6168 Ignore-this: 74b4dbd66b8384ae7c7544969fe4f744
6169]
6170[test/no_network: new test harness, like system-test but doesn't use the network so it's faster
6171warner@lothar.com**20090216205844
6172 Ignore-this: 31678f7bdef30b0216fd657fc6145534
6173]
6174[mutable: move recent operation history management code (MutableWatcher) into history.py, have History provide stats
6175warner@allmydata.com**20090114233620]
6176[mutable stats: track mutable bytes published too
6177warner@allmydata.com**20080430012005]
6178[web/statistics: fix typo that make immutable-download stats missing
6179warner@allmydata.com**20080415182004]
6180[mutable WIP: publish status doesn't know its size early enough to update the stats_provider
6181warner@allmydata.com**20080417005517]
6182[test_mutable: update notify_publish() to match new signature
6183warner@allmydata.com**20080430012457]
6184[mutable/checker: announce the mapupdate op on the 'recent uploads+downloads' page
6185warner@lothar.com**20081023230319]
6186[upload: move upload history into History object
6187warner@allmydata.com**20090114224106]
6188[immutable/download.py move recent-downloads history out of Downloader and into a separate class. upload/etc will follow soon.
6189warner@allmydata.com**20090114221424]
6190[webapi #590: add streaming deep-check. Still need a CLI tool to use it.
6191warner@lothar.com**20090217053553
6192 Ignore-this: a0edd3d2a531c48a64d8397f7e4b208c
6193]
6194[test_web: improve test coverage of web.common utility code
6195warner@allmydata.com**20080520222146]
6196[remove unimplemented and skipped test for feature that we don't plan to implement any time soon (XML-RPC interface)
6197zooko@zooko.com**20071213020605]
6198[more information SkipTest for XMLRPC
6199zooko@zooko.com**20071004180746]
6200[#590: add webish t=stream-manifest
6201warner@allmydata.com**20090123040136]
6202[fileutil: add move_into_place(), to perform the standard unix trick of atomically replacing a file, with a fallback for windows
6203warner@lothar.com**20090219051310
6204 Ignore-this: c1d35e8ca88fcb223ea194513611c511
6205]
6206[Implement more coherent behavior when copying with dircaps/filecaps (closes #761). Patch by Kevan Carstensen.
6207"Brian Warner <warner@lothar.com>"**20091130211009]
6208[test_cli.py: modify to use the new 'no-network' gridtest instead of SystemTestMixin, which speeds it up from 73s to 43s on my system
6209warner@lothar.com**20090216232005
6210 Ignore-this: ec6d010c9182aa72049d1fb894cf890e
6211]
6212[CLI: check for pre-existing aliases in 'tahoe create-alias' and 'tahoe add-alias'
6213warner@lothar.com**20081203022022]
6214[CLI: rework webopen, and moreover its tests w.r.t. path handling
6215robk-tahoe@allmydata.com**20080924164523
6216 
6217 in the recent reconciliation of webopen patches, I wound up adjusting
6218 webopen to 'pass through' the state of the trailing slash on the given
6219 argument to the resultant url passed to the browser.  this change
6220 removes the requirement that arguments must be directories, and allows
6221 webopen to be used with files.  it also broke the tests that assumed
6222 that webopen would always normalise the url to have a trailing slash.
6223 
6224 in fixing the tests, I realised that, IMHO, there's something deeply
6225 awry with the way tahoe handles paths; specifically in the combination
6226 of '/' being the name of the root path within an alias, but a leading
6227 slash on paths, e.g. 'alias:/path', is catagorically incorrect. i.e.
6228  'tahoe:' == 'tahoe:/' == '/'
6229 but 'tahoe:/foo' is an invalid path, and must be 'tahoe:foo'
6230 
6231 I wound up making the internals of webopen simply spot a 'path' of
6232 '/' and smash it to '', which 'fixes' webopen to match the behaviour
6233 of tahoe's path handling elsewhere, but that special case sort of
6234 points to the weirdness.
6235 
6236 (fwiw, I personally found the fact that the leading / in a path was
6237 disallowed to be weird - I'm just used to seeing paths qualified by
6238 the leading / I guess - so in a debate about normalising path handling
6239 I'd vote to include the /)
6240 
6241]
6242[CLI: reconcile webopen changes
6243robk-tahoe@allmydata.com**20080924152002
6244 
6245 I think this is largely attributable to a cleanup patch I'd made
6246 which never got committed upstream somehow, but at any rate various
6247 conflicting changes to webopen had been made. This cleans up the
6248 conflicts therein, and hopefully brings 'tahoe webopen' in line with
6249 other cli commands.
6250]
6251[cli: cleanup webopen command
6252robk-tahoe@allmydata.com**20080618201940
6253 
6254 moved the body of webopen out of cli.py into tahoe_webopen.py
6255 
6256 made its invocation consistent with the other cli commands, most
6257 notably replacing its 'vdrive path' with the same alias parsing,
6258 allowing usage such as 'tahoe webopen private:Pictures/xti'
6259]
6260[test_cli.Backup: insert some stalls to make sure two successive backups get distinct timestamps, avoiding intermittent failures
6261warner@allmydata.com**20090211023709
6262 Ignore-this: a146380e9adf94c2d301b59e4d23f02
6263]
6264[test_cli.backup: oops, fix test to work even when sqlite is unavailable
6265warner@allmydata.com**20090206041042
6266 Ignore-this: 8a550049c8eb27c34ab2440263e07593
6267]
6268[#619: make 'tahoe backup' complain and refuse to run if sqlite is unavailable and --no-backupdb is not passed
6269warner@allmydata.com**20090211004910
6270 Ignore-this: 46ca8be19011b0ec11e7a10cb2556386
6271]
6272[test_cli.Backup: capture stderr when sqlite is unavailable
6273warner@lothar.com**20090207211440
6274 Ignore-this: 4978b1a149e32bd31e66d5bc4269bc55
6275]
6276[test_cli: improve test coverage slightly
6277warner@lothar.com**20090216030451
6278 Ignore-this: e01ccc6a6fb44aaa4fb14fe8669e2065
6279]
6280[test for bug #534, unicode filenames
6281francois@ctrlaltdel.ch**20081113111951
6282 
6283 This test assure that uploading a file whose name contains unicode character
6284 doesn't prevent further uploads in the same directory.
6285]
6286[tahoe_cp.py: return 0 for success, instead of None
6287warner@allmydata.com**20090312205345
6288 Ignore-this: 808f6d8617f8c4e7fde455e6c7639fab
6289]
6290[tahoe_cp.py: improve error reporting slightly: don't json-interpret HTTP errors, pass through tahoe webapi error messages
6291warner@lothar.com**20090307114051
6292 Ignore-this: a8beccb67adb082a92509d439b27d68e
6293]
6294[tahoe_backup.py: display warnings on errors instead of stopping the whole backup. Fix #729.
6295francois@ctrlaltdel.ch**20100120094249
6296 Ignore-this: 7006ea4b0910b6d29af6ab4a3997a8f9
6297 
6298 This patch displays a warning to the user in two cases:
6299   
6300   1. When special files like symlinks, fifos, devices, etc. are found in the
6301      local source.
6302   
6303   2. If files or directories are not readables by the user running the 'tahoe
6304      backup' command.
6305 
6306 In verbose mode, the number of skipped files and directories is printed at the
6307 end of the backup.
6308 
6309 Exit status returned by 'tahoe backup':
6310 
6311   - 0 everything went fine
6312   - 1 the backup failed
6313   - 2 files were skipped during the backup
6314 
6315]
6316[Added --exclude, --exclude-from and --exclude-vcs options to backup command.
6317Alberto Berti <alberto@metapensiero.it>**20090222170829
6318 Ignore-this: 4912890229cd54a2f61f14f06bc4afcc
6319 
6320 It is still impossible to specify absolute exclusion path, only
6321 relative. I must check with tar or rsync how they allow them to be
6322 specified.
6323]
6324[Added tests for the --exclude* options of backup command.
6325Alberto Berti <alberto@metapensiero.it>**20090222165106
6326 Ignore-this: f1b931cf2e7929ce47b737c022bca707
6327]
6328[CLI #590: convert 'tahoe deep-check' to streaming form, improve display, add tests
6329warner@lothar.com**20090217231511
6330 Ignore-this: 6d88eb94b1c877eacc8c5ca7d0aac776
6331]
6332[test_cli.py: remove unused imports
6333warner@allmydata.com**20081007004204]
6334[cli: add 'tahoe check' and 'tahoe deep-check' commands, with primitive reporting code
6335warner@allmydata.com**20081119011210]
6336[deep-check-and-repair: improve results and their HTML representation
6337warner@allmydata.com**20090113005619]
6338[webapi deep-check: show the root as <root>, rather than an empty path string
6339warner@lothar.com**20081023230359]
6340[immutable repairer
6341zooko@zooko.com**20090112170022
6342 Ignore-this: f17cb07b15a554b31fc5203cf4f64d81
6343 This implements an immutable repairer by marrying a CiphertextDownloader to a CHKUploader.  It extends the IDownloadTarget interface so that the downloader can provide some metadata that the uploader requires.
6344 The processing is incremental -- it uploads the first segments before it finishes downloading the whole file.  This is necessary so that you can repair large files without running out of RAM or using a temporary file on the repairer.
6345 It requires only a verifycap, not a readcap.  That is: it doesn't need or use the decryption key, only the integrity check codes.
6346 There are several tests marked TODO and several instances of XXX in the source code.  I intend to open tickets to document further improvements to functionality and testing, but the current version is probably good enough for Tahoe-1.3.0.
6347]
6348[immutable: refactor uploader to do just encoding-and-uploading, not encryption
6349zooko@zooko.com**20090107034822
6350 Ignore-this: 681f3ad6827a93f1431d6e3f818840a9
6351 This makes Uploader take an EncryptedUploadable object instead of an Uploadable object.  I also changed it to return a verify cap instead of a tuple of the bits of data that one finds in a verify cap.
6352 This will facilitate hooking together an Uploader and a Downloader to make a Repairer.
6353 Also move offloaded.py into src/allmydata/immutable/.
6354]
6355[upload: fix up some log messages
6356warner@allmydata.com**20080301020045]
6357[upload.py: the 'skipping encryption' message was emitted exactly backwards
6358warner@allmydata.com**20080129003838]
6359[immutable: add a monitor API to CiphertextDownloader with which to tell it to stop its work
6360zooko@zooko.com**20090108204215
6361 Ignore-this: f96fc150fa68fc2cec46c943171a5d48
6362]
6363[naming: Rename a few things which I touched or changed in the recent patch to download-without-decrypting.
6364zooko@zooko.com**20090108181307
6365 Ignore-this: 495ce8d8854c5db5a09b35b856809fba
6366 Rename "downloadable" to "target".
6367 Rename "u" to "v" in FileDownloader.__init__().
6368 Rename "_uri" to "_verifycap" in FileDownloader.
6369 Rename "_downloadable" to "_target" in FileDownloader.
6370 Rename "FileDownloader" to "CiphertextDownloader".
6371]
6372[immutable: refactor download to do only download-and-decode, not decryption
6373zooko@zooko.com**20090108175349
6374 Ignore-this: 1e4f26f6390a67aa5714650017c4dca1
6375 FileDownloader takes a verify cap and produces ciphertext, instead of taking a read cap and producing plaintext.
6376 FileDownloader does all integrity checking including the mandatory ciphertext hash tree and the optional ciphertext flat hash, rather than expecting its target to do some of that checking.
6377 Rename immutable.download.Output to immutable.download.DecryptingOutput. An instance of DecryptingOutput can be passed to FileDownloader to use as the latter's target.  Text pushed to the DecryptingOutput is decrypted and then pushed to *its* target.
6378 DecryptingOutput satisfies the IConsumer interface, and if its target also satisfies IConsumer, then it forwards and pause/unpause signals to its producer (which is the FileDownloader).
6379 This patch also changes some logging code to use the new logging mixin class.
6380 Check integrity of a segment and decrypt the segment one block-sized buffer at a time instead of copying the buffers together into one segment-sized buffer (reduces peak memory usage, I think, and is probably a tad faster/less CPU, depending on your encoding parameters).
6381 Refactor FileDownloader so that processing of segments and of tail-segment share as much code is possible.
6382 FileDownloader and FileNode take caps as instances of URI (Python objects), not as strings.
6383]
6384[immutable download: remove dead LiteralDownloader, now that we use filenodes for download
6385warner@allmydata.com**20080716233147]
6386[download.py: set up self._paused before registering the producer, since they might call pauseProducing right away
6387warner@lothar.com**20080728215731]
6388[util: log: allow empty msgs (because downloader is using the "format" alternative with no "msg" argument)
6389zooko@zooko.com**20090107175411
6390 Ignore-this: 832c333bf027a30a2fcf96e462297ac5
6391]
6392[immutable: define a new interface IImmutableFileURI and declare that CHKFileURI and LiteralFileURI provide it
6393zooko@zooko.com**20090107182451
6394 Ignore-this: 12c256a0d20655cd73739d45fff0d4d8
6395]
6396[hush pyflakes
6397warner@allmydata.com**20071219003722]
6398[immutable: ValidatedExtendedURIProxy computes and stores the tail data size as a convenience to its caller.
6399zooko@zooko.com**20090108164139
6400 Ignore-this: 75c561d73b17418775faafa60fbbd45b
6401 The "tail data size" is how many of the bytes of the tail segment are data (as opposed to padding).
6402]
6403[immutable: Make more parts of download use logging mixins and know what their "parent msg id" is.
6404zooko@zooko.com**20090108172530
6405 Ignore-this: a4296b5f9b75933d644fd222e1fba079
6406]
6407[trivial: fix a bunch of pyflakes complaints
6408zooko@zooko.com**20090106140054
6409 Ignore-this: 9a515a237248a148bcf8db68f70566d4
6410]
6411[setup: we require pywin32 if building on Windows (plus some formatting and comment fixes)
6412zooko@zooko.com**20081205231911
6413 Ignore-this: c1d1966cfe458a6380bfd5dce09010ff
6414]
6415[fix build breakage caused by auto_deps setuptools stuff
6416robk-tahoe@allmydata.com**20080123013255
6417 
6418 zooko recently added a runtime check, via setuptools, that specific versions of various
6419 packages were reported as available through setuptools at runtime.
6420 
6421 however exe and app builds run with collected egg contents, not linked against entire
6422 eggs, i.e. the code is transcluded into a single library.zip
6423 
6424 thus setuptools reports that those specific version cannot be reported as available,
6425 though they are in fact available built into the library
6426 
6427 this disables that runtime check if the app is running 'frozen'
6428]
6429[setup: require setuptools >= 0.6c7 to run
6430zooko@zooko.com**20081121043611
6431 Ignore-this: e92e07c7e8edbaadcd44db7e8f4a028
6432]
6433[setup: we require setuptools > 0.6a9 in order to parse requirements that have a dot in them such as "zope.interface"
6434zooko@zooko.com**20081120151503
6435 Ignore-this: a6304de8f1f44defc50438d72a13e58f
6436 In the near future we might start actually relying on setuptools's pkg_resources's "require()" function to make modules importable, so we can't just skip zope.interface.
6437]
6438[setup: reorder dependencies to be sort of increasing order of how much they depend on other stuff
6439zooko@zooko.com**20081025134739
6440 Ignore-this: 6d636aaf5deb37cbf18172824b0bbf87
6441 Not that the order makes any different to how it gets installed, as far as I can tell.
6442]
6443[setup: loosen our version requirement on zfec to require >= 1.1 instead of >= 1.3
6444zooko@zooko.com**20080122233538
6445 I see that we have .deb's only for v1.1.
6446 
6447]
6448[_auto_deps.py: relax our simplejson dependency to 1.4, since I think it works and because that's what feisty offers
6449warner@allmydata.com**20080123190309]
6450[setup: loosen requirement on simplejson from 1.7.3 to 1.7.1
6451zooko@zooko.com**20080123155420
6452 Since apparently 1.7.1 is what we use on tahoecs2, and it works.
6453 
6454]
6455[setup: trivial change: the name of the "Nevow" distribution is capitalized
6456zooko@zooko.com**20080610231537]
6457[immutable: make the web display of upload results more human-friendly, like they were before my recent change to the meaning of the "sharemap"
6458zooko@zooko.com**20090110200209
6459 Ignore-this: 527d067334f982cb2d3e185f72272f60
6460]
6461[immutable: redefine the "sharemap" member of the upload results to be a map from shnum to set of serverids
6462zooko@zooko.com**20090110174623
6463 Ignore-this: 10300a2333605bc26c4ee9c7ab7dae10
6464 It used to be a map from shnum to a string saying "placed this share on XYZ server".  The new definition is more in keeping with the "sharemap" object that results from immutable file checking and repair, and it is more useful to the repairer, which is a consumer of immutable upload results.
6465]
6466[webish: add more share information to upload status, including assisted uploads
6467warner@allmydata.com**20080306015151]
6468[trivial: minor changes to in-line comments -- mark plaintext-hash-tree as obsolete
6469zooko@zooko.com**20090110205601
6470 Ignore-this: df286154e1acde469f28e9bd00bb1068
6471]
6472[immutable: separate tests of immutable upload/download from tests of immutable checking/repair
6473zooko@zooko.com**20090110210739
6474 Ignore-this: 9e668609d797ec86a618ed52602c111d
6475]
6476[tahoe.cfg: add controls for k and N (and shares-of-happiness)
6477warner@allmydata.com**20081118062944]
6478[immutable: tests: verifier doesn't always catch corrupted share hashes
6479zooko@zooko.com**20090106190449
6480 Ignore-this: a9be83b8e2350ae9af808476015fe0e4
6481 Maybe it already got one of the corrupted hashes from a different server and it doesn't double-check that the hash from every server is correct.  Or another problem.  But in any case I'm marking this as TODO because an even better (more picky) verifier is less urgent than repairer.
6482]
6483[rename "checker results" to "check results", because it is more parallel to "check-and-repair results"
6484zooko@zooko.com**20090106193703
6485 Ignore-this: d310e3d7f42a76df68536650c996aa49
6486]
6487[mutable: rename mutable/node.py to mutable/filenode.py and mutable/repair.py to mutable/repairer.py
6488zooko@zooko.com**20081207142008
6489 Ignore-this: ecee635b01a21e6f866a11bb349712a3
6490 To be more consistent with the immutable layout that I am working on.
6491]
6492[mutable WIP: rename NotEnoughPeersError to NotEnoughSharesError
6493warner@allmydata.com**20080415230832]
6494[trivial: tiny changes to test code
6495zooko@zooko.com**20090108172048
6496 Ignore-this: b1a434cd40a87c3d027fef4ce609d25c
6497]
6498[immutable: fix error in validation of ciphertext hash tree and add test for that code
6499zooko@zooko.com**20090108054012
6500 Ignore-this: 3241ce66373ebc514ae6e6f086f6daa2
6501 pyflakes pointed out to me that I had committed some code that is untested, since it uses an undefined name.  This patch exercises that code -- the validation of the ciphertext hash tree -- by corrupting some of the share files in a very specific way, and also fixes the bug.
6502]
6503[download: make sure you really get all the crypttext hashes
6504zooko@zooko.com**20090108022638
6505 Ignore-this: c1d5ebb048e81f706b9098e26876e040
6506 We were not making sure that we really got all the crypttext hashes during download.  If a server were to return less than the complete set of crypttext hashes, then our subsequent attempt to verify the correctness of the ciphertext would fail.  (And it wouldn't be obvious without very careful debugging why it had failed.)
6507 This patch makes it so that you keep trying to get ciphertext hashes until you have a full set or you run out of servers to ask.
6508]
6509[immutable: new checker and verifier
6510zooko@zooko.com**20090106002818
6511 Ignore-this: 65441f8fdf0db8bcedeeb3fcbbd07d12
6512 New checker and verifier use the new download class.  They are robust against various sorts of failures or corruption.  They return detailed results explaining what they learned about your immutable files.  Some grotesque sorts of corruption are not properly handled yet, and those ones are marked as TODO or commented-out in the unit tests.
6513 There is also a repairer module in this patch with the beginnings of a repairer in it.  That repairer is mostly just the interface to the outside world -- the core operation of actually reconstructing the missing data blocks and uploading them is not in there yet.
6514 This patch also refactors the unit tests in test_immutable so that the handling of each kind of corruption is reported as passing or failing separately, can be separately TODO'ified, etc.  The unit tests are also improved in various ways to require more of the code under test or to stop requiring unreasonable things of it.  :-)
6515 
6516]
6517[immutable/checker: make log() tolerate the format= form
6518warner@lothar.com**20080908030308]
6519[checker: make the log() function of SimpleCHKFileVerifier compatible with the log() function of its superclasses and subclasses
6520zooko@zooko.com**20080825214407]
6521[immutable/filenode.py: add TODO note about the #514 monitor to check(), rather than going through the checker/verifier code and adding it, since Zooko is currently working on that code
6522warner@lothar.com**20081022084237]
6523[dirnode manifest/stats: process more than one LIT file per tree; we were accidentally ignoring all but the first
6524warner@allmydata.com**20081115045049]
6525[webapi: add 'summary' string to checker results JSON
6526warner@allmydata.com**20081119002826]
6527[try to tidy up uri-as-string vs. uri-as-object
6528zooko@zooko.com**20081219143924
6529 Ignore-this: 4280727007c29f5b3e9273a34519893f
6530 I get confused about whether a given argument or return value is a uri-as-string or uri-as-object.  This patch adds a lot of assertions that it is one or the other, and also changes CheckerResults to take objects not strings.
6531 In the future, I hope that we generally use Python objects except when importing into or exporting from the Python interpreter e.g. over the wire, the UI, or a stored file.
6532]
6533[web/filenode: oops, fix test failures, not everything has a storage index
6534warner@allmydata.com**20081029011720]
6535[web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
6536warner@allmydata.com**20081029010103]
6537[#330: convert stats-gatherer into a .tac file service, add 'tahoe create-stats-gatherer'
6538warner@allmydata.com**20081118074620]
6539[dirnode manifest: add verifycaps, both to internal API and to webapi. This will give the manual-GC tools more to work with, so they can estimate how much space will be freed.
6540warner@allmydata.com**20081124204046]
6541[CLI: add 'tahoe stats', to run start-deep-stats and print the results
6542warner@allmydata.com**20081114014350]
6543[manifest: add storage-index strings to the json results
6544warner@allmydata.com**20081119220027]
6545[manifest: include stats in results. webapi is unchanged.
6546warner@allmydata.com**20081119210347]
6547[doc: sundry amendments to docs and in-line code comments
6548zooko@zooko.com**20081228225954
6549 Ignore-this: a38057b9bf0f00afeea1c468b2237c36
6550]
6551[NEWS: minor edits
6552warner@allmydata.com**20081106223356]
6553[setup: one more address to send release announcements to
6554zooko@zooko.com**20081203015040
6555 Ignore-this: 87cb7a9c3a1810ff0c87908548027ac5
6556]
6557[setup: another note about the process of making a tahoe release: mail to duplicity-talk@nongnu.org
6558zooko@zooko.com**20081203014414
6559 Ignore-this: 77ffd6f7412cdc3283c1450cfde9fdf1
6560]
6561[docs: add a note that when you make a new tahoe release, you should send the announcement to fuse-devel@lists.sourceforge.net
6562zooko@zooko.com**20081023213658]
6563[docs: how_to_make_a_tahoe_release.txt
6564zooko@zooko.com**20080828202109
6565 Just some cryptic notes to self, but if I get hit by a truck then someone else might be able to decode them.
6566]
6567[immutable: stop reading past the end of the sharefile in the process of optimizing download -- Tahoe storage servers < 1.3.0 return an error if you read past the end of the share file
6568zooko@zooko.com**20090105194057
6569 Ignore-this: 365e1f199235a55c0354ba6cb2b05a04
6570]
6571[immutable: refactor downloader to be more reusable for checker/verifier/repairer (and better)
6572zooko@zooko.com**20090105155145
6573 Ignore-this: 29a22b1eb4cb530d4b69c12aa0d00740
6574 
6575 The code for validating the share hash tree and the block hash tree has been rewritten to make sure it handles all cases, to share metadata about the file (such as the share hash tree, block hash trees, and UEB) among different share downloads, and not to require hashes to be stored on the server unnecessarily, such as the roots of the block hash trees (not needed since they are also the leaves of the share hash tree), and the root of the share hash tree (not needed since it is also included in the UEB).  It also passes the latest tests including handling corrupted shares well.
6576   
6577 ValidatedReadBucketProxy takes a share_hash_tree argument to its constructor, which is a reference to a share hash tree shared by all ValidatedReadBucketProxies for that immutable file download.
6578   
6579 ValidatedReadBucketProxy requires the block_size and share_size to be provided in its constructor, and it then uses those to compute the offsets and lengths of blocks when it needs them, instead of reading those values out of the share.  The user of ValidatedReadBucketProxy therefore has to have first used a ValidatedExtendedURIProxy to compute those two values from the validated contents of the URI.  This is pleasingly simplifies safety analysis: the client knows which span of bytes corresponds to a given block from the validated URI data, rather than from the unvalidated data stored on the storage server.  It also simplifies unit testing of verifier/repairer, because now it doesn't care about the contents of the "share size" and "block size" fields in the share.  It does not relieve the need for share data v2 layout, because we still need to store and retrieve the offsets of the fields which come after the share data, therefore we still need to use share data v2 with its 8-byte fields if we want to store share data larger than about 2^32.
6580   
6581 Specify which subset of the block hashes and share hashes you need while downloading a particular share.  In the future this will hopefully be used to fetch only a subset, for network efficiency, but currently all of them are fetched, regardless of which subset you specify.
6582   
6583 ReadBucketProxy hides the question of whether it has "started" or not (sent a request to the server to get metadata) from its user.
6584 
6585 Download is optimized to do as few roundtrips and as few requests as possible, hopefully speeding up download a bit.
6586 
6587]
6588[download: oops, NotEnoughHashesError comes from hashtree, not hashutil
6589warner@allmydata.com**20070418033751]
6590[debug/test_cli: fix error handling for catalog-shares, to make the test stop failing on windows
6591warner@allmydata.com**20081030190651]
6592[catalog-shares command: tolerate errors, log them to stderr, handle v2-immutable shares
6593warner@allmydata.com**20081029221010]
6594[minor: fix unused imports -- thanks, pyflakes
6595zooko@zooko.com**20081205190723
6596 Ignore-this: 799f6a16360ac1aee8f6e0eb35a28a88
6597]
6598[finish renaming 'subshare' to 'block' in immutable/encode.py and in docs/
6599zooko@zooko.com**20081209223318
6600 Ignore-this: 3d1b519f740c3d1030cb733f76fdae61
6601]
6602[docs: add a bunch of .svg pictures
6603warner@allmydata.com**20070424012526]
6604[docs/file-encoding.txt: move this over from the wiki
6605warner@allmydata.com**20080603025827]
6606[immutable: refactor ReadBucketProxy a little
6607zooko@zooko.com**20081216235325
6608 Ignore-this: b3733257769eff3b3e9625bd04643fd6
6609]
6610[debug: pass empty optional arguments to ReadBucketProxy
6611zooko@zooko.com**20081216235145
6612 Ignore-this: 7132cdc6a52767fbbcca03b242a16982
6613 because those arguments are about to become non-optional (for other code than test/debug code)
6614]
6615[immutable: remove the last bits of code (only test code or unused code) which did something with plaintext hashes or plaintext hash trees
6616zooko@zooko.com**20081219141807
6617 Ignore-this: d10d26b279794383f27fa59ec4a50219
6618]
6619[interfaces: loosen a few max-size constraints which would limit us to a mere 1.09 TB maximum file size
6620zooko@zooko.com**20081009191357
6621 
6622 These constraints were originally intended to protect against attacks on the
6623 storage server protocol layer which exhaust memory in the peer.  However,
6624 defending against that sort of DoS is hard -- probably it isn't completely
6625 achieved -- and it costs development time to think about it, and it sometimes
6626 imposes limits on legitimate users which we don't necessarily want to impose.
6627 So, for now we forget about limiting the amount of RAM that a foolscap peer can
6628 cause you to start using.
6629 
6630]
6631[interfaces: move signatures into docstrings, to reduce lines of code and improve code-coverage numbers
6632warner@allmydata.com**20070725024321]
6633[raise the limit on block hashes and share hashes from 30 to 2**20
6634"Zooko O'Whielacronx <zooko@zooko.com>"**20070430065115]
6635[immutable: remove unused code to produce plaintext hashes
6636zooko@zooko.com**20081209224546
6637 Ignore-this: 1ff9b6fa48e0617fea809998a0e3b6e
6638]
6639[encode.py: also record the size, along with plaintext_hash and SI
6640warner@allmydata.com**20080325020815]
6641[encode: log a plaintext hash and SI for each upload. This will allow the log gatherer to correlate the two, to better measure the benefits of convergence
6642warner@allmydata.com**20080325015537]
6643[immutable: ValidatedExtendedURIProxy computes and stores block_size and share_size for the convenience of its users
6644zooko@zooko.com**20090102174317
6645 Ignore-this: 2bab64048fffc05dc6592d617aeb412f
6646]
6647[immutable: fix name change from BadOrMissingShareHash to BadOrMissingHash
6648zooko@zooko.com**20090102192709
6649 Ignore-this: 3f22ca1ee045beabb11559512ba130f4
6650 One of the instances of the name accidentally didn't get changed, and pyflakes noticed.  The new downloader/checker/verifier/repairer unit tests would also have noticed, but those tests haven't been rolled into a patch and applied to this repo yet...
6651]
6652[immutable: download.py: Raise the appropriate type of exception to indicate the cause of failure, e.g. BadOrMissingHash, ServerFailure, IntegrityCheckReject (which is a supertype of BadOrMissingHash).  This helps users (such as verifier/repairer) catch certain classes of reasons for "why did this download not work".  The tests of verifier/repairer test this code and rely on this code.
6653zooko@zooko.com**20090102185858
6654 Ignore-this: 377bf621bbb6e360a98fd287bb1593f1
6655]
6656[trivial: remove unused import (thanks, pyflakes)
6657zooko@zooko.com**20081219194629
6658 Ignore-this: 96e15d6de43dd1204a8933171f194189
6659]
6660[immutable: don't catch all exception when downloading, catch only DeadReferenceError and IntegrityCheckReject
6661zooko@zooko.com**20081221234135
6662 Ignore-this: 1abe05c3a5910378abc3920961f19aee
6663]
6664[immutable: invent download.BadOrMissingHashError which is raised if either hashtree.BadHashError, hashtree.NotEnoughHashesError, and which is a subclass of IntegrityCheckReject
6665zooko@zooko.com**20081221234130
6666 Ignore-this: 1b04d7e9402ebfb2cd4c7648eb16af84
6667]
6668[mutable: merge renaming with test patches
6669zooko@zooko.com**20081207144519
6670 Ignore-this: a922a8b231090fb35b9ef84d99e9dba3
6671]
6672[rrefutil: generically wrap any errback from callRemote() in a ServerFailure instance
6673zooko@zooko.com**20081231202830
6674 Ignore-this: c949eaf8589ed4c3c232f17808fdce6a
6675 This facilitates client code to easily catch ServerFailures without also catching exceptions arising from client-side code.
6676 See also:
6677 http://foolscap.lothar.com/trac/ticket/105 # make it easy to distinguish server-side failures/exceptions from client-side
6678]
6679[#538: fetch version and attach to the rref. Make IntroducerClient demand v1 support.
6680warner@allmydata.com**20081122020727]
6681[upload: if we lose the helper, go back to doing direct-to-server uploads instead of causing all subsequent uploads to fail
6682warner@allmydata.com**20080207232659]
6683[introducer: move the relevant interfaces out to introducer/interfaces.py
6684warner@allmydata.com**20080619000441]
6685[note that setting k=1 is equivalent to replication
6686warner@allmydata.com**20070712232212]
6687[immutable: ReadBucketProxy defines classes of exception: LayoutInvalid and its two subtypes RidiculouslyLargeURIExtensionBlock and ShareVersionIncompatible.  This helps users (such as verifier/repairer) catch certain classes of reasons for "why did this download not work".  This code gets exercised by the verifier/repairer unit tests, which corrupt the shares on disk in order to trigger problems like these.
6688zooko@zooko.com**20090102181554
6689 Ignore-this: 2288262a59ee695f524859ed4b0b39d5
6690]
6691[immutable: fix detection of truncated shares to take into account the fieldsize -- either 4 or 8
6692zooko@zooko.com**20090103005745
6693 Ignore-this: 710184bd90f73dc18f3899d90ec6e972
6694]
6695[immutable: raise LayoutInvalid instead of struct.error when a share is truncated
6696zooko@zooko.com**20090103004806
6697 Ignore-this: 346c779045f79725965a0f2d3eea41f9
6698 To fix this error from the Windows buildslave:
6699 
6700 [ERROR]: allmydata.test.test_immutable.Test.test_download_from_only_3_remaining_shares
6701 
6702 Traceback (most recent call last):
6703   File "C:\Documents and Settings\buildslave\windows-native-tahoe\windows\build\src\allmydata\immutable\download.py", line 135, in _bad
6704     raise NotEnoughSharesError("ran out of peers, last error was %s" % (f,))
6705 allmydata.interfaces.NotEnoughSharesError: ran out of peers, last error was [Failure instance: Traceback: <class 'struct.error'>: unpack requires a string argument of length 4
6706 c:\documents and settings\buildslave\windows-native-tahoe\windows\build\support\lib\site-packages\foolscap-0.3.2-py2.5.egg\foolscap\call.py:667:_done
6707 c:\documents and settings\buildslave\windows-native-tahoe\windows\build\support\lib\site-packages\foolscap-0.3.2-py2.5.egg\foolscap\call.py:53:complete
6708 c:\Python25\lib\site-packages\twisted\internet\defer.py:239:callback
6709 c:\Python25\lib\site-packages\twisted\internet\defer.py:304:_startRunCallbacks
6710 --- <exception caught here> ---
6711 c:\Python25\lib\site-packages\twisted\internet\defer.py:317:_runCallbacks
6712 C:\Documents and Settings\buildslave\windows-native-tahoe\windows\build\src\allmydata\immutable\layout.py:374:_got_length
6713 C:\Python25\lib\struct.py:87:unpack
6714 ]
6715 ===============================================================================
6716 
6717]
6718[storage: introduce v2 immutable shares, with 8-byte offsets fields, to remove two of the three size limitations in #346. This code handles v2 shares but does not generate them. We'll make a release with this v2-tolerance, wait a while, then make a second release that actually generates v2 shares, to avoid compatibility problems.
6719warner@allmydata.com**20081010011327]
6720[trivial: remove unused import (pyflakes)
6721zooko@zooko.com**20090103182215
6722 Ignore-this: 4a29a14fa4580460a5e61fa0aa88b9b2
6723]
6724[immutable: fix test for truncated reads of URI extension block size
6725zooko@zooko.com**20090103174427
6726 Ignore-this: d9ff9dfff88b4cc7aa6751ce2e9088a6
6727]
6728[immutable: more detailed tests for checker/verifier/repairer
6729zooko@zooko.com**20081231201838
6730 Ignore-this: dd16beef604b0917f4493bc4ef35ab74
6731 There are a lot of different ways that a share could be corrupted, or that attempting to download it might fail.  These tests attempt to exercise many of those ways and require the checker/verifier/repairer to handle each kind of failure well.
6732]
6733[immutable: mark a failing download test as "todo", because I think it is revealing a limitation of the current downloader's handling of corrupted shares
6734zooko@zooko.com**20090103190003
6735 Ignore-this: 1d429912dda92d986e2ee366d73e088c
6736]
6737[immutable: add more detailed tests of download, including testing the count of how many reads different sorts of downloads take
6738zooko@zooko.com**20090102225459
6739 Ignore-this: d248eb3982fdb05b43329142a723f5a1
6740]
6741[immutable: fix think-o in previous patch which caused all reads to return "", and also optimize by not opening the file when the answer is going to be ""
6742zooko@zooko.com**20090103200245
6743 Ignore-this: 8ac4d0b0399cd74e8a424ffbcf3d9eb9
6744]
6745[immutable: when storage server reads from immutable share, don't try to read past the end of the file (Python allocates space according to the amount of data requested, so if there is corruption and that number is huge it will do a huge memory allocation)
6746zooko@zooko.com**20090103192222
6747 Ignore-this: e533a65d74437676d5116369fd7c663b
6748]
6749[immutable: storage servers accept any size shares now
6750zooko@zooko.com**20081231214226
6751 Ignore-this: 28669d591dddaff69088cba4483da61a
6752 Nathan Wilcox observed that the storage server can rely on the size of the share file combined with the count of leases to unambiguously identify the location of the leases.  This means that it can hold any size share data, even though the field nominally used to hold the size of the share data is only 32 bits wide.
6753 
6754 With this patch, the storage server still writes the "size of the share data" field (just in case the server gets downgraded to an earlier version which requires that field, or the share file gets moved to another server which is of an earlier vintage), but it doesn't use it.  Also, with this patch, the server no longer rejects requests to write shares which are >= 2^32 bytes in size, and it no longer rejects attempts to read such shares.
6755 
6756 This fixes http://allmydata.org/trac/tahoe/ticket/346 (increase share-size field to 8 bytes, remove 12GiB filesize limit), although there remains open a question of how clients know that a given server can handle large shares (by using the new versioning scheme, probably).
6757 
6758 Note that share size is also limited by another factor -- how big of a file we can store on the local filesystem on the server.  Currently allmydata.com typically uses ext3 and I think we typically have block size = 4 KiB, which means that the largest file is about 2 TiB.  Also, the hard drives themselves are only 1 TB, so the largest share is definitely slightly less than 1 TB, which means (when K == 3), the largest file is less than 3 TB.
6759 
6760 This patch also refactors the creation of new sharefiles so that only a single fopen() is used.
6761 
6762 This patch also helps with the unit-testing of repairer, since formerly it was unclear what repairer should expect to find if the "share data size" field was corrupted (some corruptions would have no effect, others would cause failure to download).  Now it is clear that repairer is not required to notice if this field is corrupted since it has no effect on download.  :-)
6763 
6764]
6765[storage.py: improve some precondition() error messages
6766warner@allmydata.com**20081010011425]
6767[storage.py: assert that immutable share size will fit in the 4-byte v1 container (see #346). The struct module in py2.4 raises an error on overflow, but py2.5 merely emits a warning
6768warner@lothar.com**20081020172208]
6769[storage: replace sizelimit with reserved_space, make the stats 'disk_avail' number incorporate this reservation
6770warner@lothar.com**20081201232421]
6771[storage: change service name from 'storageserver' to 'storage'
6772warner@allmydata.com**20080206022859]
6773[test_cli: remove windows-worrying newlines from test data
6774warner@lothar.com**20080802024734]
6775[storage: include disk-free information in the stats-gatherer output
6776warner@lothar.com**20080806210602]
6777[storage: record latency stats in a flat dict, not nested, to conform to RIStatsProvider
6778warner@allmydata.com**20080625002118]
6779[#518: replace various BASEDIR/* config files with a single BASEDIR/tahoe.cfg, with backwards-compatibility of course
6780warner@allmydata.com**20080930232149]
6781[node.py: multi-class exception calls need parentheses
6782warner@allmydata.com**20070601013221]
6783[create_node.py: allow config['webport'] to be missing, for check_memory
6784warner@lothar.com**20071011091959]
6785[change our default HTTP port to 8123
6786warner@allmydata.com**20071011201723]
6787[docs: trivial edit
6788zooko@zooko.com**20080307003230]
6789[docs: document the private/convergence configuration file
6790zooko@zooko.com**20080325182241]
6791[docs/configuration.txt: wrap to 80 cols
6792warner@allmydata.com**20080205203512]
6793[configuration.txt: describe helper config
6794warner@allmydata.com**20080506225906]
6795[run a stats provider even if there's no gatherer, since the HTTP /statistics page is then useful. Only run the once-per-second load-monitor if there is a gatherer configured
6796warner@allmydata.com**20080508183730]
6797[docs/configuration.txt: explain the current limitations of readonly_storage
6798warner@allmydata.com**20080604004708]
6799[BASEDIR/nickname is now UTF-8 encoded
6800warner@lothar.com**20080920183713]
6801[docs/configuration.txt: document nickname, no_storage, readonly_storage
6802warner@allmydata.com**20080205203329]
6803[docs: update configuration.txt to mention the private subdir and edit the description of webport
6804zooko@zooko.com**20080108174407]
6805[use foolscap's new app_versions API, require foolscap-0.3.1
6806warner@lothar.com**20080920183853]
6807[bump foolscap dependency to 0.3.0, for the new incident-gathering interfaces
6808warner@lothar.com**20080805235828]
6809[setup: require secure_connections from foolscap
6810zooko@zooko.com**20080730021041
6811 This causes a problem on debian sid, since the pyOpenSSL v0.6 .deb doesn't come
6812 with .egg-info, so setuptools will not know that it is already installed and
6813 will try to install pyOpenSSL, and if it installs pyOpenSSL v0.7, then this
6814 will trigger the bug in Twisted v8.1.0 when used with pyOpenSSL v0.7.
6815 
6816 http://twistedmatrix.com/trac/ticket/3218
6817 
6818 Now the comments in twisted #3218 suggest that it happens only with the select
6819 reactor, so maybe using --reactor=poll will avoid it.
6820 
6821]
6822[start using Foolscap's 'incident-logging' feature, which requires foolscap-0.2.9
6823warner@allmydata.com**20080703004029]
6824[remove unused import: thanks, pyflakes
6825zooko@zooko.com**20071213020530]
6826[node.py: remove the provoke-logport-furlfile-creation hack now that foolscap-0.2.3 does it for us, and add bridge-twisted-logs
6827warner@lothar.com**20071224232440]
6828[node: provoke foolscap-0.2.2 into saving logport.furl, so we can attach to it with 'flogtool dump'. Also, place it in private/, since logs are considered somewhat private
6829warner@allmydata.com**20071219052702]
6830[macapp: simplify node startup failure reporting
6831robk-tahoe@allmydata.com**20080306210904
6832 
6833 1. changed the node's exit-on-error behaviour. rather than logging debug and
6834 then delegating to self for _abort_process() instead simply delegate to self
6835 _service_startup_failed(failure) to report failures in the startup deferred
6836 chain. subclasses then have complete control of handling and reporting any
6837 failures in node startup.
6838 
6839 2. replace the convoluted wx.PostEvent() glue for posting an event into the
6840 gui thread with the simpler expedient of wx.CallAfter() which is much like
6841 foolscap's eventually() but also thread safe for inducing a call back on the
6842 gui thread.
6843]
6844[macapp: report failure of node startup to the user
6845robk-tahoe@allmydata.com**20080306195321
6846 
6847 in certain cases (e.g. the node.pem changed but old .furls are in private/)
6848 the node will abort upon startup. previously it used os.abort() which in these
6849 cases caused the mac gui app to crash on startup with no explanation.
6850 
6851 this changes that behaviour from calling os.abort() to calling
6852 node._abort_process(failure) which by default calls os.abort().  this allows
6853 that method to be overridden in subclasses.
6854 
6855 the mac app now provides and uses such a subclass of Client, so that failures
6856 are reported to the user in a message dialog before the process exits.
6857 this uses wx.PostEvent() with a custom event type to signal from the reactor
6858 thread into the gui thread.
6859 
6860 
6861]
6862[node.py: when calling os.abort(), announce it to stdout as well as the log
6863warner@lothar.com**20080116090132]
6864[catch failures in startService() and abort process
6865robk-org@allmydata.com**20070605014637]
6866[mac: added 'mount filesystem' action to the mac gui
6867robk-tahoe@allmydata.com**20080220005659
6868 
6869 this adds an action to the dock menu and to the file menu (when visible)
6870 "Mount Filesystem".  This action opens a windows offering the user an
6871 opportunity to select from any of the named *.cap files in their
6872 .tahoe/private directory, and choose a corresponding mount point to mount
6873 that at.
6874 
6875 it launches the .app binary as a subprocess with the corresponding command
6876 line arguments to launch the 'tahoe fuse' functionality to mount that file
6877 system.  if a NAME.icns file is present in .tahoe/private alonside the
6878 chosen NAME.cap, then that icon will be used when the filesystem is mounted.
6879 
6880 this is highly unlikely to work when running from source, since it uses
6881 introspection on sys.executable to find the relavent binary to launch in
6882 order to get the right built .app's 'tahoe fuse' functionality.
6883 
6884 it is also relatively likely that the code currently checked in, hence
6885 linked into the build, will have as yet unresolved library dependencies.
6886 it's quite unlikely to work on 10.5 with macfuse 1.3.1 at the moment.
6887 
6888]
6889[macapp.py: cosmetic, remove trailing whitespace
6890warner@allmydata.com**20080128184654]
6891[confwiz: fix mac confwiz w.r.t. recent confwiz changes
6892robk-tahoe@allmydata.com**20080215021446]
6893[Reworked mac gui to not lock up upon launch
6894robk-tahoe@allmydata.com**20080125020028
6895 
6896 Previously, once the node itself was launched, the UI event loop was no longer
6897 running.  This meant that the app would sit around seemingly 'wedged' and being
6898 reported as 'Not Responding' by the os.
6899 
6900 This chnages that by actually implementing a wxPython gui which is left running
6901 while the reactor, and the node within it, is launched in another thread.
6902 Beyond 'quit' -> reactor.stop, there are no interactions between the threads.
6903 
6904 The ui provides 'open web root' and 'open account page' actions, both in the
6905 file menu, and in the (right click) dock icon menu.
6906 
6907 
6908 Something weird in the handling of wxpython's per-frame menubar stuff seems to
6909 mean that the menu bar only displays the file menu and about etc (i.e. the items
6910 from the wx menubar) if the focus changes from and back to the app while the
6911 frame the menubar belongs to is displayed.  Hence a splash frame comes up at
6912 startup to provide an opportunity.
6913 
6914 It also seems that, in the case that the file menu is not available, that one
6915 can induce it to reappear by choosing 'about' from the dock menu, and then
6916 closing the about window.
6917]
6918[cleanup mac and windows build code
6919robk-tahoe@allmydata.com**20080124030641
6920 
6921 this moves some of the code common to both windows and mac builds into the
6922 allmydata module hierarchy, and cleans up the windows and mac build directories
6923 to import the code from there.
6924]
6925[update confwiz to include account creation ui
6926robk-tahoe@allmydata.com**20080121211310
6927 
6928 this changes the confwiz so that hitting the 'create account' button, rather than
6929 opening a webbrowser to the register page, instead provides a simple account creation
6930 ui directly, along with changes to the backend (native_client.php) to support that.
6931 
6932 also added a 'connecting...' message so the user sees a response when they hit
6933 login or create account, since the getBasedir call can sometimes take up to ~5min
6934 (which is unacceptable for a user product, but this at least somewhat ameliorates
6935 the issue of the ui locking up and not giving the user any feedback while it's
6936 happening)
6937]
6938[add winfuse plugin to installer
6939robk-tahoe@allmydata.com**20080117011535
6940 
6941 this adds the latest build of mike's winfuse plugins, now also running as
6942 a windows service (and using the node.url, private/root_dir.cap files from
6943 the noderoot specified by the registry) into the install process.
6944 
6945]
6946[add files from allmydata/web to py2exe distribution
6947robk-tahoe@allmydata.com**20080110213446
6948 
6949 when building the py2exe package, glob src/allmydata/web/* into web/ within the dist
6950]
6951[implement a very simple, wxpython based, config wizard
6952robk-tahoe@allmydata.com**20080112015315
6953 
6954 This implements a very small app using a wx ui to log a user in.
6955 
6956 it takes a username and password, and submits them to a backend on the web site
6957 (currently the allmydata test net webserver) to authenticate them.  It returns
6958 the 'root_cap' uri of the user's virtual drive. Also the introducer.furl is
6959 retrieved.  These are then written into the default noderoot basedir in their
6960 usual files (private/root_dir.cap and introducer.furl)
6961 
6962 a button is provided which will direct the user to the web site in the event
6963 that they need to register in order to have an account to use.
6964 
6965 once the user is successfully authenticated and the files are written, then
6966 on win32 the tahoe service will be started.
6967]
6968[added a small script as a stub for a config wizard
6969robk-tahoe@allmydata.com**20080111023718
6970 
6971 this doesn't implement any config wizard ui, but does a simple http fetch of
6972 root_cap and introducer.furl from a php backend stub.
6973]
6974[more minor build tweaks for windows
6975robk-tahoe@allmydata.com**20080115233806
6976 
6977 tweaking version number display, and fixing a couple of small bugs
6978]
6979[fix tahoe script installation logic
6980robk-tahoe@allmydata.com**20080124000556
6981 
6982 refine the logic in the .app which tries to install the 'tahoe' script.
6983 
6984 now it will do nothing if 'tahoe' is found anywhere on the user's path,
6985 and only if it's not present will it try to install it in each of the
6986 candidate paths (/usr/local/bin ~/bin ~/Library/bin) which are on the
6987 user's path
6988]
6989[have mac app write a tahoe upon startup
6990robk-tahoe@allmydata.com**20080123023501
6991 
6992 upon startup, the .app will look in '/usr/local/bin', '~/bin', '~/Library/bin'
6993 if it finds one of these dirs, and can write into it, and there isn't already
6994 a 'tahoe' present, it will write a small bach script which will launch the
6995 binary contained within the .app bundle
6996 
6997 this allows the .app bundle to offer the services of the 'tahoe' script
6998 easily and simply
6999]
7000[further fixes to windows build (pkg_resources / web templates)
7001robk-tahoe@allmydata.com**20080124005243
7002 
7003 now that web templates are found via pkg_resources, then the windows build
7004 should in fact _use_ pkg_resources, rather than exclude it from the build
7005 to prevent nevow exploding upon import due to the zip provider exception,
7006 so that the pkgreshook can do install location based lookups
7007]
7008[add build dependencies to support py2exe's modulefinder
7009robk-tahoe@allmydata.com**20080110012538
7010 
7011 adds windows/depends.py as a container for modules which are needed at runtime
7012 but which py2exe's modulefinder dependency analysis fails to find as requisites.
7013]
7014[fix nevow build prob for py2exe
7015robk-tahoe@allmydata.com**20080110212619
7016 
7017 nevow attempts to use pkg_resources to find the formless css file upon
7018 import, if pkg_resources is available.  unfortunately using pkg_resources
7019 to find files is not supported if the files are being loaded from a zip
7020 archive (i.e. only source and egg), and further py2exe uses a zip bundle
7021 for all the code and dependent libraries.  hence having both pkg_resources
7022 and nevow built into an exe causes nevow to explode upon import.
7023 
7024 this tells py2exe not to link pkg_resources into the target, so that
7025 this behaviour isn't stimulated.  the side effect being that pkg_resources
7026 isn't available.
7027 
7028]
7029[_auto_deps.py: per #456, don't require the 'secure_connections' feature from Foolscap, to avoid (failing) builds of pyopenssl
7030warner@allmydata.com**20080609235504]
7031[setup and docs: various improvements to setup and docs
7032zooko@zooko.com**20080605205505
7033 Remove docs/install-details.html and README.win32 for now (see #282).
7034 Remove checks for pywin32 and pyopenssl in Makefile -- that is (or will be) automated by setuptools.
7035 Remove twisted from setup_requires.  This causes the problem in which Nevow doesn't declare its dependency on Twisted (#440) to yield a clear ImportError mentioning Twisted and to fail repeatedly, rather than yielding a weird ImportError and working on the second identical attempt.
7036 Fix Makefile to set PATH so that trial and twistd can be found by "make test" after Twisted was installed into support/ during "make"
7037]
7038[short note about building cryptopp under cywin/native on win
7039robk-tahoe@allmydata.com**20080107235020]
7040[add a note to README.win32 about building cryptopp etc on cygwin
7041robk-tahoe@allmydata.com**20080107213545]
7042[docs: a few updates, edits, and formatting tweaks to README.win32
7043zooko@zooko.com**20071230113812]
7044[README.win32: clarify layout a bit
7045zooko@zooko.com**20071211232558]
7046[Win32 openSSH info
7047booker@allmydata.com**20071019180241]
7048[README.win32: add note showing MikeB where this file is making false statements :-)
7049zooko@zooko.com**20071211232610]
7050[docs: edit install.html to point to about.html
7051zooko@zooko.com**20080123140810]
7052[docs/install-details.html: wrap to 80 cols, no content changes
7053warner@allmydata.com**20080208035004]
7054[install-details.html: debian 3.1 is better known as 'sarge'
7055warner@allmydata.com**20080130230342]
7056[docs: add note that Debian 3.1 seems to have the same problem as Ubuntu Dapper with regard to Nevow and Twisted version compatibility
7057zooko@zooko.com**20080130182117]
7058[docs: mention some tips of how to resolve a certain dependency on Dapper
7059zooko@zooko.com**20080110213238]
7060[docs: start updating install-details.html to reflect current auto-dependency and setuptools requirements, and to be better written
7061zooko@zooko.com**20080110200337]
7062[auto_deps: require foolscap >= 2.5
7063robk-tahoe@allmydata.com**20080403230646
7064 
7065 the key_generator depends upon tub.setLocationAutomatically() which is only
7066 available in foolscap > 0.2.5
7067]
7068[bump foolscap dependency to 0.2.4, since we now use log.err
7069warner@allmydata.com**20080205212714]
7070[debian: update dependencies to match calc-deps.py, mainly pycryptopp-0.2.8
7071warner@allmydata.com**20080102211434]
7072[debian: add Depends: on python-pycryptopp, now that it's been packaged
7073warner@allmydata.com**20071119190450]
7074[docs: yay!  We can remove Twisted from the list of "Manual Dependencies" that users have to be aware of when installing
7075zooko@zooko.com**20080411014407]
7076[docs: fix anchor text of hyperlink to tarball
7077zooko@zooko.com**20080328020129]
7078[docs: link to the 1.0.0 tarball in docs/install.html
7079zooko@zooko.com**20080326032229]
7080[docs: link from install.html to the (imminent) location of allmydata-tahoe-0.9.0.tar.gz
7081zooko@zooko.com**20080313200237]
7082[docs: link straight to the release tar.gz in install.html
7083zooko@zooko.com**20080214175414]
7084[setup: fix spacing in error output messages from makefile
7085zooko@zooko.com**20080414135221
7086 Looking over Brian's shoulder the other day, I saw a message that said "Please seedocs/install.html".
7087 Looking at the source code of the Makefile, it seems like it should say
7088 
7089        @echo "ERROR: Not all of Tahoe's dependencies are in place.  Please see \
7090 docs/install.html for help on installing dependencies."
7091 
7092 instead of its current:
7093 
7094        @echo "ERROR: Not all of Tahoe's dependencies are in place.  Please see\
7095 docs/install.html for help on installing dependencies."
7096 
7097 But, I remember changing this more than once in the past, so either there is a different version of make somewhere which interprets trailing backslashes differently, or someone (possibly me) has repeatedly gotten confused about this issue.  Anyway, this time around, I'm trying:
7098 
7099        @echo "ERROR: Not all of Tahoe's dependencies are in place.  Please see docs/install.html for help on installing dependencies."
7100 
7101 Even though it is > 80 chars.
7102 
7103 
7104]
7105[Makefile: figleaf2el.py needs PYTHONPATH to get allmydata.util
7106warner@lothar.com**20070917081027]
7107[setup: pyOpenSSL is now easy_installable, and pycryptopp now includes Crypto++, so we can remove those two from the Manual Dependencies
7108zooko@zooko.com**20080424172917]
7109[setup: trivial formatting change in _auto_deps.py
7110zooko@zooko.com**20080506193056]
7111[back our runtime setuptools dependency down to 0.6a9 . We need a newer version to build, but can handle an older version to simply run a pre-built package
7112warner@allmydata.com**20080410233159]
7113[setup: we now require setuptools at run-time
7114zooko@zooko.com**20080410224610]
7115[setup: require twisted >= 2.4.0
7116zooko@zooko.com**20080409011200]
7117[setup: weaken the requirement on zope.interface from >= 3.1.0 to "any"
7118zooko@zooko.com**20080123172604
7119 We've never heard of a version of zope.interface that *wasn't* compatible, and there is a bug in Ubuntu's packaging of zope.interface which causes it to report its version number as 0.0.0:
7120 
7121 https://bugs.launchpad.net/zope.interface/+bug/185418
7122 
7123]
7124[setup: tiny fix to syntax in makefile
7125zooko@zooko.com**20080507123711]
7126[setup: remove specific checks for twisted dependency in makefile
7127zooko@zooko.com**20080506190900
7128 Now that the twisted dependency is handled by the automatic dependency mechanism.
7129]
7130[setup: update some docs, metadata, and docstrings
7131zooko@zooko.com**20080122162251]
7132[setup: update doc in __init__.py
7133zooko@zooko.com**20071222164650]
7134[setup: simplify makefile's path manipulation now that we rely on setup.py develop
7135zooko@zooko.com**20080326170033]
7136[setup: fix bug in bugfix to patch to include .egg's found in CWD
7137zooko@zooko.com**20071222171952]
7138[Makefile: put an existing PYTHONPATH in front of our generated EGGSPATH, to make it easier to test tahoe against development versions of dependent libraries
7139warner@lothar.com**20071224232153]
7140[setup: whoops, fix the use of source-tree-root-dir eggs in our Makefile
7141zooko@zooko.com**20080101075331]
7142[setup: fix bin/tahoe to include .egg's from the source tree root dir as well
7143zooko@zooko.com**20080101075128
7144 This is necessary, as we can't prevent setuptools from respecting any such eggs, therefore we need to respect them in order to maintain consistency.  However, we don't normally install any "install_requires" eggs into the source tree root dir.
7145 
7146]
7147[bin/allmydata-tahoe: update to new src/ + support/ directories, remove instdir/bin check
7148warner@lothar.com**20070915022428]
7149[bin/allmydata-tahoe: also update PYTHONPATH so that child processes (like twistd) will work
7150warner@allmydata.com**20070606183648]
7151[setup: fix bug in previous patch to include .egg's from CWD
7152zooko@zooko.com**20071222171427]
7153[setup: we also need to include .egg's in the CWD in our search path, because if we install a 3rd party library into support/, and *it* installs a library that *it* requires, that one will appear in CWD
7154zooko@zooko.com**20071222170424
7155 It would be nice to figure out a way to force them to all appear in support/ where they belong.
7156]
7157[setup: don't echo the echo of EGGSPATH
7158zooko@zooko.com**20080307001856]
7159[setup: for reasons that I do not understand "show-eggspath" gives me a GNUmake error unless I move it down a couple of stanzas (until after the stanza that sets PYTHONPATH)
7160zooko@zooko.com**20080122232238]
7161[setup: generate a unique revision number for each build
7162zooko@zooko.com**20080311022602]
7163[setup: bundle darcsver-1.1.1.tar
7164zooko@zooko.com**20080311022116
7165 I forgot that we're doing uncompressed misc/deps at the moment.  We don't think this is a long-term good approach...
7166]
7167[makefile - unreverted Zooko's change to setup.py, this originally was to see if it was causing the build to create a non-running installer on windows, but it wasn't the problem.
7168secorp@allmydata.com**20080311181038]
7169[reverting a change zooko made (2258) to see if it clears up problems in the windows build
7170secorp@allmydata.com**20080310183749]
7171[setup: don't install, just "develop" in setup.py in build target
7172zooko@zooko.com**20080307002820]
7173[setup: put back "chmod +x bin/tahoe" in the build target
7174zooko@zooko.com**20080123224020]
7175[setup: don't echo "signal-error" to stdout when testing for errors
7176zooko@zooko.com**20080325184555
7177 This patch is thanks to Paul Gerhardt.
7178]
7179[setup: require specific versions of dependencies, both at run-time (if pkg_resources is available) and at build-time, and make there be only once place where we specify those versions
7180zooko@zooko.com**20080122232433
7181 Using pkg_resources.require() like this also apparently allows people to install multiple different versions of packages on their system and tahoe (if pkg_resources is available to it) will import the version of the package that it requires.  I haven't tested this feature.
7182]
7183[setup: use setuptools (if it is present) at run-time to give a specific error message on startup if a too-old version of a dependency is installed
7184zooko@zooko.com**20080122234254]
7185[Makefile: define TRIALCMD with '=' not ':=', to fix make-clean test. Closes #180
7186warner@allmydata.com**20071015220159]
7187[setup: use the new find_exe module to find trial
7188zooko@zooko.com**20071015185226]
7189[Makefile: use --reactor=poll on cygwin, since select() is insufficient
7190Brian Warner <warner@allmydata.com>**20070914103344]
7191[setup: generalize the kludge of finding an executable (i.e. trial or twistd) when there might be only a .py script version of it available
7192zooko@zooko.com**20071015172504]
7193[setup: simplify the setup by removing the "tahoe dependencies" fake project
7194zooko@zooko.com**20080122143538
7195 Now we use "./setup.py develop" to ensure that changes to our source code are immediately used without requiring a "make" step.  This simplification will hopefully pave the way for easier py2exe and py2app, solving the "Unit tests test the installed version" bug (#145), and perhaps also #164 and #176.
7196 
7197 This patch also conditionalizes the use of setuptools_darcs on the absence of a PKG-INFO file, which is part of fixing #263.
7198]
7199[doc: emphasize in our "description" field that we are under a Free Software licence
7200czooko@zooko.com**20071016043509]
7201[setup: fix scheme ("file:") for download base for boostrapping setuptools
7202zooko@zooko.com**20071220221814]
7203[setup: fix typo in name of download base for bootstrapping setuptools
7204zooko@zooko.com**20071220221630]
7205[setup: small tidy-up of Make rules
7206zooko@zooko.com**20071222164631]
7207[setup: make dependency failures more helpful (thanks to Priyanka)
7208zooko@zooko.com**20071120060744]
7209[Makefile: check-deps: check for pycryptopp
7210warner@allmydata.com**20071108015046]
7211[setup: fix formatting of error messages from makefile
7212zooko@zooko.com**20071109191339]
7213[setup: formatting of dependency-missing errors
7214zooko@zooko.com**20070921214012]
7215[upgrade to foolscap-0.2.3
7216warner@lothar.com**20071224232327]
7217[setup: foolscap bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do.  :-)
7218zooko@zooko.com**20071222164920]
7219[setup: remove the hack to determine if we can avoid the explicit setuptools-managed dependency on nevow (which was useful for building on dapper)
7220zooko@zooko.com**20080110195800
7221 For simplicity, and to avoid weird failure modes that result from importing nevow during the build process, we now simply require nevow >= 0.6.0.  We currently bundle in misc/dependencies nevow v0.9.18, which will not work on Dapper, since it requires Twisted >= 2.4.0, and Dapper comes with Twisted 2.2.0.  Dapper users can (a) install a newer Twisted, (b) install nevow 0.6.0 in egg form so that setuptools can tell that it is installed (without importing it), (c) beg us to start shipping nevow 0.6.0 instead of nevow 0.9.18 in our bundle.
7222 
7223]
7224[setup: update the version numbers of packages that we require, add zope.interface to our requirements, make nevow >= 0.6.0 always be a requirement
7225zooko@zooko.com**20080110195639]
7226[docs: add require version numbers of deps to install.html, move pywin32 from install.html to install-details.html, change ref to install-details.html in install.html
7227zooko@zooko.com**20080110193530]
7228[quick hacks to make install-details.html viewable as html
7229robk-tahoe@allmydata.com**20080104233415]
7230[docs: make it so that people will stop experiencing build failure due to g++ not being installed
7231zooko@zooko.com**20080108170329]
7232[docs: fix hyperlinks from install.html to the Win32 and Cygwin notes
7233zooko@zooko.com**20080108173848]
7234[setup: shebang usr bin env python
7235zooko@zooko.com**20080110200131]
7236[setup: remove hard import of ez_setup -- we can proceed even if ez_setup can't be imported
7237zooko@zooko.com**20080110200152]
7238[setup: require setuptools >= v0.6c6 on all platforms
7239zooko@zooko.com**20080110200213
7240 Technically, we could get away with v0.6c5 or v0.6c4 on non-cygwin platforms, but if someone currently doesn't have setuptools >= v0.6c6 installed then our setup process will just use our bundled setuptools v0.6c7 anyway, so it will still work, and this makes the setup.py and the accompanying documentation simpler.
7241 
7242]
7243[setup: fix the name of "misc/dependencies" for bootstrapping setuptools
7244zooko@zooko.com**20071220221310]
7245[setup: use os.path.join('misc', 'dependencies') instead of "misc/dependencies"
7246zooko@zooko.com**20071220220717
7247 In the hopes that this will make the boostrapping of setuptools from its bundled egg work on Windows.
7248]
7249[build-deps-setup.py: import twisted early, to make setuptools on dapper use the right version
7250warner@allmydata.com**20080111021502]
7251[setup: fix name of setup script again
7252zooko@zooko.com**20080112004603]
7253[setup: fix name of setup script
7254zooko@zooko.com**20080112004448]
7255[setup: switch back from using "misc/dependencies/setup.py easy_install --always-unzip misc/dependencies" to using "misc/dependencies/setup.py install"
7256zooko@zooko.com**20080112004043
7257 because I don't fully understand the former, I suspect it of being implicated in the current buildslave redness, and we require --always-unzip solely for py2exe.
7258]
7259[setup: if the build fails, make returns a failure exit code
7260zooko@zooko.com**20080111204331]
7261[resolve makefile conflicts
7262robk-tahoe@allmydata.com**20080110032115
7263 
7264 and surpress echo of echoes
7265]
7266[setup: fix it to direct the user to install.html in case of build failure
7267zooko@zooko.com**20080108163949]
7268[setup: attempt to work-around the problem that paths might end with trailing back-slashes (on Windows) by appending a PATHSEP (i.e. ":" or ";") instead of an OSSEP (i.e. "/" or "\")
7269zooko@zooko.com**20071004211116
7270 
7271 I don't know what will happen if the path ends up with something like
7272 "C:\Programs and Files\Whatever\;" on Windows, and then that gets passed to
7273 cygwin bash.  This reminds me of Brian's suggestion to use Python helper
7274 scripts (c.f. misc/find-dep-eggs.py) instead of writing this stuff in the
7275 GNUmake language.  And *that* reminds me of the idea of writing the whole damn
7276 thing in Python instead of in GNUmake, i.e. make all of our build tools be
7277 plugins for setuptools instead of being GNUmake targets.
7278 
7279]
7280[Makefile: attempt to workaround problem caused by workaround for backslashes glomming onto the following double-quote. ...
7281zooko@zooko.com**20070921000254]
7282[silence warning when building
7283zooko@zooko.com**20070411155059]
7284[Makefile: end PYTHONPATH with "." because the string might end with "\", which will cause shell to later escape whatever character comes after the string
7285zooko@zooko.com**20070920032654]
7286[setup: direct user to doc/install.html if the build fails
7287zooko@zooko.com**20080107232302]
7288[Makefile: don't run darcsver if we already have _version.py. Ought to fix building on non-darcs checkouts, and close #257
7289warner@allmydata.com**20080104232546]
7290[Makefile: run 'make-version' at least once, in the 'build' target, to make sure we populate src/allmydata/_version.py
7291warner@allmydata.com**20080103203333]
7292[setup: "make" now defaults to "simple-build", which depends on build-deps
7293zooko@zooko.com**20080101064430
7294 This is for conformance with the simple new install.html.  People who don't want build-deps can run "make build".
7295]
7296[Makefile: add suggestion about how to use the distutils config file to select mingw32 compiler
7297zooko@zooko.com**20070914012000]
7298[Makefile: make it clear that it requires GNU Make
7299warner@allmydata.com**20070711203955]
7300[setup: we needn't depend on make-version targets because setup.py always attempts to make a version whenever it is executed
7301zooko@zooko.com**20071004211448]
7302[tweaks to build process to support py2exe
7303robk-tahoe@allmydata.com**20080110010253
7304 
7305 py2exe is unable to handle .eggs which are packaged as zip files
7306 in preference it will pull in other versions of libraries if they
7307 can be found in the environment.
7308 
7309 this changes causes .eggs to be built as .egg directories, which
7310 py2exe can handle.
7311]
7312[setup: add back "build-deps" as an alias for "build-auto-deps" since I don't know how to configure the buildmaster
7313zooko@zooko.com**20080101075802
7314 And I am very tired.
7315 
7316]
7317[setup: rename build-deps to build-auto-deps
7318zooko@zooko.com**20080101074921]
7319[setup: finish renaming of docs/testnet to docs/testgrid
7320zooko@zooko.com**20080101053659]
7321[setup: setup_requires twisted, because foolscap <= 0.2.5 imports twisted in its setup.py and because we want trial to be available at build time
7322zooko@zooko.com**20080409183053]
7323[setup_require pyutil >= 1.3.16, as the Windows installer builder's misc/sub-ver.py relies on it
7324zooko@zooko.com**20080311031321]
7325[setup: use darcsver instead of pyutil for darcsver, use setup.py plugin instead of executable for darcsver
7326zooko@zooko.com**20080101052831
7327 This hopefully fixes the deb builders.
7328]
7329[setup: refactor ez_setup.py and setup.py to satisfy the Desert Island scenario, to find and use setuptools egg in-place in misc/dependencies, and make it setup_require pyutil (for darcsver)
7330zooko@zooko.com**20071222164447]
7331[setup: leave the "file:" off the front of your URLs and setuptools (v0.6c7) will treat them as not-URLs which means it will prefer them to HTTP: URLs
7332zooko@zooko.com**20070920222912]
7333[setup: automatically discover files to include in packages
7334zooko@zooko.com**20071110000419
7335 (Because they are python packages or because they are registered under darcs revision control.)
7336 
7337]
7338[setup.py: don't install allmydata.Crypto.PublicKey either
7339Brian Warner <warner@lothar.com>**20070816075452]
7340[setup: setup_requires setuptools_darcs_plugin.  Without it the "./setup.py sdist upload" will silently upload the wrong package contents.
7341zooko@zooko.com**20071013203818
7342 
7343]
7344[setup.py: arg, another stupid paste error, affecting cygwin
7345warner@allmydata.com**20071211021734]
7346[setup.py: fix stupid cut-and-paste error
7347warner@allmydata.com**20071211020838]
7348[build-deps: require setuptools 0.6c4 or later, because older ones don't allow foolscap to use os.random at import time
7349warner@allmydata.com**20071211020659]
7350[move to foolscap-0.2.2
7351warner@lothar.com**20071213022145]
7352[upgrade to foolscap-0.2.1, with a new logging framework
7353warner@lothar.com**20071211003508]
7354[upgrade to foolscap-0.1.7
7355warner@allmydata.com**20070927012451]
7356[add foolscap tarball to misc/dependencies
7357zooko@zooko.com**20070913215023]
7358[setup: bundle setuptools_darcs plugin in misc/dependencies
7359zooko@zooko.com**20071213012042]
7360[setup: copy in the latest version of ez_setup.py, which works even if setuptools is already imported, or can be imported, into the current Python interpreter, but can't be imported into a new Python interpreter in a subprocess
7361zooko@zooko.com**20071222052620
7362 This actually happens in practice -- this fixes the Desert Island scenario.  Thanks to PJE.
7363]
7364[setup: make ez_setup.py work to upgrade setuptools even if there is already a setuptools installed which is too old
7365zooko@zooko.com**20071013055937
7366 
7367 This works only if setup.py is invoked as "./setup.py install" (or
7368 "python ./setup.py install" or whatever).  It doesn't work if it is invoked by
7369 easy_install.  On the other hand, I don't know why easy_install would execute
7370 ez_setup.py anyway -- I thought that it didn't execute the setup.py scripts. 
7371 See this mailing list thread for details:
7372 
7373 http://mail.python.org/pipermail/distutils-sig/2007-October/008339.html
7374 
7375]
7376[setup: patch to fix bug in our latest ez_setup.py if pkg_resources can't be imported
7377zooko@zooko.com**20071004200920]
7378[setup: bundle pyutil-1.3.16.tar
7379zooko@zooko.com**20080311025818]
7380[node.py: add BASEDIR/keepalive_timeout and BASEDIR/disconnect_timeout, to set/enable the foolscap timers, for #521
7381warner@allmydata.com**20080924175112]
7382[manhole: be more tolerant of authorized_keys. files in .tahoe
7383robk-tahoe@allmydata.com**20080925031149
7384 
7385 both peter and I independently tried to do the same thing to eliminate the
7386 authorized_keys file which was causing problems with the broken mac build
7387 (c.f. #522) namely mv authorized_keys.8223{,.bak}  but the node is, ahem,
7388 let's say 'intolerant' of the trailing .bak - rather than disable the
7389 manhole as one might expect, it instead causes the node to explode on
7390 startup.  this patch makes it skip over anything that doesn't pass the
7391 'parse this trailing stuff as an int' test.
7392]
7393[storage: add remote_advise_corrupt_share, for clients to tell storage servers about share corruption that they've discovered. The server logs the report.
7394warner@lothar.com**20081024185248]
7395[remove unused import (thanks, pyflakes)
7396zooko@zooko.com**20080131230059]
7397[repairer: test all different kinds of corruption that can happen to share files on disk
7398zooko@zooko.com**20081014230920]
7399[storage: remove update_write_enabler method, it won't serve the desired purpose, and I have a better scheme in mind. See #489 for details
7400warner@lothar.com**20080722002828]
7401[repairer: fix swapped docstrings; thanks Brian
7402zooko@zooko.com**20080925182436]
7403[#527: expire the cached files that are used to support Range: headers, every hour, when the file is unused and older than an hour
7404warner@allmydata.com**20081030203909]
7405[immutable, checker, and tests: improve docstrings, assertions, tests
7406zooko@zooko.com**20081221210752
7407 Ignore-this: 403ed5ca120d085d582cd5695d8371f
7408 No functional changes, but remove unused code, improve or fix docstrings, etc.
7409]
7410[immutable: use new logging mixins to simplify logging
7411zooko@zooko.com**20081217000450
7412 Ignore-this: 7d942905d1ea8f34753dbb997e1857f3
7413]
7414[download.py: make logging safe in ValidatedBucket
7415warner@allmydata.com**20080206085034]
7416[download: refactor handling of URI Extension Block and crypttext hash tree, simplify things
7417zooko@zooko.com**20081205141754
7418 Ignore-this: 51b9952ea2406b0eea60e8d72654fd99
7419 
7420 Refactor into a class the logic of asking each server in turn until one of them gives an answer
7421 that validates.  It is called ValidatedThingObtainer.
7422 
7423 Refactor the downloading and verification of the URI Extension Block into a class named
7424 ValidatedExtendedURIProxy.
7425 
7426 The new logic of validating UEBs is minimalist: it doesn't require the UEB to contain any
7427 unncessary information, but of course it still accepts such information for backwards
7428 compatibility (so that this new download code is able to download files uploaded with old, and
7429 for that matter with current, upload code).
7430 
7431 The new logic of validating UEBs follows the practice of doing all validation up front.  This
7432 practice advises one to isolate the validation of incoming data into one place, so that all of
7433 the rest of the code can assume only valid data.
7434 
7435 If any redundant information is present in the UEB+URI, the new code cross-checks and asserts
7436 that it is all fully consistent.  This closes some issues where the uploader could have
7437 uploaded inconsistent redundant data, which would probably have caused the old downloader to
7438 simply reject that download after getting a Python exception, but perhaps could have caused
7439 greater harm to the old downloader.
7440 
7441 I removed the notion of selecting an erasure codec from codec.py based on the string that was
7442 passed in the UEB.  Currently "crs" is the only such string that works, so
7443 "_assert(codec_name == 'crs')" is simpler and more explicit.  This is also in keeping with the
7444 "validate up front" strategy -- now if someone sets a different string than "crs" in their UEB,
7445 the downloader will reject the download in the "validate this UEB" function instead of in a
7446 separate "select the codec instance" function.
7447 
7448 I removed the code to check plaintext hashes and plaintext Merkle Trees.  Uploaders do not
7449 produce this information any more (since it potentially exposes confidential information about
7450 the file), and the unit tests for it were disabled.  The downloader before this patch would
7451 check that plaintext hash or plaintext merkle tree if they were present, but not complain if
7452 they were absent.  The new downloader in this patch complains if they are present and doesn't
7453 check them.  (We might in the future re-introduce such hashes over the plaintext, but encrypt
7454 the hashes which are stored in the UEB to preserve confidentiality.  This would be a double-
7455 check on the correctness of our own source code -- the current Merkle Tree over the ciphertext
7456 is already sufficient to guarantee the integrity of the download unless there is a bug in our
7457 Merkle Tree or AES implementation.)
7458 
7459 This patch increases the lines-of-code count by 8 (from 17,770 to 17,778), and reduces the
7460 uncovered-by-tests lines-of-code count by 24 (from 1408 to 1384).  Those numbers would be more
7461 meaningful if we omitted src/allmydata/util/ from the test-coverage statistics.
7462 
7463]
7464[remove left-over early encode mechanism
7465zooko@zooko.com**20070328070603]
7466[encode: delay completion until all our messages have been delivered
7467warner@lothar.com**20061203065338]
7468[download.py: don't truncate tail segments that are the same size as all the others
7469warner@allmydata.com**20070417203935]
7470[hashtree.BadHashError: mention which leaf caused the problem
7471warner@lothar.com**20070607193822]
7472[disable plaintext hashes in shares, but leave a switch to turn it back on
7473warner@allmydata.com**20080324203951]
7474[immutable file download: make the ciphertext hash tree mandatory
7475zooko@zooko.com**20080721163102
7476 This fixes #491 (URIs do not refer to unique files in Allmydata Tahoe).
7477 Fortunately all of the versions of Tahoe currently in use are already producing
7478 this ciphertext hash tree when uploading, so there is no
7479 backwards-compatibility problem with having the downloader require it to be
7480 present.
7481 
7482]
7483[download: make plaintext and ciphertext hashes in the UEB optional.
7484warner@lothar.com**20080323214649
7485 Removing the plaintext hashes can help with the guess-partial-information
7486 attack. This does not affect compatibility, but if and when we actually
7487 remove any hashes from the share, that will introduce a
7488 forwards-compatibility break: tahoe-0.9 will not be able to read such files.
7489 
7490]
7491[upload: stop putting plaintext and ciphertext hashes in shares.
7492warner@lothar.com*-20080323223554
7493 This removes the guess-partial-information attack vector, and reduces
7494 the amount of overhead that we consume with each file. It also introduces
7495 a forwards-compability break: older versions of the code (before the
7496 previous download-time "make hashes optional" patch) will be unable
7497 to read files uploaded by this version, as they will complain about the
7498 missing hashes. This patch is experimental, and is being pushed into
7499 trunk to obtain test coverage. We may undo it before releasing 1.0.
7500 
7501]
7502[upload: stop putting plaintext and ciphertext hashes in shares.
7503warner@lothar.com**20080323223554
7504 This removes the guess-partial-information attack vector, and reduces
7505 the amount of overhead that we consume with each file. It also introduces
7506 a forwards-compability break: older versions of the code (before the
7507 previous download-time "make hashes optional" patch) will be unable
7508 to read files uploaded by this version, as they will complain about the
7509 missing hashes. This patch is experimental, and is being pushed into
7510 trunk to obtain test coverage. We may undo it before releasing 1.0.
7511 
7512]
7513[dump-cap: include UEB_hash in output
7514warner@allmydata.com**20080206184819]
7515[move netstring() and split_netstring() into a separate util.netstring module
7516warner@allmydata.com**20080926043824]
7517[#527: respond to GETs with early ranges quickly, without waiting for the whole file to download. Fixes the alacrity problems with the earlier code. Still needs cache expiration.
7518warner@allmydata.com**20081029005618]
7519[web: add 'Repair' button to checker results when they indicate unhealthyness. Also add the object's uri to the CheckerResults instance.
7520warner@allmydata.com**20081030010917]
7521[util: logging: refactor some common logging behavior into mixins
7522zooko@zooko.com**20081216233807
7523 Ignore-this: d91408bc984d1cf1fae30134f6cddb13
7524]
7525[log.py: update log.err() to take advantage of current foolscap's log.err
7526warner@allmydata.com**20080131004723]
7527[util.log: add levels like UNUSUAL
7528warner@allmydata.com**20080107233245]
7529[util: add gatherResults which is a deferred-list-like thing that doesn't wrap failures in a FirstError
7530zooko@zooko.com**20090104165202
7531 Ignore-this: a284fb8ab8a00a39416a67dc5d9a451e
7532]
7533[util: dictutil: add DictOfSets.union(key, values) and DictOfSets.update(otherdictofsets)
7534zooko@zooko.com**20090112165539
7535 Ignore-this: 84fb8a2793238b077a7a71aa03ae9d2
7536]
7537[util.dictutil: move DictOfSets out to a separate utility module
7538warner@allmydata.com**20080521164349]
7539[test_cli: increase timeout on test_backup, since our dapper buildslave is really slow
7540warner@lothar.com**20090206081753]
7541[Add dirnodes to backupdb and "tahoe backup", closes #606.
7542Brian Warner <warner@lothar.com>**20091126234257
7543 Ignore-this: fa88796fcad1763c6a2bf81f56103223
7544 
7545 * backups now share dirnodes with any previous backup, in any location,
7546   so renames and moves are handled very efficiently
7547 * "tahoe backup" no longer bothers reading the previous snapshot
7548 * if you switch grids, you should delete ~/.tahoe/private/backupdb.sqlite,
7549   to force new uploads of all files and directories
7550]
7551[Raise a more explanatory exception for errors encountered during backup processing.
7552Alberto Berti <alberto@metapensiero.it>**20090222170252
7553 Ignore-this: f6b8ffe2a903ba07a2c1c59130dac1e4
7554]
7555[Add elapsed timestamp to cli backup command final summary.
7556Alberto Berti <alberto@metapensiero.it>**20090224171425
7557 Ignore-this: 9a042d11f95ee9f6858a5096d513c0bc
7558]
7559[Two small fixes on documentation for cli backup command.
7560Alberto Berti <alberto@metapensiero.it>**20090224223634
7561 Ignore-this: 5634a6dadad6e4e43a112de7fe5c74c
7562]
7563[tahoe_backup.py: tolerate more time formats
7564warner@allmydata.com**20090313011600
7565 Ignore-this: ca74f56f0dce7d19810c5a7a75bc623c
7566]
7567[hashutil: add constant-time comparison function, to avoid timing attacks when python's short-circuiting data-dependent == operator is used to, say, check a write-enabler
7568warner@lothar.com**20090323032055
7569 Ignore-this: c5c1f5e529ab1b352c949f3e0d9abf20
7570]
7571[util/abbreviate: little utility to abbreviate seconds and bytes
7572warner@allmydata.com**20081119021142]
7573[move testutil into test/common_util.py, since it doesn't count as 'code under test' for our pyflakes numbers
7574warner@allmydata.com**20081029042831]
7575[mutable WIP: clean up status handling, shrink the code a lot, improve test coverage
7576warner@allmydata.com**20080417200222]
7577[web-status: client methods like list_all_uploads() return Upload instances,
7578warner@allmydata.com**20080327012007
7579 not status instances. Fix this. The symptom was that following a link like
7580 'up-123' that referred to an old operation (no longer in memory) while an
7581 upload was active would get an ugly traceback instead of a "no such resource"
7582 message.
7583 
7584]
7585[download: fix stopProducing failure ('self._paused_at not defined'), add tests
7586warner@allmydata.com**20080714222521]
7587[download status: add time spent paused by the client (when we're serving over a slow HTTP link)
7588warner@allmydata.com**20080421191917]
7589[test_web: more test coverage
7590warner@lothar.com**20081024001118]
7591[interfaces.py: promote immutable.encode.NotEnoughSharesError.. it isn't just for immutable files any more
7592warner@lothar.com**20081027203449]
7593[encode: actually define the UploadAborted exception
7594warner@allmydata.com**20080115032702]
7595[storage: split WriteBucketProxy and ReadBucketProxy out into immutable/layout.py . No behavioral changes.
7596warner@allmydata.com**20081010000800]
7597[storage.py: turn some assertions into preconditions
7598warner@lothar.com**20070714023048]
7599[WriteBucketProxy: improve __repr__
7600warner@allmydata.com**20080129005351]
7601[upload: abort the bucket upon any write error, and do it with callRemoteOnly to avoid double errors
7602warner@allmydata.com**20080610185528]
7603[storage.ReadBucketProxy: avoid double-start, this only affected tests
7604warner@allmydata.com**20080618000129]
7605[storage: add add_lease/update_write_enabler to remote API, revamp lease handling
7606warner@lothar.com**20080710010655]
7607[storage: remove unused delete_bucket() method, lease-cancellation covers it
7608warner@lothar.com**20070902220029]
7609[storage: always record lease expiration times as integers
7610warner@lothar.com**20070911215331]
7611[docs: fix a few stale comments in code
7612zooko@zooko.com**20080507153903]
7613[increase remote-interface size limits to 16EiB by not casually using 'int' as a constraint
7614warner@lothar.com**20080311175031]
7615[storage: improve stats, make them accessible via webport /statistics
7616warner@allmydata.com**20080616233559]
7617[stats gathering: fix storage server stats if not tracking consumed
7618robk-tahoe@allmydata.com**20080410012306
7619 
7620 the RIStatsProvider interface requires that counter and stat values be
7621 ChoiceOf(float, int, long)  the recent changes to storage server to not
7622 track 'consumed' led to returning None as the value of a counter.
7623 this causes violations to be experienced by nodes whose stats are being
7624 gathered.
7625 
7626 this patch simply omits that stat if 'consumed' is not being tracked.
7627]
7628[test_storage: add coverage for discard_storage
7629warner@allmydata.com**20080617005240]
7630[test_storage: add coverage for readonly_storage
7631warner@allmydata.com**20080617005213]
7632[test_storage.py: improve test coverage
7633warner@allmydata.com**20080618000142]
7634[storage: ignore shares in incoming/, to make clients use other servers during simultaneous uploads
7635warner@allmydata.com**20080610185310]
7636[storage: measure latency-per-operation, calculate mean/median/percentiles
7637warner@allmydata.com**20080616222155]
7638[storage: emit log messages on bucket allocate/read and mutable writev
7639warner@allmydata.com**20080328003358]
7640[don't do a du on startup if there is no size limit configured
7641zooko@zooko.com**20080408183656
7642 This also turns off the production of the "space measurement done" log message, if there is no size limit configured.
7643]
7644[scripts/debug: split out dump_immutable_share
7645warner@allmydata.com**20080812205517]
7646[scripts/debug: clean up use of stdout/stderr
7647warner@allmydata.com**20080812205242]
7648[dump-share: tweak formatting a little bit, to make dumping multiple shares in a row easier to read
7649warner@allmydata.com**20080206193743]
7650[dump-share: clarify the label on the size of the original file
7651warner@allmydata.com**20070926220059]
7652['tahoe dump-share': show verify-cap too
7653warner@lothar.com**20080707211102]
7654[debug.py: add share-overhead size info to dump-uri-extension
7655warner@lothar.com**20070827064239]
7656[stop using 'as' as an identifier: as with 'with', 'as' has become a reserved word in python 2.6
7657warner@allmydata.com**20081003002749]
7658[dirnode lookup: use distinct NoSuchChildError instead of the generic KeyError when a child can't be found
7659warner@lothar.com**20081027201525]
7660[dirnode: add get_child_and_metadata_at_path
7661warner@allmydata.com**20081003005203]
7662[util: move PollMixin to a separate file (pollmixin.py), so testutil can be moved into test/
7663warner@allmydata.com**20081029041548]
7664[client: add 'node.uptime' to the stats we collect
7665warner@allmydata.com**20080417181339]
7666[test_stats.py: improve test coverage
7667warner@allmydata.com**20080430185231]
7668[stats: add tests for CPUUsageMonitor, modify it a bit to facilitate testing
7669warner@allmydata.com**20080430183913]
7670[stats: add CPU-percentage monitor, with 1min/5min/15min moving-window averages, using time.clock()
7671warner@allmydata.com**20080430011253]
7672[introducer: add old (V1) introducer code, add test framework for compatibility testing
7673warner@allmydata.com**20080618235834]
7674[test_introducer.py: don't log nodeids as binary goop
7675warner@allmydata.com**20080422195416]
7676[repair: fix test to map from storage index to directory structure properly (thanks, cygwin buildbot, for being so kloodgey that you won't accept random binary filenames and thus making me notice this bug)
7677zooko@zooko.com**20080926224913]
7678[testutil.PollMixin: set default timeout (to 100s), emit a more helpful error when the timeout is hit
7679warner@allmydata.com**20080930052309]
7680[testutil.PollMixin: use a custom exception (and convert it) to avoid the ugly 'stash' cycle
7681warner@allmydata.com**20080903033251]
7682[util/time_format.py: accept space separator, add unit tests
7683warner@allmydata.com**20081013225258]
7684[copy pyutil.time_format into src/allmydata/util
7685zooko@zooko.com**20070814163349
7686 time_format() provides a good format for logging timestamps
7687]
7688[add a basic concurrency limiter utility
7689warner@allmydata.com**20080507235330]
7690[test_util.py: get 100% test coverage for hashutil.py
7691warner@allmydata.com**20080304204225]
7692[trivial: fix comment
7693zooko@zooko.com**20090413174138
7694 Ignore-this: d45a9786c44793bc830dab1d8c9dd57c
7695]
7696[Use DIR-IMM and t=mkdir-immutable for "tahoe backup", for #828
7697Brian Warner <warner@lothar.com>**20091118192813
7698 Ignore-this: a4720529c9bc6bc8b22a3d3265925491
7699]
7700[#598: add cli+backupdb tests, improve user display, update docs, move docs out of proposed/
7701warner@allmydata.com**20090206040701
7702 Ignore-this: 7a795db5573247471c6a268fb0aa23c0
7703]
7704[docs: move files that are about future plans into docs/proposed/, to clearly separate them from descriptions of the present codebase
7705warner@allmydata.com**20080603060702]
7706[docs/mutable-DSA.svg: add a picture of the upcoming DSA-based mutable file structure
7707warner@allmydata.com**20080109020852]
7708[docs/mutable-DSA.txt: update mutable.txt to reflect our proposed DSA-based mutable file scheme (#217)
7709warner@lothar.com**20080111103058]
7710[docs: add some accounting proposals
7711warner@lothar.com**20080320191841]
7712[docs/backupdb.txt: preliminary sketch of our plans for the duplicate-upload-avoidance database
7713warner@allmydata.com**20080528232013]
7714[tests: fix comment
7715zooko@zooko.com**19700105101055
7716 Ignore-this: fabedea917895568b1fca75a480111b9
7717]
7718[tests: add tahoe_cp to the list of scripts that we don't actually have tests for yet
7719zooko@zooko.com**19700105100058
7720 Ignore-this: ac89583992fb1b48d9a4680344569d91
7721]
7722[#598: add backupdb to 'tahoe backup' command, enable it by default
7723warner@allmydata.com**20090206015640
7724 Ignore-this: 4e6a158d97549c55dbc49f6d69be8c44
7725]
7726[#598: first cut of 'tahoe backup' command: no backupdb, but yes shared-unchanged-directories and Archives/TIMESTAMP and Latest/
7727warner@allmydata.com**20090203030902
7728 Ignore-this: 650df5631523b63dd138978b8f3aa372
7729]
7730[CLI: make 'tahoe webopen' command accept aliases like 'tahoe ls'
7731warner@allmydata.com**20080812012023]
7732[test_cli.py: factor out CLITestMixin
7733warner@lothar.com**20080802022938]
7734[CLI: add create-alias command, to merge mkdir and add-alias into a single (secure-from-argv-snooping) step
7735warner@lothar.com**20080802021041]
7736[docs: CLI.txt: rewrite the way that "root directories" (now called "starting directories") and aliases are introduced
7737zooko@zooko.com**20080611193459]
7738['tahoe cp -r', upon encountering a dangling symlink, would assert out.
7739Larry Hosken <tahoe at lahosken.san-francisco.ca.us>**20090108055114
7740 Ignore-this: 46e75845339faa69ffb3addb7ce74f28
7741 This was somewhat sad; the assertion didn't say what path caused the
7742 error, what went wrong.  So... silently skip over things that are
7743 neither dirs nor files.
7744]
7745[CLI: remove 'tahoe admin generate-keypair', since the pycryptopp ecdsa API is about to change incompatibly. We'll undo this once pycryptopp is updated
7746warner@allmydata.com**20081007002320]
7747[test_cli: disable generate-keypair test on OS-X, pycryptopp still has a bug
7748warner@lothar.com**20080919193855]
7749[scripts/admin: split up generate_keypair code so that unit tests can use it more easily
7750warner@allmydata.com**20081001235238]
7751[CLI: add 'tahoe admin generate-keypair' command
7752warner@lothar.com**20080919001133]
7753[test_cli: more coverage for 'tahoe put' modifying a mutable file in-place, by filename, closes #441
7754warner@lothar.com**20080804202643]
7755[CLI: change one-arg forms of 'tahoe put' to make an unlinked file, fix replace-mutable #441
7756warner@lothar.com**20080802022729]
7757[CLI: improve docs w.r.t. aliases, add examples to 'tahoe put' and 'tahoe get' help output. Addresses part of #431
7758warner@allmydata.com**20080603005456]
7759[tests: simplify CLI tests that use stdin, now that runner supports it
7760warner@lothar.com**20080801220514]
7761[test_cli: add system-based tests for PUT, including a mutable put that fails/todo (#441)
7762warner@lothar.com**20080801221009]
7763[add sqlite-based backupdb, for #598 and others (including 'tahoe cp'). Not enabled yet.
7764warner@allmydata.com**20090206001756
7765 Ignore-this: 36d9a56b257e481091fd1a105318cc25
7766]
7767[docs/CLI: document 'tahoe backup'
7768warner@allmydata.com**20090206041445
7769 Ignore-this: 60dade71212f2a65d3c0aaca7fb8ba00
7770]
7771[CLI: add 'tahoe manifest', which takes a directory and returns a list of things you can reach from it
7772warner@allmydata.com**20081113021725]
7773[checker: add is_recoverable() to checker results, make our stub immutable-verifier not throw an exception on unrecoverable files, add tests
7774warner@allmydata.com**20081107043547]
7775[deep-check: add webapi links to detailed per-file/dir results
7776warner@lothar.com**20081023230031]
7777[test_system: update test to match web checker results
7778warner@lothar.com**20081023233202]
7779[#527: support HTTP 'Range:' requests, using a cachefile. Adds filenode.read(consumer, offset, size) method. Still needs: cache expiration, reduced alacrity.
7780warner@lothar.com**20081028204104]
7781[web: handle PUT mutable=true properly
7782warner@allmydata.com**20080520193602]
7783[web: for GET save=true, don't interpret the filename= arg with any character set, just copy the bytes back into the Content-Disposition header. This seems to make it maximally compatible with Firefox and IE7
7784warner@allmydata.com**20080719010650]
7785[docs: update webapi.txt with write-coordination issues, add TODO note to recovery section of mutable.txt
7786warner@allmydata.com**20080603060321]
7787[test_web: test that save=true filename=unicode doesn't crash
7788warner@allmydata.com**20080719015857]
7789[web: improve test coverage, remove some dead code
7790warner@allmydata.com**20080520181312]
7791[test_web: oops, actually use HEAD (instead of GET) in the HEAD test
7792warner@allmydata.com**20080813020451]
7793[test_web: workaround broken HEAD behavior in twisted-2.5.0 and earlier
7794warner@allmydata.com**20080813024520]
7795[test_system: add test coverage for immutable download.ConsumerAdapter, remove debug messages
7796warner@allmydata.com**20081006225037]
7797[ftp server: initial implementation. Still needs unit tests, custom Twisted patches. For #512
7798warner@allmydata.com**20081006195236]
7799[immutable: refactor immutable filenodes and comparison thereof
7800zooko@zooko.com**20080923185249
7801 * the two kinds of immutable filenode now have a common base class
7802 * they store only an instance of their URI, not both an instance and a string
7803 * they delegate comparison to that instance
7804]
7805[filenode: add is_mutable to non-MutableFileNode classes
7806warner@allmydata.com**20080519200300]
7807[immutable: remove unused imports (thanks, pyflakes)
7808zooko@zooko.com**20080923192610]
7809[more #514: pass a Monitor to all checker operations, make mutable-checker honor the cancel flag
7810warner@lothar.com**20081022083818]
7811[mutable: more repair tests, one with force=True to check out merging
7812warner@lothar.com**20080806190607]
7813[test_mutable: factor out common setup code
7814warner@lothar.com**20080806173804]
7815[test_mutable.py: add more tests of post-mapupdate corruption, to support #474 testing
7816warner@allmydata.com**20080624180810]
7817[testutil.shouldFail: mention the 'which' string in substring failures too
7818warner@allmydata.com**20080516230838]
7819[test_mutable: add comment about minimal-bandwidth repairer, comma lack of
7820warner@lothar.com**20080806173850]
7821[mutable: start adding Repair tests, fix a simple bug
7822warner@lothar.com**20080806061239]
7823[web: use get_size_of_best_version for HEAD requests, provide correct content-type
7824warner@allmydata.com**20080813020410]
7825[repairer: assert that the test code isn't accidentally allowing the repairer code which is being tested to do impossible things
7826zooko@zooko.com**20080926222353]
7827[repairer: enhance the repairer tests
7828zooko@zooko.com**20080926174719
7829 Make sure the file can actually be downloaded afterward, that it used one of the
7830 deleted and then repaired shares to do so, and that it repairs from multiple
7831 deletions at once (without using more than a reasonable amount of calls to
7832 storage server allocate).
7833]
7834[repairer: remove a test that doesn't apply to the repair-from-corruption case
7835zooko@zooko.com**20080925220954]
7836[repairer: add a test that repairer fixes corrupted shares (in addition to the test that it fixes deleted shares)
7837zooko@zooko.com**20080925220712]
7838[dirnode.py: check for cancel during deep-traverse operations, and don't initiate any new ones if we've been cancelled. Gets us closer to #514.
7839warner@lothar.com**20081022075552]
7840[Change deep-size/stats/check/manifest to a start+poll model instead of a single long-running synchronous operation. No cancel or handle-expiration yet. #514.
7841warner@lothar.com**20081022000307]
7842[web: factor out identical renderHTTP methods
7843warner@allmydata.com**20080519221925]
7844[test/common: add ShouldFailMixin
7845warner@lothar.com**20080806190552]
7846[repairer: add basic test of repairer, move tests of immutable checker/repairer from test_system to test_immutable_checker, remove obsolete test helper code from test_filenode
7847zooko@zooko.com**20080925171653
7848 Hm...  "Checker" ought to be renamed to "CheckerRepairer" or "Repairer" at some point...
7849]
7850[tests: use the handy dandy TestCase.mktemp() function from trial to give unique and nicely named directories for each testcase
7851zooko@zooko.com**20080730224920]
7852[tests: don't use SignalMixin
7853zooko@zooko.com**20080730223536
7854 It seems like we no longer need it, and it screws up something internal in
7855 trial which causes trial's TestCase.mktemp() method to exhibit wrong behavior
7856 (always using a certain test method name instead of using the current test
7857 method name), and I wish to use TestCase.mktemp().
7858 
7859 Of course, it is possible that the buildbot is about to tell me that we do
7860 still require SignalMixin on some of our platforms...
7861 
7862]
7863[test_system: rename Checker to ImmutableChecker, to make room for a mutable one
7864warner@allmydata.com**20080812225932]
7865[setup: remove a few minimal unit tests from test_filenode which have been obviated by much better tests in test_mutable and test_system
7866zooko@zooko.com**20080925161544]
7867[disallow deep-check on non-directories, simplifies the code a bit
7868warner@allmydata.com**20080910204458]
7869[trivial: remove unused imports -- thanks, pyflakes
7870zooko@zooko.com**20080925173453]
7871[test_system: factor out find_shares/replace_shares to a common class, so they can be used by other tests
7872warner@lothar.com**20080806014958]
7873[web: rewrite t=deep-size in terms of deep-stats, update test to match inclusion of directory sizes
7874warner@allmydata.com**20081007043539]
7875[web: change t=manifest to return a list of (path,read/writecap) tuples, instead of a list of verifycaps. Add output=html,text,json.
7876warner@allmydata.com**20081007043618]
7877[webapi.txt: explain that t=manifest gives verifycaps
7878warner@allmydata.com**20080907192950]
7879[dirnode: refactor recursive-traversal methods, add stats to deep_check() method results and t=deep-check webapi
7880warner@lothar.com**20080910084504]
7881[dirnode: use the concurrency limiter in t=manifest and t=deep-size, allow 10 retrievals in parallel
7882warner@allmydata.com**20080508013637]
7883[web: add 'more info' pages for files and directories, move URI/checker-buttons/deep-size/etc off to them
7884warner@lothar.com**20080918050041]
7885[directory.xhtml: oops, missed a comma
7886warner@lothar.com**20070708074408]
7887[directory.xhtml: remove the leftover XML link
7888warner@lothar.com**20070708073320]
7889[web: more mutable-file coverage
7890warner@allmydata.com**20080520183547]
7891[hush pyflakes
7892warner@allmydata.com**20080910025017]
7893[test_system: add deep-check-JSON tests, fix a bug
7894warner@lothar.com**20080910061416]
7895[test_system: check t=deep-stats too
7896warner@lothar.com**20080910065457]
7897[test_system: add deep-stats test
7898warner@lothar.com**20080910055634]
7899[web: fix output=JSON, add buttons for repair/json to the 'run deep-check' form
7900warner@allmydata.com**20080910211137]
7901[checker results: add output=JSON to webapi, add tests, clean up APIs
7902warner@allmydata.com**20080910024517
7903 to make the internal ones use binary strings (nodeid, storage index) and
7904 the web/JSON ones use base32-encoded strings. The immutable verifier is
7905 still incomplete (it returns imaginary healty results).
7906]
7907[immutable verifier: provide some dummy results so deep-check works, make the tests ignore these results until we finish it off
7908warner@allmydata.com**20080910010827]
7909[mutable checker: even more tests. Everything in ICheckerResults should be covered now, except for immutable-verify which is incomplete
7910warner@allmydata.com**20080910005706]
7911[checker results: more tests, update interface docs
7912warner@allmydata.com**20080910003010]
7913[checker results: more tests, more results. immutable verifier tests are disabled until they emit more complete results
7914warner@allmydata.com**20080910001546]
7915[checker: add tests, add stub for immutable check_and_repair
7916warner@allmydata.com**20080909233449]
7917[checker: overhaul checker results, split check/check_and_repair into separate methods, improve web displays
7918warner@allmydata.com**20080907194456]
7919[hush pyflakes warning about code that got moved in the recent StallMixin refactoring
7920warner@allmydata.com**20080423001426]
7921[test_client.py: validate more versioning code
7922warner@allmydata.com**20080103203824]
7923[test_client.py: assert allmydata.__version__ is not unknown
7924warner@allmydata.com**20080103203459]
7925[dirnode deep-check: add tests of cycles, fix failures
7926warner@allmydata.com**20080717213704]
7927[oops, fix import/pyflakes problems
7928warner@allmydata.com**20080718000620]
7929[checker_results.problems: don't str the whole Failure, just extract the reason string
7930warner@allmydata.com**20080812042306]
7931[dirnode: add some deep-check logging
7932warner@allmydata.com**20080812042338]
7933[hush a pyflakes warning
7934warner@allmydata.com**20080812042423]
7935[checker: add information to results, add some deep-check tests, fix a bug in which unhealthy files were not counted
7936warner@allmydata.com**20080812040326]
7937[IFilesystemNode: add get_storage_index(), it makes tests easier
7938warner@allmydata.com**20080812231407]
7939[web/deep-check: show the webapi runtime at the bottom of the page
7940warner@allmydata.com**20080813033426]
7941[immutable checker: add a status_report field
7942warner@allmydata.com**20080813033530]
7943[logging: add 'unique-message-ids' (or 'umids') to each WEIRD-or-higher log.msg call, to make it easier to correlate log message with source code
7944warner@allmydata.com**20080826015759]
7945[download: DownloadStopped isn't SCARY, lower the log severity
7946warner@allmydata.com**20080415230609]
7947[client: don't start the IntroducerClient until the Tub is ready, otherwise we will sometimes connect to the introducer (or other clients) before we've done Tub.setLocation, which loses some information on the introducer status page
7948warner@allmydata.com**20080423215234]
7949[web: add 'report incident' button at the bottom of the welcome page
7950warner@lothar.com**20080805190921]
7951[wui: reorganize the welcome.xhtml page
7952zooko@zooko.com**20080429221014
7953 Jake Edge tried Tahoe out and didn't notice the /status page.  Hopefully with this new organization people like he will see that link more easily.  This also addresses drewp's suggestion that the controls appear above the list of servers instead of below.  (I think that was his suggestion.)  I also reordered the controls.
7954]
7955[mutable/checker: log a WEIRD-level event when we see a hash failure, to trigger an Incident
7956warner@allmydata.com**20080813035020]
7957[logging cleanups: lower DeadReferenceError from WEIRD (which provokes Incidents) to merely UNUSUAL, don't pre-format Failures in others
7958warner@allmydata.com**20080826005155]
7959[mutable read: enable the cache (written during mapupdate, read during retrieve). This speeds up small-file reads by about 30% over a link with an average 25ms RTT
7960warner@allmydata.com**20080422002750]
7961[mutable: make mutable-repair work for non-verifier runs, add tests
7962warner@allmydata.com**20080826233454]
7963[mutable/checker: rearrange a bit, change checker-results to have a status_report string
7964warner@allmydata.com**20080812032033]
7965[first pass at a mutable repairer. not tested at all yet, but of course all existing tests pass
7966warner@allmydata.com**20080718040923]
7967[interfaces: add IRepairable
7968warner@allmydata.com**20080718003217]
7969[mutable/servermap: add summarize_version
7970warner@allmydata.com**20080812031930]
7971[CLI: add 'tahoe debug corrupt-share', and use it for deep-verify tests, and fix non-deep web checker API to pass verify=true into node
7972warner@allmydata.com**20080813000501]
7973[tests: add test that verifier notices any (randomly chosen) bit flipped in the verifiable part of any (randomly chosen) share
7974zooko@zooko.com**20080731002015
7975 The currently verifier doesn't (usually) pass this randomized test, hence the TODO.
7976]
7977[tests: test that checker doesn't cause reads on the storage servers
7978zooko@zooko.com**20080730235420
7979 It would still pass the test if it noticed a corrupted share.  (It won't
7980 notice, of course.)  But it is required to do its work without causing storage
7981 servers to read blocks from the filesystem.
7982 
7983]
7984[tests: add test_system.Checker which tests basic checking (without verification) functionality
7985zooko@zooko.com**20080728234317]
7986[test_system.py: factor SystemTestMixin out of SystemTest
7987warner@allmydata.com**20080725223349]
7988[test_system.py: add a log message to help track down the occasional cygwin failure
7989warner@allmydata.com**20070531190114]
7990[offloaded: fix failure in unit test on windows
7991robk-tahoe@allmydata.com**20080118025729
7992 
7993 in trying to test my fix for the failure of the offloaded unit test on windows
7994 (by closing the reader before unlinking the encoding file - which, perhaps
7995 disturbingly doesn't actually make a difference in my windows environment)
7996 I was unable too because the unit test failed every time with a connection lost
7997 error.
7998 
7999 after much more time than I'd like to admit it took, I eventually managed to
8000 track that down to a part of the unit test which is supposed to be be dropping
8001 a connection.   it looks like the exceptions that get thrown on unix, or at
8002 least all the specific environments brian tested in, for that dropped
8003 connection are different from what is thrown on my box (which is running py2.4
8004 and twisted 2.4.0, for reference)  adding ConnectionLost to the list of
8005 expected exceptions makes the test pass.
8006 
8007 though curiously still my test logs a NotEnoughWritersError error, and I'm not
8008 currently able to fathom why that exception isn't leading to any overall
8009 failure of the unit test itself.
8010 
8011 for general interest, a large part of the time spent trying to track this down
8012 was lost to the state of logging.  I added a whole bunch of logging to try
8013 and track down where the tests were failing, but then spent a bunch of time
8014 searching in vain for that log output.  as far as I can tell at this point
8015 the unit tests are themselves logging to foolscap's log module, but that isn't
8016 being directed anywhere, so all the test's logging is being black holed.
8017 
8018]
8019[test_system.py: refactor bounce_client, probably make it stop failing on cygwin
8020warner@allmydata.com**20080211212658]
8021[break introducer up into separate modules in the new allmydata.introducer package
8022warner@allmydata.com**20080618192416]
8023[introducer: remove PeerCountObserver, tests are managing with purely poll-for-connected approachers
8024warner@allmydata.com**20080205201549]
8025[introducer.py: accelerate reconnection after being offline. Closes #374.
8026warner@allmydata.com**20080331222845
8027 
8028 When we establish any new connection, reset the delays on all the other
8029 Reconnectors. This will trigger a new batch of connection attempts. The idea
8030 is to detect when we (the client) have been offline for a while, and to
8031 connect to all servers when we get back online. By accelerating the timers
8032 inside the Reconnectors, we try to avoid spending a long time in a
8033 partially-connected state (which increases the chances of causing problems
8034 with mutable files, by not updating all the shares that we ought to).
8035]
8036[introducer: only record one announcement per (tubid,service) tuple. Fixes #343.
8037warner@allmydata.com**20080423220539]
8038[introducer: record a timestamp with each announcement, and display it on the introducer's web page
8039warner@allmydata.com**20080312023319]
8040[introweb.py: add ?t=json, to provide machine-readable subscriber counts
8041warner@allmydata.com**20080325195612]
8042[introducer: record a timestamp with each subscriber, and display it on the introducer's web page
8043warner@allmydata.com**20080312022837]
8044[introducer: remove encoding-parameter config, for now
8045warner@allmydata.com**20080213005954]
8046[introweb: combine announcement and subscriber information to show version+nickname for each client
8047warner@allmydata.com**20080312022129]
8048[oops, add introducer.xhtml
8049warner@allmydata.com**20080312004103]
8050[introweb.py: tolerate non-setLocationed client tubs
8051warner@allmydata.com**20080312010913]
8052[test_system.py: modify system-test setup code in preparation for merge with common.SystemTestMixin
8053warner@allmydata.com**20080725222931]
8054[tests: make it so that you can use common.py's SystemTestMixin.set_up_nodes() more than once with the same introducer
8055zooko@zooko.com**20080728234029]
8056[test/common.py: use pre-computed Tub certificates for the system-test mixin, to speed such tests up by maybe 15%. The goal is to encourage more full-grid tests.
8057warner@allmydata.com**20080728194421]
8058[test_system.py: move SystemTestMixin out into common.py, where further improvements will occur
8059warner@allmydata.com**20080725221758]
8060[test_system.py: create SystemTestMixin, with less cruft, for faster system-like tests
8061warner@allmydata.com**20080725221300]
8062[test: add testutil.flip_one_bit which flips a randomly chosen bit of the input string
8063zooko@zooko.com**20080728234217]
8064[testutil.py: remove unused import, appease pyflakes
8065Brian Warner <warner@lothar.com>**20070427151134]
8066[web/directory: enable verify=true in t=deep-check
8067warner@allmydata.com**20080812042409]
8068[deep-check: add webapi, add 'DEEP-CHECK' button to wui, add tests, rearrange checker API a bit
8069warner@allmydata.com**20080717234709]
8070[web: transform FileTooLargeError into a friendlier '413 Request Entity Too Large' error
8071warner@allmydata.com**20080603070316]
8072[dirnode: return to 'delete fails if the child wasn't actually there' semantics, to make tests pass. There's a switch to enable/disable this
8073warner@allmydata.com**20080418030606]
8074[test_web: add HEAD coverage
8075warner@allmydata.com**20080520184743]
8076[checker: re-enable checker web results (although they just say 'Healthy' right now)
8077warner@allmydata.com**20080716224256]
8078[webapi.txt: overhaul documentation. API changes are as follows:
8079warner@allmydata.com**20080519194746
8080 
8081  * download/upload localdir=/localfile= has been removed. This sort of ambient
8082    authority was unsafe to expose over the web (CSRF), and at some point
8083    soon we'll have 'cp -r' in the CLI to replace it.
8084  * GET save=filename -> GET filename=filename&save=true
8085  * GET t=download removed
8086  * side-effect causing operations now use POST where appropriate, not PUT
8087  * to create multiple directories, either use
8088    * POST /uri/DIRCAP/parent?t=mkdir&name=child  (more form/browser oriented)
8089    * POST /uri/DIRCAP/parent/child?t=mkdir (more machine oriented)
8090    The t=mkdir-p form is still accepted, but not preferred (since it leaks
8091    the child name queryarg into the logs)
8092  * use PUT /uri/MUTABLEFILECAP or PUT /uri/DIRCAP/child (on a mutable file) to
8093    replace its contents, or POST /same?t=upload from forms
8094  * response bodies and codes are better specified than before
8095 
8096]
8097[webapi.txt: minor edits
8098zooko@zooko.com**20070823200944]
8099[webapi.txt: update webapi.txt to reflect the security fix from #98
8100zooko@zooko.com**20071015192902]
8101[webapi.txt: document POST /uri?t=mkdir
8102warner@allmydata.com**20080208021028]
8103[doc: change example filename extension back because it is more recognizable and because I love Brian
8104zooko@zooko.com**20080227205405]
8105[docs: tweak wording per kpreid and tweak example filename extension per me
8106zooko@zooko.com**20080227204157]
8107[docs: merge conflicts between the patch to document "127.0.0.1" instead of "localhost" and some other patches (precisely which, I don't know)
8108zooko@zooko.com**20080418035741]
8109[docs: clarify which webport value is the default
8110zooko@zooko.com**20080227171003]
8111[fix a typo in webapi.txt
8112robk-org@allmydata.com**20070712234551]
8113[docs: use "127.0.0.1" instead of "localhost"
8114zooko@zooko.com**20080418034534
8115 Unfortunately there are occasionally configurations in the real world where "localhost" does not resolve to 127.0.0.1, and if a user has such a configuration then using 'localhost' could lead to an authority leak.
8116]
8117[docs/webapi.txt: mention that we default to a --webport of 8123
8118warner@allmydata.com**20071011201911]
8119[docs: tiny change in webapi.txt
8120zooko@zooko.com**20080418040051
8121 (I'm actually committing this patch only in order to test our patch management infrastructure.)
8122]
8123[docs: tiny update to webapi.txt
8124zooko@zooko.com**20080418040912
8125 I'm actually committing this just to test our patch management infrastructure.
8126]
8127[web: even more test coverage
8128warner@allmydata.com**20080520183314]
8129[web/directory: fix rw_uri output in t=JSON to reflect mutable files properly
8130warner@allmydata.com**20080520013728]
8131[test_web.py: minor cleanups, improved error reporting
8132warner@allmydata.com**20080519193339]
8133[test_web/test_system: improve test coverage
8134warner@lothar.com**20080520062852]
8135[web: improve test coverage
8136warner@allmydata.com**20080520013839]
8137[test_web.py: hush pyflakes
8138warner@allmydata.com**20080206043751]
8139[dirnode deep-check: rearrange traversal approach, simplify code a bit
8140warner@allmydata.com**20080717212504]
8141[first pass at deep-checker, no webapi yet, probably big problems with it, only minimal tests
8142warner@allmydata.com**20080717012057]
8143[move encode/upload/download/checker.py into a new immutable/ directory. No behavior changes expected.
8144warner@allmydata.com**20080716201439]
8145[rename encode_new.py to encode.py, now that there isn't an old one anymore
8146warner@lothar.com**20070406041742]
8147[move FileTooLargeError out to a common location
8148warner@allmydata.com**20080603070115]
8149[Don't allow uploads of large files (about 12GiB or larger), since they're doomed to be corrupted. Closes #439
8150warner@allmydata.com**20080602235701]
8151[storage.py: handle num_segments != power-of-two without an assertion
8152warner@lothar.com**20070714023021]
8153[test_upload.py: hush pyflakes
8154warner@allmydata.com**20080207020431]
8155[mutable/publish.py: raise FileTooLargeError instead of an ugly assertion when the SDMF restrictions are exceeded
8156warner@allmydata.com**20080603070210]
8157[overhaul checker invocation
8158warner@allmydata.com**20080716002325
8159 
8160 Removed the Checker service, removed checker results storage (both in-memory
8161 and the tiny stub of sqlite-based storage). Added ICheckable, all
8162 check/verify is now done by calling the check() method on filenodes and
8163 dirnodes (immutable files, literal files, mutable files, and directory
8164 instances).
8165 
8166 Checker results are returned in a Results instance, with an html() method for
8167 display. Checker results have been temporarily removed from the wui directory
8168 listing until we make some other fixes.
8169 
8170 Also fixed client.create_node_from_uri() to create LiteralFileNodes properly,
8171 since they have different checking behavior. Previously we were creating full
8172 FileNodes with LIT uris inside, which were downloadable but not checkable.
8173 
8174]
8175[interfaces: clarify IChecker.checker_results_for a bit
8176warner@allmydata.com**20071023011046]
8177[checker.checker_results_for: ignore uris of 'None'
8178warner@allmydata.com**20071027013837]
8179[checker: improve test coverage a little bit
8180warner@allmydata.com**20071205000012]
8181[mutable.node: avoid reentrancy problems in Deferred code on twisted2.5, by adding an eventual-send call
8182warner@lothar.com**20080418074329]
8183[use a weakref cache in the client to manage singleton filenodes/dirnodes, to avoid autocollision. Should close #391.
8184warner@allmydata.com**20080509010255]
8185[dirnode: add overwrite= to most API calls, defaulting to True. When False, this raises ExistingChildError rather than overwriting an existing child
8186warner@allmydata.com**20080516230947]
8187[dirnode: update to use MutableFileNode.modify
8188warner@allmydata.com**20080418025704]
8189[deep-stats: add file-size histogram
8190warner@allmydata.com**20080508231942]
8191[dirnode: refactor deep-stats a bit
8192warner@allmydata.com**20080508203307]
8193[interfaces: add verify= and repair= args to check()
8194warner@lothar.com**20080707213736]
8195[implement a mutable checker+verifier. No repair yet. Part of #205.
8196warner@lothar.com**20080708003600]
8197[test_mutable: test that all servers refusing our share means a publish fails
8198warner@allmydata.com**20080423015320]
8199[mutable/servermap: improve test coverage
8200warner@allmydata.com**20080422234752]
8201[mutable: test write failures, uncoordinated write detection
8202warner@allmydata.com**20080422184953]
8203[mutable WIP: use fireOnOneErrback when using a DeferredList
8204warner@allmydata.com**20080417201148]
8205[test_mutable: factor out ShouldFailMixin
8206warner@allmydata.com**20080418025551]
8207[test_mutable: hush pyflakes
8208warner@allmydata.com**20080418025755]
8209[mutable: improve test coverage, fix bug in privkey fetching, add .finished to stats, remove dead code
8210warner@allmydata.com**20080419025512]
8211[mutable: improve test coverage slightly
8212warner@allmydata.com**20080421221050]
8213[mutable: implement MutableFileNode.modify, plus tests
8214warner@allmydata.com**20080418021242]
8215[testutil: factor stall() out into a common location
8216warner@allmydata.com**20080422234715]
8217[test_system: stall for a second while bouncing the client, it might help windows
8218warner@allmydata.com**20070629022028]
8219[setup: finish switching from Tahoe's versions of autoversioning tools to pyutil's versions
8220zooko@zooko.com**20071221204238]
8221[don't try to use bindann
8222zooko@zooko.com**20070914021446
8223 It causes a mysterious misbehavior in Python import which causes the previous patch to fail (the patch to not run trial tests if dependencies can't be imported)
8224]
8225[version_class.py: if you don't have pkg_resources for comparing version numbers, use distutils.version.LooseVersion
8226zooko@zooko.com**20070816231641]
8227[setup.py use sys.executable instead of hard-coded 'python' to run make-version.py
8228warner@allmydata.com**20070924193859]
8229[setup: attempt to invoke make-version.py whenever setup.py is evaluated
8230zooko@zooko.com**20070924014336]
8231[setup.py: fix move to _version.py
8232warner@lothar.com**20070912230223]
8233[trailing-whitespace eradication, no functional changes
8234warner@allmydata.com**20071101223435]
8235[setup: continue running setup.py even if ez_setup.py can't be imported
8236zooko@zooko.com**20071109205803]
8237[setup: use ez_setup.py without a "download delay"
8238zooko@zooko.com**20071003221414]
8239[change ez_setup.py to find tarballs in misc/dependencies
8240zooko@zooko.com**20070913215119]
8241[add setuptools eggs for py2.4 and py2.5 to misc/dependencies
8242zooko@zooko.com**20070913215043]
8243[setup: import the latest version of ez_setup.py with my patches
8244zooko@zooko.com**20071003221319]
8245[ez_setup.py: put back the warning about downloading, but only if the URL that you are using is not "file:"
8246zooko@zooko.com**20070914031451]
8247[ez_setup.py: don't warn about the need to download packages (because we actually bundle them all with Tahoe)
8248zooko@zooko.com**20070914030027]
8249[use ez_setup.py to bootstrap setuptools
8250zooko@zooko.com**20070913015710]
8251[setup: remove misc/make-version.py and invoke "darcsver" from the pyutil library
8252zooko@zooko.com**20071221001755
8253 misc/make-version.py has a limitation which prevents it from generating version
8254 stamps from our current darcs history.  This limitation has been fixed in
8255 pyutil's "darcsver".  Rather than copy the fix from there to
8256 misc/make-version.py, I'm making it so that you have to install pyutil if you
8257 want to automatically generate _version.py files from the current darcs
8258 history.
8259 
8260]
8261[fix version class to preferred format and correct parsing
8262zooko@zooko.com**20070816223801]
8263[hush some pyflakes warnings
8264warner@lothar.com**20070915220721]
8265[shebang usr bin env python
8266zooko@zooko.com**20070613015525]
8267[misc/storage-overhead.py: tool to estimate storage-space overhead per filesize
8268warner@allmydata.com**20070716204331]
8269[make-version.py: when _darcs doesn't exist, make the warning less scary-looking
8270warner@allmydata.com**20070924193837]
8271[PollMixin: add timeout= argument, rewrite to avoid tail-recursion problems
8272warner@allmydata.com**20080205023507]
8273[CLI: move the 'repl' command to 'tahoe debug repl'
8274warner@allmydata.com**20080812204017]
8275[CLI: simplify argument-passing, use options= for everthing, including stdout
8276warner@lothar.com**20080801184624]
8277[added a 'repl' command to tahoe.exe
8278robk-tahoe@allmydata.com**20080110011952
8279 
8280 this is probably not of very high utility in the unix case of bin/tahoe
8281 but is useful when working with native builds, e.g. py2exe's tahoe.exe,
8282 to examine and debug the runtime environment, linking problems etc.
8283 
8284]
8285[tahoe_ls: improve output formatting
8286warner@allmydata.com**20080520200750]
8287[CLI: add 'ln', just like move but without the delete
8288warner@allmydata.com**20080520203031]
8289[CLI mv: if we can't created the new child, don't delete the old one
8290warner@allmydata.com**20080520194947]
8291[CLI: add 'list-aliases', factor out get_aliases
8292warner@allmydata.com**20080520213604]
8293[tahoe_cp: rewrite, make --recursive work
8294warner@allmydata.com**20080522003521]
8295[tahoe_cp.py: fix pyflakes complaint
8296warner@allmydata.com**20080521190913]
8297[cli: initial implementation of 'cp -r', probably doesn't work yet
8298warner@allmydata.com**20080521184922]
8299[CLI: implement the easy part of cp (no -r, only two arguments)
8300warner@allmydata.com**20080520235603]
8301[CLI ls: add --readonly-uri to display readonly URIs for all children
8302warner@allmydata.com**20080520194911]
8303[CLI: add put --mutable, enhance ls to show mutable vs immutable as rw/r-
8304warner@allmydata.com**20080520193655]
8305[overhaul CLI: not quite complete but it works a lot better than it used to. The new scheme uses 'tahoe add-alias' and rsync/scp-style 'alias:foo/bar.txt' arguments
8306warner@allmydata.com**20080520022850]
8307[tahoe_get.py: remove unused import
8308warner@allmydata.com**20071012024740]
8309[cli: use urllib.quote() on vdrive-path arguments before passing them through HTTP
8310zooko@zooko.com**20071027013044]
8311[tahoe_ls: list individual files
8312warner@lothar.com**20071021193306]
8313[test_system: write test data in 'b' verbatim mode, since on windows the default text-mode is different. Addresses one of the failures in #223
8314warner@allmydata.com**20071212011633]
8315[fix unit test to pass forward-slashes to the CLI since it demands that the CLI emit forward-slashes
8316zooko@zooko.com**20071212020344]
8317[remove the slash-to-bang conversion from CLI tools and webapi.txt
8318warner@allmydata.com**20071218022226]
8319[docs: change our default HTTP port to 8123
8320warner@allmydata.com**20071011201733]
8321[webapi.txt: reinstate documentation of the unpleasant URI-escaping needed for
8322Brian Warner <warner@lothar.com>**20071011135808
8323 slashes in dirnode URIs, to be resolved some day by #102.
8324]
8325[webapi.txt edits (thanks to Brian Warner)
8326zooko@zooko.com**20070823200606]
8327[cli: simplify code by using stdlib's httplib module
8328warner@allmydata.com**20071012052923]
8329[command-line: fix ticket #111 by requiring input to be a local file and sending Content-Length header
8330zooko@zooko.com**20070817215949]
8331[cli: use urllib.escape on all URIs
8332warner@lothar.com**20071011083444]
8333[tahoe_put.py: hush pyflakes by removing unused 'sys' import
8334warner@lothar.com**20070817232950]
8335[create_node.py: need to create private/ dir in create-client so we can touch the my_private_dir.cap file
8336warner@allmydata.com**20071218214218]
8337[oops, touch private/my_private_dir.cap when creating the client
8338warner@allmydata.com**20071218213659]
8339[a few formatting tidy-ups
8340zooko@zooko.com**20080103231419]
8341[key_generator: service related cleanups, incorporation into system test
8342robk-tahoe@allmydata.com**20080403225707
8343 
8344 
8345 this cleans up KeyGenerator to be a service (a subservice of the
8346 KeyGeneratorService as instantiated by the key-generator.tac app)
8347 this means that the timer which replenishes the keypool will be
8348 shutdown cleanly when the service is stopped.
8349 
8350 adds checks on the key_generator service and client into the system
8351 test 'test_mutable' such that one of the nodes (clients[3]) uses
8352 the key_generator service, and checks that mutable file creation
8353 in that node, via a variety of means, are all consuming keys from
8354 the key_generator.
8355 
8356]
8357[doc: slightly clarify an error message
8358zooko@zooko.com**20080414184305]
8359[CLI.txt: document proposed scp:-based CLI syntax
8360warner@allmydata.com**20080510010629]
8361[test_system: match webapi change, making new files now returns 201 Created, not 200 OK
8362warner@allmydata.com**20080519210931]
8363[CLI: make 'tahoe webopen' use the 'tahoe:' alias properly, instead of the old --dir-cap option
8364warner@allmydata.com**20080603005554]
8365[added "tahoe webopen" command
8366robk-tahoe@allmydata.com**20080105003410
8367 
8368 taking the same arguments as tahoe ls, it does a webbrowser.open to the page
8369 specified by those args.  hence "tahoe webopen" will open a browser to the
8370 root dir specified in private/root_dir.cap by default.
8371 
8372 this might be a good alternative to the start.html page.
8373 
8374]
8375[CLI: move all debug commands (dump-share, dump-cap, find-shares, catalog-shares) into a 'debug' subcommand, and improve --help output
8376warner@allmydata.com**20080812203732]
8377[tahoe dump-share: remove --filename option, just take it from argv
8378warner@allmydata.com**20080206201533]
8379[docs/CLI.txt: provide an overview of bin/tahoe subcommands
8380warner@allmydata.com**20080509193619]
8381[web/directory: factor out the get_root function
8382warner@allmydata.com**20081007201742]
8383[web: stop using absolute links (or url.here) in forms and pages, since they break behind proxies. Partially addresses #461
8384warner@allmydata.com**20080618024940]
8385[test_web.py: use /uri?t=mkdir instead of /uri/?t=mkdir, and confirm that the redirection target is correct
8386warner@lothar.com**20071224234652]
8387[wapi/wui: add a trailing slash to the targets of hyperlinks of children of the current directory when those targets are directories
8388zooko@zooko.com**20080611025938
8389 This is intended to fix #458 '"other representations" broken in webish ui'.
8390]
8391[webish: complete rewrite, break into smaller pieces, auto-create directories, improve error handling
8392warner@allmydata.com**20080519195704]
8393[web: show the root name of the vdrive
8394warner@lothar.com**20070708043102]
8395[web: remove more dead code
8396warner@lothar.com**20070708052003]
8397[webish: cosmetic: fix missing whitespace in HTML
8398warner@lothar.com**20070710173319]
8399[webish.DirnodeWalkerMixin: comment out the code that demonstrates what we
8400Brian Warner <warner@allmydata.com>**20070713062809
8401 would do if we could just use generators, since we don't use it.
8402]
8403[fix bug in arg handling around 'delete' button in directory view
8404robk-org@allmydata.com**20070712234654
8405 
8406 the code composing the form providing the 'delete' button in a dir
8407 view was broken in that it tried to put some of the arguments into
8408 the url query, rather than as the form's post args.  worse, nevow
8409 was kind enough to escape the querystring making it invalid.
8410]
8411[webish: handle PUTs to direct children of the root
8412warner@lothar.com**20070714023152]
8413[webish: oops, handle POST without localfile= too
8414warner@allmydata.com**20070716190054]
8415[change name of the query "allow_local_access()?" to "local_access_is_allowed()"
8416zooko@zooko.com**20070822173200
8417 So as to avoid confusing it with the setter method 
8418 "allow_local_access(allowed=True)".
8419]
8420[webish.py: handle asynchronous checker results.
8421warner@allmydata.com**20071031000037
8422 Thanks to robk for pointing out that Nevow will accept a Deferred almost
8423 everywhere. In this case, we just pass a Deferred into ctx.fillSlots(). One
8424 quirk: nevow doesn't evaluate all rows of the table in parallel: using a slow
8425 Deferred in a slot in one row seems to stall the next row until that one has
8426 fired, probably to simplify the flattening of the HTML.
8427 
8428]
8429[webish: tolerate not having a checker, since some unit tests don't make one
8430warner@allmydata.com**20071024003531]
8431[don't provide the "overwrite" button if the file is readonly to you
8432zooko@zooko.com**20071110220705]
8433[webish: oops, unit tests don't have an Uploader, don't rely upon it for helper-status display
8434warner@allmydata.com**20080128200329]
8435[webish: upload+localdir=missing should give an error
8436warner@allmydata.com**20080128204806]
8437[webish: upload: when the localdir= doesn't exist, say so in the HTTP response
8438warner@lothar.com**20070915194907]
8439[webish: remove 'URI-link' from directory page, now that we only use URI-links
8440warner@allmydata.com**20080130001109]
8441[webish: condense display of nickname a little bit
8442warner@allmydata.com**20080206002928]
8443[webish: show nickname too
8444warner@allmydata.com**20080206002605]
8445[webish.py: fix for #237: when listing large directories, insert a turn break once every 100 children, to work around non-optimized tail recursion Deferreds
8446warner@allmydata.com**20080213032852]
8447[add a mkdir-p POST handler
8448robk-tahoe@allmydata.com**20080318011301
8449 
8450 this adds a t=mkdir-p call to directories (accessed by their uri as
8451 /uri/<URI>?t=mkdir=p&path=/some/path) which returns the uri for a
8452 directory at a specified path before the given uri, regardless of
8453 whether the directory exists or whether intermediate directories
8454 need to be created to satisfy the request.
8455 
8456 this is used by the migration code in MV to optimise the work of
8457 path traversal which was other wise done on every file PUT
8458]
8459[webish: fix 'not running helper' status indicator on welcome page, add tests
8460warner@allmydata.com**20080414232811]
8461[test_system.py: improve coverage of webish.py
8462warner@lothar.com**20080215100250]
8463[dirnode: add a deep_stats(), like deep-size but with more information. webish adds t=deeps-size too.
8464warner@allmydata.com**20080508202114]
8465[add GET /uri/URI/?t=deep-size, to compute the total size of immutable files reachable from a given directory
8466warner@allmydata.com**20080327183342]
8467[mutable: replace MutableFileNode API, update tests. Changed all callers to use overwrite(), but that will change soon
8468warner@allmydata.com**20080418005138]
8469[mutable WIP: add servermap update status pages
8470warner@allmydata.com**20080417020541]
8471[mutable WIP: merge conflicts in test_system.py
8472warner@allmydata.com**20080415225728]
8473[web: don't break status page when there is no helper running
8474warner@lothar.com**20080415064220]
8475[stats: add /statistics web page to show them, add tests
8476warner@allmydata.com**20080414211708]
8477[stats_gatherer: verbose debug logging
8478robk-tahoe@allmydata.com**20080409231053
8479 
8480 one of the storage servers is throwing foolscap violations about the
8481 return value of get_stats().  this adds a log of the data returned
8482 to the foolscap log event stream at the debug level '12' (between
8483 NOISY(10) and OPERATIONAL(20))  hopefully this will facilitate
8484 finding the cause of this problem.
8485]
8486[helper status: include percentage fetched+pushed, add helper-uploads to the upload/download list
8487warner@allmydata.com**20080415013627]
8488[stats_gatherer: fix typo in helper stats gathering.
8489robk-tahoe@allmydata.com**20080411004142]
8490[helper stats: fix the /helper_status page, the recent conflict merging missed some uses. Added tests, updated the munin plugins to match
8491warner@allmydata.com**20080414201853]
8492[helper: add another munin plugin
8493warner@allmydata.com**20080327235030]
8494[stats_gatherer: reconcile helper stats gathering
8495robk-tahoe@allmydata.com**20080411002544
8496 
8497 I'd implemented stats gathering hooks in the helper a while back.
8498 Brian did the same without reference to my changes.  This reconciles
8499 those two changes, encompassing all the stats in both changes,
8500 implemented through the stats_provider interface.
8501 
8502 this also provide templates for all 10 helper graphs in the
8503 tahoe-stats munin plugin.
8504]
8505[munin: added a series of munin graphs to report upload helper state
8506robk-tahoe@allmydata.com**20080326013046]
8507[conflict reconciliation (part 1, stats gathering in helper)
8508robk-tahoe@allmydata.com**20080328002516]
8509[helper: add more stats to webapi, at /helper_status
8510warner@allmydata.com**20080327234608]
8511[helper: add stats for the gatherer, show some on the webish welcome page
8512warner@allmydata.com**20080327225532]
8513[webish: show storage sizelimit, abbreviate current usage
8514warner@allmydata.com**20080307031638]
8515[webish: add storage-consumed estimate on welcome page
8516warner@allmydata.com**20080206022939]
8517[stats: added stats reporting to the upload helper
8518robk-tahoe@allmydata.com**20080326011908
8519 
8520 adds a stats_producer for the upload helper, which provides a series of counters
8521 to the stats gatherer, under the name 'chk_upload_helper'.
8522 
8523 it examines both the 'incoming' directory, and the 'encoding' dir, providing
8524 inc_count inc_size inc_size_old enc_count enc_size enc_size_old, respectively
8525 the number of files in each dir, the total size thereof, and the aggregate
8526 size of all files older than 48hrs
8527 
8528]
8529[offloaded: add fetched-percentage to the log message
8530warner@allmydata.com**20080414211638]
8531[mutable WIP: re-enable publish/retrieve status
8532warner@allmydata.com**20080417004906]
8533[key_generator: added a unit test
8534robk-tahoe@allmydata.com**20080403200143
8535 
8536 implemented a unit test of basic KeyGenService functionality,
8537 fixed a bug in the timing of pool refreshes
8538]
8539[mutable WIP: improve logging a bit
8540warner@allmydata.com**20080416222230]
8541[mutable WIP: rewrite ServerMap data structure, add tests
8542warner@allmydata.com**20080416214947]
8543[mutable WIP: if corrupt shares cause a retrieve to fail, restart it once, ignoring those shares and using different ones
8544warner@allmydata.com**20080415225802]
8545[mutable WIP: split mutable.py into separate files. All tests pass.
8546warner@lothar.com**20080411213116]
8547[direct the user to docs/write_coordination.html in case of an UncoordinatedWriteError
8548zooko@zooko.com**20080108171506]
8549[test_filenode.py : improve coverage of mutable filenode, fix a bug in __hash__
8550warner@allmydata.com**20080304200128]
8551[add a webserver for the Introducer, showing service announcements and subscriber lists
8552warner@allmydata.com**20080312003625]
8553[reinstate creation of node.url files upon startup
8554robk-tahoe@allmydata.com**20080108000456
8555 
8556 a recent purge of the start.html code also took away the logic that wrote
8557 'node.url' into the node root.  this is required for the tahoe cli tool to
8558 find the node.  this puts back a limited fraction of that code, so that the
8559 node writes out a node.url file upon startup.
8560]
8561[stats gathering: added counters to upload,download,mutablewatcher
8562robk-tahoe@allmydata.com**20080410010859
8563 
8564 counting number of operations, and for immutable files, bytes transferred
8565]
8566[use added secret to protect convergent encryption
8567zooko@zooko.com**20080324164606
8568 
8569 Now upload or encode methods take a required argument named "convergence" which can be either None, indicating no convergent encryption at all, or a string, which is the "added secret" to be mixed in to the content hash key.  If you want traditional convergent encryption behavior, set the added secret to be the empty string.
8570 
8571 This patch also renames "content hash key" to "convergent encryption" in a argument names and variable names.  (A different and larger renaming is needed in order to clarify that Tahoe supports immutable files which are not encrypted content-hash-key a.k.a. convergent encryption.)
8572 
8573 This patch also changes a few unit tests to use non-convergent encryption, because it doesn't matter for what they are testing and non-convergent encryption is slightly faster.
8574 
8575]
8576[upload: Data should use convergence by default
8577warner@allmydata.com**20080131010256]
8578[offloaded: oops, need more tricks to make the unit tests pass
8579warner@allmydata.com**20080206235111]
8580[helper: return full uri-extension data to the client, so it can compare encoding parameters
8581warner@allmydata.com**20080206233058]
8582[test_upload.py: add test to exercise CHK hashing variations
8583warner@allmydata.com**20080207020335]
8584[Merge patch which switches to SHA-256d with patch that adds punctuation and capitalization to the comment about the hash value.
8585zooko@zooko.com**20080215191643]
8586[docs: update install and usage docs, improve cli "usage" output, make new example directories, add unit test that fails code which prints out sentences that don't end with punctuation marks
8587zooko@zooko.com**20080215191102]
8588[docs: update the example link in using.html
8589zooko@zooko.com**20080108172345]
8590[docs: 10 blocks by default, not 12
8591amber@yukyuk**20080213105719]
8592[docs: update docs/about.html with Amber
8593zooko@zooko.com**20080201173923]
8594[doc: fix typos and otherwise edit about.html
8595zooko@zooko.com**20080121215443]
8596[docs: about.html: edit thanks to nej
8597zooko@zooko.com**20080122035201]
8598[doc: add an overview to about.html
8599zooko@zooko.com**20080121211925
8600 Hopefully this overview has the right combination of generality and precision to satisfy The Norm Hardy Request:
8601 http://allmydata.org/pipermail/tahoe-dev/2007-November/000222.html
8602 
8603]
8604[docs: some documentation updates for 0.7.0
8605zooko@zooko.com**20080108163241]
8606[more introductory doc cleanup
8607zooko@zooko.com**20080105000919
8608 mv README to docs/about.html and reformat it as HTML
8609 add a new README which is a text file pointing to docs/{about,install,running}.html
8610 include the Transitive Grace Period Public Licence in its HTML form (it is too big)
8611 
8612]
8613[new licences, move details from README to doc/install-details.html
8614zooko@zooko.com**20080104182742]
8615[README: explain when you need to download source and when you don't
8616zooko@zooko.com**20070921185356]
8617[README: reflow to 80 cols
8618zooko@zooko.com**20070924200732]
8619[README: edit to clarify that you can't use "make" if you installed it the easy_install way
8620zooko@zooko.com**20071013062153]
8621[DEPENDENCIES: recommend the 'build-essential' package instead of gcc+make,
8622Brian Warner <warner@allmydata.com>**20071018033331
8623 since it includes important things like libc6-dev
8624]
8625[setup: pass INCLUDE_DIRS and LIBRARY_DIRS variables, if any to setup.py from Makefile
8626zooko@zooko.com**20071114021659
8627 
8628]
8629[setup: README: a few clarifications thanks to Priyanka
8630zooko@zooko.com**20071120050853]
8631[setup: README: warn against Python 2.4.1, recommend easy_install, link to easy_install download page, edit for clarity
8632zooko@zooko.com**20071120193922]
8633[README: fix whitespace
8634zooko@zooko.com**20071107160057]
8635[README: it works on Python 2.4 on Windows
8636zooko@zooko.com**20070914021730]
8637[README: advise 'make clean' before 'make build-deps' (after update), otherwise old versions of the dependent libaries can be used in preference to the newer one
8638warner@allmydata.com**20071113202449]
8639[README: update required version numbers, fix small cut-and-paste error
8640warner@lothar.com**20080102033646]
8641[doc: describe how to start client first in running.html
8642zooko@zooko.com**20080106071657]
8643[doc: even simpler running.html
8644zooko@zooko.com**20080104031159]
8645[running.html: fix usage of 'tahoe create-client' and 'tahoe start', explain ~/.tahoe, add closing tags
8646warner@lothar.com**20080102035046]
8647[docs: update install.html and update and format running.html
8648zooko@zooko.com**20080101232007]
8649[docs: a couple of improvements to install.html
8650zooko@zooko.com**20080101075250]
8651[docs: even further simplify and reformat install.html
8652zooko@zooko.com**20071231143907]
8653[docs: format install.html into HTML format
8654zooko@zooko.com**20071231020118]
8655[docs: a bunch of updates to simplify the process of installing from source and running Tahoe
8656zooko@zooko.com**20071230114717
8657 These changes are a work-in-progress -- there are many incomplete and incorrect parts, but the install.html and running.html files
8658 are complete and should work (and they are delightfully concise!).  I'm pushing this just to let people see incremental progress
8659 and to solicit feedback.  "Testing out" the install.html and running.html files and submitting patches or bug reports would be
8660 quite welcome.
8661 
8662 More to come.
8663 
8664 
8665]
8666[README: edits
8667zooko@zooko.com**20070929180520]
8668[a few documentation and naming convention updates
8669zooko@zooko.com**20071213013408
8670 Notable: the argument to make REPORTER has been renamed to TRIALARGS.
8671 
8672]
8673[docs: edits and updates to architecture.txt, with Amber
8674zooko@zooko.com**20080213162452]
8675[docs: edit "grid of storage servers" section with Amber
8676zooko@zooko.com**20080128174821]
8677[docs: architecture.txt: some edits with Amber
8678zooko@zooko.com**20080201183906]
8679[docs: edit architecture.txt with Amber's help
8680zooko@zooko.com**20080128173346]
8681[doc: architecture.txt: start updating architecture.txt
8682zooko@zooko.com**20080121235303
8683 I chose to remove mention of non-convergent encoding, not because I dislike non-convergent encoding, but because that option isn't currently expressed in the API and in order to shorten architecture.txt.  I renamed "URI" to "Capability".  I did some editing, including updating a few places that treated all capabilities as CHK-capabilities and that mentioned that distributed SSKs were not yet implemented.
8684 
8685]
8686[architecture.txt: small edits
8687zooko@zooko.com**20070809053105]
8688[mention ticket #22
8689"Zooko O'Whielacronx <zooko@zooko.com>"**20070502033322]
8690[cleaning grammar
8691wilcoxjg@gmail.com**20070809041154]
8692[architecture.txt: a few small edits
8693zooko@zooko.com**20070919212704]
8694[docs: architecture.txt: reflow to 77 cols
8695zooko@zooko.com**20080121232628
8696 Experiment showed that reflowing to 77 cols changed the fewest lines.
8697]
8698[BIG COMPATIBILITY BREAK: update hash tags, switch to SHA-256d everywhere
8699warner@allmydata.com**20080215015801]
8700[mutable: storage_index is always 16 bytes
8701warner@allmydata.com**20071107005434]
8702[hashutil.py: switch from pycrypto to pycryptopp SHA256
8703zooko@zooko.com**20071109204013]
8704[hashutil: replace pycrypto's SHA256 with pycryptopp's SHA256
8705zooko@zooko.com*-20071108000239]
8706[hashutil: replace pycrypto's SHA256 with pycryptopp's SHA256
8707zooko@zooko.com**20071108000239]
8708[stats: make StatsGatherer happy about sharing a process with other services, add one during system test to get some test coverage
8709warner@allmydata.com**20080304055558]
8710[test_system: fix pyflakes warnings
8711warner@allmydata.com**20080115032628]
8712[stats: fix service issues
8713robk-tahoe@allmydata.com**20080202005731
8714 
8715 having moved inititalisation into startService to handle tub init cleanly,
8716 I neglected the up-call to startService, which wound up not starting the
8717 load_monitor.
8718 
8719 also I changed the 'running' attribute to 'started' since 'running' is
8720 the name used internally by MultiService itself.
8721]
8722[stats: added IStatsProducer interface, fixed stats provider startup
8723robk-tahoe@allmydata.com**20080201031015
8724 
8725 this adds an interface, IStatsProducer, defining the get_stats() method
8726 which the stats provider calls upon and registered producer, and made the
8727 register_producer() method check that interface is implemented.
8728 
8729 also refine the startup logic, so that the stats provider doesn't try and
8730 connect out to the stats gatherer until after the node declares the tub
8731 'ready'.  this is to address an issue whereby providers would attach to
8732 the gatherer without providing a valid furl, and hence the gatherer would
8733 be unable to determine the tubid of the connected client, leading to lost
8734 samples.
8735]
8736[mutable WIP: all tests pass, but publish/retrieve status is still stubbed out
8737warner@allmydata.com**20080411022635]
8738[test_system: improve test coverage of publish/retrieve status
8739warner@allmydata.com**20080304072435]
8740[test_system: add test coverage for download-status and upload-status
8741warner@allmydata.com**20080304033717]
8742[mutable: WIP. make Publish work, remove some test scaffolding. test_system still fails.
8743warner@allmydata.com**20080411014406]
8744[test_mutable: remove dead code
8745warner@allmydata.com**20071107005639]
8746[added offloaded key generation
8747robk-tahoe@allmydata.com**20080402014513
8748 
8749 this adds a new service to pre-generate RSA key pairs.  This allows
8750 the expensive (i.e. slow) key generation to be placed into a process
8751 outside the node, so that the node's reactor will not block when it
8752 needs a key pair, but instead can retrieve them from a pool of already
8753 generated key pairs in the key-generator service.
8754 
8755 it adds a tahoe create-key-generator command which initialises an
8756 empty dir with a tahoe-key-generator.tac file which can then be run
8757 via twistd.  it stashes its .pem and portnum for furl stability and
8758 writes the furl of the key gen service to key_generator.furl, also
8759 printing it to stdout.
8760 
8761 by placing a key_generator.furl file into the nodes config directory
8762 (e.g. ~/.tahoe) a node will attempt to connect to such a service, and
8763 will use that when creating mutable files (i.e. directories) whenever
8764 possible.  if the keygen service is unavailable, it will perform the
8765 key generation locally instead, as before.
8766]
8767[more new-pyflakes warnings fixed
8768warner@allmydata.com**20071219005133]
8769[runner: tweaked runner to make it easier to extend with additional subcommands
8770robk-tahoe@allmydata.com**20080219230514
8771 
8772 runner provides the main point of entry for the 'tahoe' command, and
8773 provides various subcommands by default. this provides a hook whereby
8774 additional subcommands can be added in in other contexts, providing a
8775 simple way to extend the (sub)commands space available through 'tahoe'
8776]
8777[tweak running to make node start/stop code optional
8778robk-tahoe@allmydata.com**20080109015118
8779 
8780 add a 'install_node_control' flag to runner.run(), default True
8781 this enables the start/stop node commands
8782 which are not too useful on windows
8783]
8784[client: publish a 'stub client' announcement to the introducer, to provide version/nickname information for each client
8785warner@allmydata.com**20080312022010]
8786[client.py: remove unused import
8787warner@allmydata.com**20070629010100]
8788[refactor node startup, remove tub_ready()
8789warner@allmydata.com**20080206015838]
8790[Client.tub_ready: upcall to Node
8791warner@allmydata.com**20071102002712]
8792[merge patch to integrate decentralized directories with "introducer_and_vdrive.py: use logpublisher too"
8793zooko@zooko.com**20071203212904]
8794[mutable.py: checkpointing #303 work part 2, Publish is sketched out
8795warner@allmydata.com**20080408020128]
8796[mutable.py: fix padding/shape-of-input-data to zfec
8797zooko@zooko.com**20071110000625]
8798[mutable.py: oops, our logging wrappers can't take posargs yet
8799warner@allmydata.com**20071219053616]
8800[mutable.py: update comment about uncoordinated writes appearing as not-enough-peers(unable to get privkey) errors
8801warner@allmydata.com**20080107204805]
8802[mutable: increase max segsize to 3.5MB, to allow dirnodes with about 10k entries
8803warner@allmydata.com**20080311033955]
8804[mutable: cheap padding hack to make zfec tolerate short files
8805warner@lothar.com**20071108103037]
8806[mutable: revise a couple of error messages
8807robk-tahoe@allmydata.com**20080324224628
8808 
8809 at brian and zooko's suggestion, reword an error message encountered when
8810 multiple writers are racing to make overlapping changes to a directory
8811]
8812[mutable.py: checkpointing #303 work: retrieve does what I want, now starting in on publish
8813warner@allmydata.com**20080405000926]
8814[mutable: when retrieving, don't try to grab the encprivkey, to save a roundtrip
8815warner@allmydata.com**20080305030824]
8816[mutable-retrieve: only record server response times for queries that we don't ignore
8817warner@allmydata.com**20080305031052]
8818[test_mutable: exercise short reads too
8819warner@allmydata.com**20080311010823]
8820[mutable.py: add comments to justify initial-read size choices
8821warner@allmydata.com**20080213234120]
8822[test_mutable: improve multiple-encodings test coverage
8823warner@lothar.com**20080311064735]
8824[mutable: tolerate multiple encodings, using whichever version is recoverable first. Closes #312
8825warner@lothar.com**20080311072600]
8826[test_mutable: test all hash-failure cases except a corrupted encrypted private key
8827warner@allmydata.com**20080311004652]
8828[mutable: validate share_hash_chain for each inbound share
8829warner@allmydata.com**20071114212646]
8830[test_mutable: make test-multiple-encodings work
8831warner@lothar.com**20080311061628]
8832[test_mutable: more test coverage, building up a framework to cause reads to occur in a specific order
8833warner@allmydata.com**20080311051543]
8834[test_mutable: add Roundtrip test, suitable for new share-mangling tests
8835warner@allmydata.com**20080310231408]
8836[mutable: minor refactoring of _do_read, to make other tests easier
8837warner@allmydata.com**20080310224256]
8838[test_mutable.py: accomodate changes to mutable.py logging
8839warner@allmydata.com**20080111041834]
8840[webish: add publish status
8841warner@allmydata.com**20080306004110]
8842[mutable: cosmetic changes
8843warner@allmydata.com**20080310224405]
8844[mutable WIP: oops, fix test_mutable
8845warner@allmydata.com**20080417010654]
8846[mutable.py: split replace() into update() and overwrite(). Addresses #328.
8847warner@allmydata.com**20080313010043]
8848[speedcheck: track SSK creation time separately
8849warner@allmydata.com**20080130024432]
8850[mutable: oops, .download *is* in use, by the speedtest. Restore it and add a test.
8851warner@allmydata.com**20080304211140]
8852[mutable.py: remove unused 'download' method (we only have download_to_data for now)
8853warner@allmydata.com**20080304200155]
8854[webish: add /file links, change directory page to use them. This fixes filenames in wget. Closes #221.
8855warner@allmydata.com**20080514213221]
8856[webish: display timestamps
8857warner@allmydata.com**20080211211318]
8858[refactor one of the dispatch routines in webish.py
8859zooko@zooko.com**20080320191109
8860 The behavior is intended to be unchanged by this refactoring.  Unit tests show no change in behavior.
8861]
8862[webish: link to directory URIs rather than a child path. Addresses #103.
8863warner@allmydata.com**20080130000432]
8864[webish: split out 'unlinked' operations
8865warner@allmydata.com**20080305211242]
8866[wui/wapi/webish: HTML form checkboxes send the value "on", so let's interpret that as boolean true
8867zooko@zooko.com**20080301022942]
8868[webish: this file is too big, start breaking it into pieces, beginning with status
8869warner@allmydata.com**20080305205956]
8870[webish: more upload stats: total encode-and-push rate, already-in-grid existence check time
8871warner@allmydata.com**20080206083901]
8872[UploadResults: add more helper timing stats (ciphertext fetch times)
8873warner@allmydata.com**20080206081235]
8874[webish: download-results: add per-server response times
8875warner@allmydata.com**20080304025345]
8876[webish: download-results: add server_problems
8877warner@allmydata.com**20080304023035]
8878[test_web: improve upload/download status coverage
8879warner@allmydata.com**20080304035623]
8880[webish: add more mutable-retrieve timing status
8881warner@allmydata.com**20080305030436]
8882[mutable.py: reject shares with different k/N than we expect. Quick fix for #312: avoids data corruption but has availability problems.
8883warner@allmydata.com**20080213193420]
8884[webish download results: add servermap, decrypt time
8885warner@allmydata.com**20080304020932]
8886[web: status: add 'started' timestamps to all operations
8887warner@allmydata.com**20080305005044]
8888[webish: add 'download results', with some basic timing information
8889warner@allmydata.com**20080304011921]
8890[log more peerinfo in download/upload/checker problems
8891warner@allmydata.com**20080226233314]
8892[switch from base62 to base32 for storage indices, switch from z-base-32 to rfc 3548 base-32 for everything, separate out base32 encoding from idlib
8893zooko@zooko.com**20080215012747]
8894[mutable.py: log more information during publish, specifically the sharemap, and the reason for an UncoordinatedWriteError
8895warner@allmydata.com**20080111041623]
8896[hashutil: add tagged_hash_256d and tagged_hasher_256d
8897warner@allmydata.com**20080207013643]
8898[trailing-whitespace eradication, no functional changes
8899warner@allmydata.com**20071101222509]
8900[use base62 encoding for storage indexes, on disk and in verifier caps, and in logging and diagnostic tools
8901zooko@zooko.com**20080213024837
8902 base62 encoding fits more information into alphanumeric chars while avoiding the troublesome non-alphanumeric chars of base64 encoding.  In particular, this allows us to work around the ext3 "32,000 entries in a directory" limit while retaining the convenient property that the intermediate directory names are leading prefixes of the storage index file names.
8903]
8904[storage: clean up use of si_s vs si_dir, add test for BadWriterEnabler message, add some logging
8905warner@allmydata.com**20080131234848]
8906[storage: make two levels of share directories so as not to exceed certain filesystems's limitations on directory size
8907zooko@zooko.com**20080131222628
8908 The filesystem which gets my vote for most undeservedly popular is ext3, and it has a hard limit of 32,000 entries in a directory.  Many other filesystems (even ones that I like more than I like ext3) have either hard limits or bad performance consequences or weird edge cases when you get too many entries in a single directory.
8909 
8910 This patch makes it so that there is a layer of intermediate directories between the "shares" directory and the actual storage-index directory (the one whose name contains the entire storage index (z-base-32 encoded) and which contains one or more share files named by their share number).
8911 
8912 The intermediate directories are named by the first 14 bits of the storage index, which means there are at most 16384 of them.  (This also means that the intermediate directory names are not a leading prefix of the storage-index directory names -- to do that would have required us to have intermediate directories limited to either 1024 (2-char), which is too few, or 32768 (3-chars of a full 5 bits each), which would overrun ext3's funny hard limit of 32,000.))
8913 
8914 This closes #150, and please see the "convertshares.py" script attached to #150 to convert your old tahoe-0.7.0 storage/shares directory into a new tahoe-0.8.0 storage/shares directory.
8915 
8916]
8917[test_cli: oops, need to update this when the CHK hash changes
8918warner@allmydata.com**20080207015853]
8919['tahoe dump-cap': accept http:// -prefixed URLs too
8920warner@allmydata.com**20080114201227]
8921[webish: censor all caps before logging the HTTP request, to preserve user privacy
8922warner@allmydata.com**20080213013123]
8923['tahoe catalog-shares': add SDMF filesize to the output, update misc/find-share-anomalies.py to match
8924warner@allmydata.com**20080213211206]
8925[catalog-shares: add expiration time to output
8926warner@allmydata.com**20080212004454]
8927[add 'tahoe catalog-shares' tool, to make a one-line summary of each share file. This can help do cross-server correlation of sharefiles, looking for anomalies
8928warner@allmydata.com**20080212001701]
8929[add 'tahoe find-shares' command, to locate share files on a local node's disk
8930warner@allmydata.com**20080206191951]
8931[add 'tahoe dump-cap' command, to show storage index, lease secrets, etc
8932warner@allmydata.com**20080114194325]
8933[test_cli.py: hush pyflakes with a dummy usage, until we get some real CLI tests
8934warner@lothar.com**20071011085529]
8935[misc/find-share-anomalies.py: tool to analyze 'tahoe catalog-shares' output and look for problems
8936warner@allmydata.com**20080212015336]
8937[webish: add primitive publish/retrieve status pages
8938warner@allmydata.com**20080304070744]
8939[webish: make upload timings visible on the recent uploads/downloads status page
8940warner@allmydata.com**20080303204852]
8941[webish: add when_done= to POST /uri?t=upload . I did not add a 'recent uploads' section to the welcome page, but I think the new upload-results page provides the desired data
8942warner@allmydata.com**20080206083816]
8943[webish: add per-file upload/download status pages
8944warner@allmydata.com**20080301050300]
8945[retain 10 most recent upload/download status objects, show them in /status . Prep for showing individual status objects
8946warner@allmydata.com**20080301041903]
8947[webish: display tahoe import path on the welcome page, to help figure out where the code is coming from
8948warner@allmydata.com**20080206020849]
8949[make current upload/download status objects available from the client
8950warner@allmydata.com**20080212213945]
8951[webish status: distinguish active uploads/downloads from recent ones
8952warner@allmydata.com**20080226213528]
8953[add test coverage for the /stats web page
8954warner@allmydata.com**20080213195739]
8955[current-downloads status: add SI, size, make numsegs 1-based
8956warner@allmydata.com**20080226210235]
8957[webish: add /status page to display current uploads/downloads
8958warner@allmydata.com**20080212214005]
8959[download status: refactor into a separate object, so we don't need to keep the Download itself around for a long time
8960warner@allmydata.com**20080213010103]
8961[add download-status objects, to track download progress
8962warner@allmydata.com**20080212213839]
8963[add upload-status objects, to track upload progress
8964warner@allmydata.com**20080212213605]
8965[offloaded: close the local filehandle after encoding is done, otherwise windows fails
8966warner@lothar.com**20080117075233]
8967[encode.py: don't record BAD log event unless there is actually a problem
8968warner@allmydata.com**20080128175910]
8969[encode.py: improve error message when segment lengths come out wrong
8970warner@allmydata.com**20080125035109]
8971[encode.py: don't allow a shareholder which dies in start() to kill the whole upload
8972warner@allmydata.com**20080128181448]
8973[add upload-results timing info for helper uploads. This changes the Helper protocol, and introduces a compatibility break
8974warner@allmydata.com**20080206075225]
8975[upload.py: start removing wait_for_numpeers code
8976warner@allmydata.com**20080110032518]
8977[offloaded: reinstate fix for windows tests
8978robk-tahoe@allmydata.com**20080121212515
8979 
8980 in a discussion the other day, brian had asked me to try removing this fix, since
8981 it leads to double-closing the reader.  since on my windows box, the test failures
8982 I'd experienced were related to the ConnectionLost exception problem, and this
8983 close didn't see to make a difference to test results, I agreed.
8984 
8985 turns out that the buildbot's environment does fail without this fix, even with
8986 the exception fix, as I'd kind of expected.
8987 
8988 it makes sense, because the reader (specifically the file handle) must be closed
8989 before it can be unlinked. at any rate, I'm reinstating this, in order to fix the
8990 windows build
8991]
8992[offloaded: close reader before removing its file
8993robk-tahoe@allmydata.com*-20080117233628
8994 
8995 unlinking a file before closing it is not portable. it works on unix, but fails
8996 since an open file holds a lock on windows.
8997 
8998 this closes the reader before trying to unlink the encoding file within the
8999 CHKUploadHelper.
9000]
9001[offloaded: close reader before removing its file
9002robk-tahoe@allmydata.com**20080117233628
9003 
9004 unlinking a file before closing it is not portable. it works on unix, but fails
9005 since an open file holds a lock on windows.
9006 
9007 this closes the reader before trying to unlink the encoding file within the
9008 CHKUploadHelper.
9009]
9010[offloaded.py: delete encoding tempfile when upload is complete
9011warner@lothar.com**20080117071554]
9012[offloaded upload: avoid tail-recursion problem that would break large files
9013warner@allmydata.com**20080125035134]
9014[offloaded: when uploading a file that failed to upload before, ask for the last byte of ciphertext, so the reader is prepared to give us the plaintext hashes
9015warner@allmydata.com**20080129010543]
9016[upload: add log message when AssistedUploader is done
9017warner@allmydata.com**20080129233812]
9018[offloaded.py: fix logging a bit
9019warner@allmydata.com**20080131194501]
9020[add upload timings and rates to the POST /uri?t=upload results page
9021warner@allmydata.com**20080206064151]
9022[encode.py: update logging levels
9023warner@allmydata.com**20080128181527]
9024[encode.py: log the contents of the uri_extension block
9025warner@allmydata.com**20080124000804]
9026[introducer: remove remaining bits of 'push-to-myself' flags. The uploading/downloading node is no longer special.
9027warner@allmydata.com**20080205201601]
9028[webish: make POST /uri?t=upload deposit you on an 'Upload Results' page
9029warner@allmydata.com**20080206050137]
9030[webish: add extra introducer data (version, timestamps) to Welcome page
9031warner@allmydata.com**20080205233227]
9032[tweak webish to use resource_filename to find css and html files
9033robk-tahoe@allmydata.com**20080122234458
9034 
9035 using sibpath to find web template files relative to source code is functional
9036 when running from source environments, but not especially flexible when running
9037 from bundled built environments.  the more 'orthodox' mechanism, pkg_resources,
9038 in theory at least, knows how to find resource files in various environments.
9039 
9040 this makes the 'web' directory in allmydata into an actual allmydata.web module
9041 (since pkg_resources looks for files relative to a named module, and that module
9042 must be importable) and uses pkg_resources.resource_filename to find the files
9043 therein.
9044]
9045[added tweaked sibpath implementation
9046robk-tahoe@allmydata.com**20080110212341
9047 
9048 use of twisted.python.util.sibpath to find files relative to modules doesn't
9049 work when those modules are bundled into a library by py2exe.  this provides
9050 an alternative implementation (in allmydata.util.sibpath) which checks for
9051 the existence of the file, and if it is not found, attempts to find it relative
9052 to sys.executable instead.
9053]
9054[provisioning: add some drive failure and repair rate info
9055warner@allmydata.com**20070907014741]
9056[display the Helper FURL and our connection status on the welcome page. Closes #285.
9057warner@allmydata.com**20080128195622]
9058[upload: rework passing of default encoding parameters: move more responsibility into BaseUploadable
9059warner@allmydata.com**20080207003903]
9060[upload.py: make it easier to have an IUploadable that overrides encoding parameters: just set an attribute instead of subclassing
9061warner@lothar.com**20080117071742]
9062[change encryption-key hash to include encoding parameters. This is a minor compatibility break: CHK files encoded (with convergence) before and after this will have different keys and ciphertexts. Also switched to SHA-256d for both the data-to-key hash and the key-to-storageindex hash
9063warner@allmydata.com**20080207015047]
9064[rename storage_index_chk_hash() to storage_index_hash() and add TODO about how our use of it now includes keys that are not CHKs
9065zooko@zooko.com**20080201182737]
9066[rename "dir-uri" to "dir-cap"
9067zooko@zooko.com**20080108164127]
9068[cmdline: give useful error messages about the --dir-uri and ~/.tahoe/private/root_dir.cap
9069zooko@zooko.com**20080103233535]
9070[test_util: add full coverage for allmydata.util.deferredutil
9071warner@allmydata.com**20080206224104]
9072[remove tests of logging functionality that's been subsumed by foolscap logging
9073warner@lothar.com**20071213022353]
9074[test_node.py: more coverage of Node.log
9075warner@lothar.com**20071031075659]
9076[logging: only test log.err when Twisted is new enough to let us ignore the generated errors
9077warner@allmydata.com**20071120003700]
9078[test_system: remove the hackish debug_interrupt= attribute magic used to exercise interrupted-upload resumption, instead just make the Uploadable bounce the helper halfway through the upload
9079warner@allmydata.com**20080208021537]
9080[offloaded uploader: don't use a huge amount of memory when skipping over previously-uploaded data
9081warner@allmydata.com**20080124232533]
9082[test_system.py: remove that ugly debug_stash_RemoteencryptedUploadable hack, now that UploadResults give us a better approach
9083warner@allmydata.com**20080207232730]
9084[offloaded: upload.py: handle forward skips, to allow resumed uploads to send less than all the data. We still read all the data (to hash it, 'paranoid mode'), but we don't send it over the wire
9085warner@lothar.com**20080117071656]
9086[big introducer refactoring: separate publish+subscribe. Addresses #271.
9087warner@allmydata.com**20080205190513]
9088[assert that only dicts get passed to _got_response()
9089zooko@zooko.com**20070331010040]
9090[bump timeout up because it timed out even on my super fast MacBook Pro
9091zooko@zooko.com**20070501061606
9092 Hm.  This probably means that it is never going to finish...
9093]
9094[Client.get_permuted_peers: use self.nodeid now that it's fixed
9095warner@lothar.com**20070812232451]
9096[storage: add version number to share data. Closes #90.
9097warner@allmydata.com**20070904160024]
9098[storageserver.py: remove unused import
9099warner@allmydata.com**20070418174333]
9100[storageserver.ReadBucketProxy: break out _parse_offsets, for debug tools
9101warner@lothar.com**20070713235217]
9102[client.py: add the missing remote_get_nodeid() method claimed in interfaces.py
9103warner@allmydata.com**20070926192048]
9104[client.py: remove unused code
9105warner@allmydata.com**20070629005513]
9106[fix test_introducer to wait for the right things in order to avoid intermittent test failures
9107zooko@zooko.com**20071211200815]
9108[fix IntroducerClient.when_enough_peers()
9109zooko@zooko.com**20071211022259
9110 add IntroducerClient.when_few_enough_peers(), fix and improve test_introducer
9111]
9112[fix import error, detected thanks to "make test"
9113zooko@zooko.com**20071211232301]
9114[fix missing import, thanks to pyflakes
9115zooko@zooko.com**20071211230029]
9116[mutable: improve logging: mark events with level=log.WEIRD and log.UNUSUAL
9117warner@allmydata.com**20080107230916]
9118[mutable.Publish: improve logging
9119warner@allmydata.com**20071219053050]
9120[mutable: verify incoming share signatures during Publish, it's not that expensive and it's a good idea
9121warner@allmydata.com**20071108200236]
9122[mutable.py: one more logging fix
9123warner@allmydata.com**20071219054241]
9124[storage: improve logging a bit
9125warner@allmydata.com**20080114175858]
9126[storage.py: add a little logging (disabled)
9127warner@allmydata.com**20071107201454]
9128[storage.py: factor out a common compare() routine
9129warner@allmydata.com**20071205062034]
9130[test_upload.py: implement remote_abort on our fake BucketWriter
9131warner@allmydata.com**20080124000734]
9132[stats: add a simple stats gathering system
9133robk-tahoe@allmydata.com**20080131021107
9134 
9135 We have a desire to collect runtime statistics from multiple nodes primarily
9136 for server monitoring purposes.   This implements a simple implementation of
9137 such a system, as a skeleton to build more sophistication upon.
9138 
9139 Each client now looks for a 'stats_gatherer.furl' config file.  If it has
9140 been configured to use a stats gatherer, then it instantiates internally
9141 a StatsProvider.  This is a central place for code which wishes to offer
9142 stats up for monitoring to report them to, either by calling
9143 stats_provider.count('stat.name', value) to increment a counter, or by
9144 registering a class as a stats producer with sp.register_producer(obj).
9145 
9146 The StatsProvider connects to the StatsGatherer server and provides its
9147 provider upon startup.  The StatsGatherer is then responsible for polling
9148 the attached providers periodically to retrieve the data provided.
9149 The provider queries each registered producer when the gatherer queries
9150 the provider.  Both the internal 'counters' and the queried 'stats' are
9151 then reported to the gatherer.
9152 
9153 This provides a simple gatherer app, (c.f. make stats-gatherer-run)
9154 which prints its furl and listens for incoming connections.  Once a
9155 minute, the gatherer polls all connected providers, and writes the
9156 retrieved data into a pickle file.
9157 
9158 Also included is a munin plugin which knows how to read the gatherer's
9159 stats.pickle and output data munin can interpret.  this plugin,
9160 tahoe-stats.py can be symlinked as multiple different names within
9161 munin's 'plugins' directory, and inspects argv to determine which
9162 data to display, doing a lookup in a table within that file.
9163 It looks in the environment for 'statsfile' to determine the path to
9164 the gatherer's stats.pickle.  An example plugins-conf.d file is
9165 provided.
9166 
9167]
9168[add some munin plugins
9169warner@allmydata.com**20070705203815]
9170[add mac native build
9171robk-tahoe@allmydata.com**20080123013226
9172 
9173 This patch adds support for a mac native build.
9174 
9175 At the moment it's a fairly simple .app - i.e. so simple as to be unacceptable
9176 for a shipping product, but ok for testing and experiment at this point.
9177 
9178 notably once launched, the app's ui does not respond at all, although its dock
9179 icon does allow it to be force-quit.
9180 
9181 this produces a single .app bundle, which when run will look for a node basedir
9182 in ~/.tahoe.  If one is not found, one will be created in ~/Library/Application
9183 Support/Allmydata Tahoe, and that will be symlinked to ~/.tahoe
9184 
9185 if the basedir is lacking basic config (introducer.furl and root_dir.cap) then
9186 the wx config wizard will be launched to log into an account and to set up
9187 those files.
9188 
9189 if a webport file is not found, the default value of 8123 will be written into
9190 it.
9191 
9192 once the node has started running, a webbrowser will be opened to the webish
9193 interface at the users root_dir
9194 
9195 note that, once configured, the node runs as the main thread of the .app,
9196 no daemonisation is done, twistd is not involved.
9197 
9198 the binary itself, from within the .app bundle, i.e.
9199 "Allmydata Tahoe.app/Contents/MacOS/Allmydata Tahoe"
9200 can be used from the command line and functions as the 'tahoe' executable
9201 would in a unix environment, with one exception - when launched with no args
9202 it triggers the default behaviour of running a node, and if necessary config
9203 wizard, as if the user had launched the .app
9204 
9205 one other gotcha to be aware of is that symlinking to this binary from some
9206 other place in ones $PATH will most likely not work. when I tried this,
9207 something - wx I believe - exploded, since it seems to use argv[0] to figure
9208 out where necessary libraries reside and fails if argv[0] isn't in the .app
9209 bundle.  it's pretty easy to set up a script a la
9210     #!/bin/bash
9211     /Blah/blah/blah/Allmydata\ Tahoe.app/Contents/MacOS/Allmydata\ Tahoe "${@}"
9212 
9213 
9214]
9215[simplify buildbot upload of windows installer
9216robk-tahoe@allmydata.com**20080117022930
9217 
9218 since the installer upload got more complex (needing to chmod files before
9219 rsyncing) I promoted it to a makefile target, simplifying the buildbot steps
9220 involved
9221 
9222]
9223[Makefile: move use of 'cygpath' into win32-conditionalized section
9224warner@allmydata.com**20080115002236]
9225[setup: check for the pywin32 dep only on Windows
9226zooko@zooko.com**20070921211116]
9227[Makefile: use absolute path to src/ in PP, since check-memory needs it (it chdirs then imports allmydata)
9228warner@lothar.com**20070915031743]
9229[Makefile: prepend src/ to the PYTHONPATH
9230zooko@zooko.com**20070914024315]
9231[windows installer build refinements
9232robk-tahoe@allmydata.com**20080114235354
9233 
9234 this resolves problems of py2exe's modulefinder collection of sources from
9235 .zipped egg files, not by using easy_install to reach the --always-unzip
9236 option, but rather with a small tool which unpacks any zipped egg files found
9237 in misc/dependencies.  this fixes the py2exe build given rollback of the
9238 easy_install stuff which had broken the unix builds.  misc/hatch-eggs.py
9239 performs the honours.
9240 
9241 this also includes a misc/sub-ver.py tool which substitutes elements of the
9242 verion number for the current code base (by importing allmydata.__version__
9243 hence make-version should be run first, and the python path carefully managed)
9244 into template files using python's string interpolation of named args from a
9245 dict as the templating syntax.  i.e. %(major)d %(minor)d %(point)d %(nano)d
9246 each expand to the individual components of the version number as codified
9247 by the pyutil.version_class.Version class.  there is also a %(build)s tag
9248 which expands to the string form of the whole version number.  This tool is
9249 used to interpolate the automatically generated version information into the
9250 innosetup source file in a form consistent with innosetup/windows' restrictions
9251]
9252[add windows installer target to build
9253robk-tahoe@allmydata.com**20080112024121
9254 
9255 add 'windows-installer' target to top level makefile to build a windows setup.exe package
9256 using innosetup.  this assumes innosetup 5 is installed in program files as normal.
9257 
9258 this doesn't include any logic to manage version numbers at this point, it's just a
9259 simple experiment to test out building an installer as yet.
9260]
9261[add windows-exe target to makefile
9262robk-tahoe@allmydata.com**20080110010628]
9263[first stab at windows build details.
9264robk-tahoe@allmydata.com**20080110010156
9265 
9266 there are many and various fiddly details that were involved in this process
9267 on mountain view.  This is a stripped down version of the build process used
9268 there.  there's hence a good chance that one or two necessary details got
9269 stripped down through the cracks.
9270 
9271 this provides a py2exe setup.py to build a tahoe.exe and a tahoesvc.exe
9272 the former is equivalent to bin/tahoe, but without the start/stop commands.
9273 the latter is a windows service that instantiates a client whose basedir
9274 is found in the registry.
9275]
9276[introducer: allow nodes to refrain from publishing themselves, by passing furl=None. This would be useful for clients who do not run storage servers.
9277warner@allmydata.com**20080202014838]
9278[client.py: touch BASEDIR/no_storage to not publish a storage server. Addresses #271
9279warner@allmydata.com**20080202020708]
9280[client.py: hush pyflakes
9281warner@allmydata.com**20080202022815]
9282[test_web: fix webapi test around redirection issues
9283robk-tahoe@allmydata.com**20080611221917
9284 
9285 this fixes the test_web test test_POST_upload_mutable which chdir's into
9286 a /foo subdirectory, but then later asserts that the web ui redirects the
9287 user back to /foo, which should really be /foo/ since it's a directory.
9288]
9289[test_web: implement API changes from the recent webapi.txt overhaul
9290warner@allmydata.com**20080519195602]
9291[webish: test error cases more thoroughly by looking inside the response text
9292warner@allmydata.com**20070716190119]
9293[make the unit test of the overwrite button more general
9294zooko@zooko.com**20071220212307]
9295[web: return a proper error upon POST with a bad t= value
9296warner@allmydata.com**20080415181129]
9297[wapi: add POST /uri/$DIRECTORY?t=set_children
9298zooko@zooko.com**20080301004027
9299 Unfinished bits: doc in webapi.txt, test handling of badly formed JSON, return reasonable HTTP response, examination of the effect of this patch on code coverage -- but I'm committing it anyway because MikeB can use it and I'm being called to dinner...
9300 
9301]
9302[test_web.py: remove last use of fake_* methods, remove dead code
9303warner@allmydata.com**20071205051100]
9304[editing: change names like "MyThing" to "FakeThing" for fake objects in unit tests
9305zooko@zooko.com**20071212001029]
9306[webish.py: refactor /uri handlers, one rend.Page class per operation
9307warner@allmydata.com**20080206043820]
9308[webish: factor out queryargs-or-formargs extraction, make /uri?t=mkdir work and redirect to a valid url
9309warner@lothar.com**20071224232652]
9310[test_web: more coverage of URIPOSTHandler error cases
9311warner@lothar.com**20071225044935]
9312[webish: add PUT /uri?mutable=true
9313warner@allmydata.com**20080206041802]
9314[webish: improve test coverage
9315warner@lothar.com**20070917085346]
9316[webish: add POST /uri?t=upload&mutable=true
9317warner@allmydata.com**20080206041022]
9318[tests: put back skipped and todo tests
9319zooko@zooko.com**20080115030241
9320 closes #258 -- "put back skipped and todo tests"
9321]
9322[suppress the skipped and the todo unit tests in order to make unit test results prettier (the install.html instructs users to run the unit tests)
9323zooko@zooko.com**20080104063618]
9324[refactor webish.py slightly, improve the test coverage a bit. One test is marked SKIP pending improvements in webish.py
9325warner@lothar.com**20071225094857]
9326[webish: add upload/view-uri forms (not associated with any particular directory) to the welcome page. Document POST /uri?t=upload .
9327warner@allmydata.com**20080206034440]
9328[webish: add button to make directories and unit test of it
9329zooko@zooko.com**20071220213112
9330 Unfortunately although it passes the unit tests, it doesn't work, because the unit tests and the implementation use the "encode params into URL" technique but the button uses the "encode params into request body" technique.
9331]
9332[web: replace welcome-page download-URI form with new version
9333warner@lothar.com**20070708050622]
9334[test: refactor webist.POSTHandler() to have a method for each "?t=" command
9335zooko@zooko.com**20080229191118
9336 Input validation and decoding is still done in the body of POSTHandler.renderHTTP().
9337]
9338[test_web.py: add coverage for POST t=check
9339warner@allmydata.com**20071205054938]
9340[upload: return an UploadResults instance (with .uri) instead of just a URI
9341warner@allmydata.com**20080206030138]
9342[check-speed: test SSK upload/download speed too. SDMF imposes a limit on the file sizes, no 10MB or 100MB test
9343warner@lothar.com**20071214080531]
9344[check_speed: add optional 100MB test, if the 10MB test finished fast enough
9345Brian Warner <warner@allmydata.com>**20070922070446]
9346[check_speed.py: use more small-file tests to improve accuracy of per-file time
9347Brian Warner <warner@allmydata.com>**20070926015736]
9348[check_speed: measure RTT, report per-file times as a multiple of RTT
9349warner@allmydata.com**20070926200733]
9350[check_speed.py: minor comment
9351warner@allmydata.com**20070926030703]
9352[check_speed: average multiple pings when measuring RTT
9353warner@allmydata.com**20070927011615]
9354[upload-helper: avoid duplicate uploads: check the grid to see if the file already exists
9355warner@allmydata.com**20080131004902]
9356[remove upload.upload_(data,filename,filehandle) convenience functions
9357warner@allmydata.com**20080131010319]
9358[CHK upload helper: don't let one failed upload prevent us from trying again
9359warner@allmydata.com**20080128185813]
9360[offloaded.py: hush pyflakes
9361warner@lothar.com**20080111110514]
9362[offloaded: improve logging across the board
9363warner@lothar.com**20080117071135]
9364[download: use hierarchical logging
9365warner@allmydata.com**20071120010710]
9366[make content-hash-key encryption a parameter of uploading
9367zooko@zooko.com**20080130182450
9368 fixes #293
9369]
9370[offloaded: update unit tests: assert that interrupt/resume works, and that the helper deletes tempfiles
9371warner@lothar.com**20080117071810]
9372[megapatch: overhaul encoding_parameters handling: now it comes from the Uploadable, or the Client. Removed options= too. Also move helper towards resumability.
9373warner@lothar.com**20080116090335]
9374[storage.py: add a test for the next_power_of_k fix I made a few hours ago, basically do an upload with a non-power-of-two number of segments
9375warner@lothar.com**20070714052406]
9376[reduce MAX_SEGMENT_SIZE from 2MB to 1MB, to compensate for the large blocks that 3-of-10 produces
9377warner@allmydata.com**20070716204834]
9378[interfaces: increase ShareSize now that our default k is smaller (hence blocks are bigger)
9379warner@lothar.com**20070714022931]
9380[upload.py: fix signature of NonConvergentUploadMixin.get_encryption_key
9381warner@lothar.com**20070919063811]
9382[update a few documents, comments, and defaults to mention 3-of-10 instead of 25-of-100
9383zooko@zooko.com**20071016025359]
9384[architecture.txt: update to include tahoe2, dirnodes, leases
9385warner@allmydata.com**20070918012448]
9386[tests: make test_encode specify the erasure coding params it wants instead of expecting the defaults to be what it wants
9387zooko@zooko.com**20071016030742]
9388[logging: enable flogging in more places, replace Node.log with flogging
9389warner@allmydata.com**20080115031658]
9390[upload: pass options through to the encoder
9391warner@allmydata.com**20080115031732]
9392[upload: add Encoder.abort(), to abandon the upload in progress. Add some debug hooks to enable unit tests.
9393warner@allmydata.com**20080115032255]
9394[storage: remove the leftover incoming/XYZ/ directory when we're done with it
9395warner@lothar.com**20070915213404]
9396[upload: improve logging
9397warner@allmydata.com**20080115031920]
9398[offloaded: cleanup to handle multiple simultaneous uploaders gracefully
9399warner@allmydata.com**20080115042003]
9400[offloaded: improve logging, pass through options, get ready for testing interrupted uploads. test_system: add (disabled) interrupted-upload test
9401warner@allmydata.com**20080115032426]
9402[offloaded: more test coverage on client side, change interfaces a bit
9403warner@lothar.com**20080111105337]
9404[offloaded: add a system test, make it pass. files are now being uploaded through the helper.
9405warner@lothar.com**20080111114255]
9406[test_system: slight refactoring to eventually make it easier to configure some nodes with the output of others
9407warner@allmydata.com**20080110022354]
9408[upload: oops, fix breakage after removing upload_file/upload_data/etc
9409warner@allmydata.com**20080131014143]
9410[interfaces.py: remove spurious 'pass' statements (which, incidentally, were counted as uncovered code)
9411warner@allmydata.com**20070418224637]
9412[webish: flogify the remaining log messages
9413warner@allmydata.com**20080213013233]
9414[unicode handling: declare dirnodes to contain unicode child names, update webish to match
9415warner@allmydata.com**20080214214556]
9416[improve test coverage on FileNode.check
9417warner@allmydata.com**20071204215527]
9418[fix the overwrite button and add unit test for it
9419zooko@zooko.com**20071214235205]
9420[webish: fix overwrite form display
9421warner@allmydata.com**20071205061513]
9422[test_web.py: add coverage for directory listings that include mutable files
9423warner@allmydata.com**20071205055740]
9424[the new pyflakes is stricter, complaining about function definitions that overshadow earlier definitions or imports. Fix some of its complaints.
9425warner@allmydata.com**20071219004728]
9426[webish: use get_args() everywhere, put .fields=None in MyRequest
9427warner@lothar.com**20071225060704]
9428[webish.POSTHandler: fix typo that meant we didn't look for 'name' in req.fields
9429warner@lothar.com**20070811002528]
9430[webish: strip leading/tailing whitespace from user-provided URIs
9431warner@lothar.com**20070825190506]
9432[webish: append save=true to a GET URL to save-to-disk. Closes #222.
9433warner@allmydata.com**20071212000444]
9434[download.py: use producer/consumer to reduce memory usage, closes #129.
9435warner@lothar.com**20070919073447
9436 If the DownloadTarget is also an IConsumer, give it control of the brakes
9437 by offering ourselves to target.registerProducer(). When they tell us to
9438 pause, set a flag, which is checked between segment downloads and decodes.
9439 webish.py: make WebDownloadTarget an IConsumer and pass control along to
9440 the http.Request, which already knows how to be an IConsumer.
9441 This reduces the memory footprint of stalled HTTP GETs to a bare minimum,
9442 and thus closes #129.
9443 
9444]
9445[make the wapi/wui [*] support creation of a new directory without there already being an existing directory to link the new one into
9446zooko@zooko.com**20071220185817
9447 
9448 [*] WebAPI/WebUI
9449 
9450]
9451[dirnode.py: add metadata= to add_file(), add tests
9452warner@allmydata.com**20080211205328]
9453[test_dirnode.py: assert that we update mtime and preserve ctime
9454warner@allmydata.com**20080211211255]
9455[test_dirnode.py: add diag output to test-ctime/mtime tests
9456warner@allmydata.com**20080211201307]
9457[test_dirnode.py: simplejson-1.7.1 incorrectly rounds floats to two decimal places. Don't let this bug flunk the timestamp test.
9458warner@allmydata.com**20080211233517]
9459[dirnode: add ctime/mtime to metadata, update metadata-modifying APIs. Needs more testing and sanity checking.
9460warner@allmydata.com**20080209004347]
9461[remove wait_for_numpeers and the when_enough_peers call in mutable.Publish
9462warner@allmydata.com**20080114205559]
9463[merge patch to integrate decentralized directories with patch "download: use hierarchical logging"
9464zooko@zooko.com**20071203212721]
9465[the wait_for_numpeers= argument to client.upload() is optional: make both the code and the Interface reflect this
9466warner@allmydata.com**20071207003658]
9467[tidy-up some comments and logging messages
9468zooko@zooko.com**20071215002446]
9469[dirnode: add set_uris() and set_nodes() (plural), to set multiple children at once. Use it to set up a new webapi test for issue #237.
9470warner@allmydata.com**20071219053002]
9471[mutable: always include ourselves in the querylist when Publishing, because 0.7.0 usually stores our root dirnode only on ourselves, and our nodeid might not appear in the first N+epsilon peers
9472warner@allmydata.com**20071219060653]
9473[merge patch to integrate decentralized directories with patch to "only test log.err when Twisted is new enough to let us ignore the generated errors"
9474zooko@zooko.com**20071203212514]
9475[merge patch to integrate decentralized directories with patch to handle bad hashes
9476zooko@zooko.com**20071203212114]
9477[offloaded: move interfaces to interfaces.py, start implementing backend
9478warner@allmydata.com**20080110032547]
9479[control: add measure_peer_response_time(), to estimate RTT for the mesh
9480warner@allmydata.com**20070926192115]
9481[more hierarchical logging: download/upload/encode
9482warner@allmydata.com**20071120013341]
9483[encode.py: add a reactor turn barrier between segments, to allow Deferreds to retire and free their arguments, all in the name of reducing memory footprint
9484warner@allmydata.com**20070810012617]
9485[Encoder.__repr__: mention the file being encoded
9486warner@allmydata.com**20070810012656]
9487[encode.py: log a percentage complete as well as the raw byte counts
9488warner@allmydata.com**20070810012845]
9489[tidiness: return res from logging of progress
9490"Zooko O'Whielacronx <zooko@zooko.com>"**20070402172324]
9491[trailing-whitespace eradication, no functional changes
9492warner@allmydata.com**20071101222238]
9493[fix representation of node ids in PeerTracker objects
9494zooko@zooko.com**20071219235528]
9495[offloaded: more code, fix pyflakes problems, change IEncryptedUploader a bit
9496warner@allmydata.com**20080109235847]
9497[use AES from pycryptopp instead of pycrypto, also truncate the keys slightly differently
9498warner@allmydata.com**20071203232746]
9499[docs/mutable.txt: put fingerprint in read-write URI too, it makes everything easier
9500warner@allmydata.com**20071031233015]
9501[setup: require pycryptopp >= 0.2.6
9502zooko@zooko.com**20071110001500]
9503[setup: require pycryptopp >= v0.2.5
9504zooko@zooko.com**20071109190315]
9505[setup: tell setuptools that we depend on pycryptopp >= 0.2.3
9506zooko@zooko.com**20071107235518]
9507[setup: don't include zope.interface in our automatically-satisfiable dependencies for now
9508zooko@zooko.com**20070927220617]
9509[setup.py: name zope.interface >= 3.0 as one of our dependencies
9510zooko@zooko.com**20070920174650]
9511[setup: upgrade bundled pycryptopp from v0.2.5 to v0.2.6
9512zooko@zooko.com**20071110001436]
9513[setup: upgrade the bundled pycryptopp tarball from pycryptopp v0.2.3 to pycryptopp v0.2.5
9514zooko@zooko.com**20071109190249]
9515[setup: upgrade to pycryptopp v0.2.3
9516zooko@zooko.com**20071107235446]
9517[mutable: fix control flow to allow good+bad shares from a peer. Fixes #211.
9518warner@allmydata.com**20071116231233]
9519[mutable: add more logging to retrieval process
9520warner@allmydata.com**20071115202256]
9521[test_mutable: workaround: use more peers to avoid random test failures.
9522warner@allmydata.com**20071115205500
9523 
9524 The underlying issue is recorded in #211: one corrupt share in a query
9525 response will cause us to ignore the remaining shares in that response, even
9526 if they are good. In our tests (with N=10 but only 5 peers), this can leave
9527 us with too few shares to recover the file.
9528 
9529 The temporary workaround is to use 10 peers, to make sure we never get
9530 multiple shares per response. The real fix will be to fix the control flow.
9531 
9532 This fixes #209.
9533 
9534]
9535[offloaded: create a Helper if 'run_helper' is non-empty
9536warner@allmydata.com**20080110022505]
9537[remove automatic private dir
9538zooko@zooko.com**20080103230205
9539  * rename my_private_dir.cap to root_dir.cap
9540  * move it into the private subdir
9541  * change the cmdline argument "--root-uri=[private]" to "--dir-uri=[root]"
9542 
9543]
9544[web: change title to say 'Tahoe', not tahoe2
9545warner@lothar.com**20070708043038]
9546[remove leftover defer.setDebugging(), to speed up tests from 200s to 83s
9547warner@allmydata.com**20071203231002]
9548[we no longer need to replace "/" with "!" in urls
9549zooko@zooko.com**20071215002550]
9550[add POST /uri?t=upload and tests thereof
9551zooko@zooko.com**20071206231702
9552 Hm...  I refactored processing of segments in a way that I marked as "XXX HELP
9553 I AM YUCKY", and then I ran out of time for rerefactoring it before I
9554 committed.  At least all the tests pass.
9555 
9556]
9557[webish: add POST t=mutable, make it replace files in-place, add t=overwrite
9558warner@allmydata.com**20071205054254]
9559[docs/webapi.txt: document the POST t=upload&mutable=on command used to create mutable files
9560warner@lothar.com**20071109100507]
9561[fix unit tests to assert that we do *not* link to start.html when there is no private dir, instead of asserting that we *do*
9562zooko@zooko.com**20071218005116]
9563[do not put a link from the welcoÂme page to the start.html if there is not a private directory
9564zooko@zooko.com**20071218003559]
9565[rename "my_private_dir.uri" to "my_private_dir.cap"
9566zooko@zooko.com**20071218003525]
9567[put all private state in $BASEDIR/private
9568zooko@zooko.com**20071217223954
9569 fixes #219
9570 
9571 The only part of #219 that this doesn't include is the part about
9572 logpublisher, which has been moved out of tahoe into foolscap.
9573 
9574]
9575[node: change get_or_create_config to strip whitespace and accept a filemode= argument
9576warner@lothar.com**20070828022350]
9577[node.py: change get_or_create_config() to accept a function
9578warner@lothar.com**20070828020712]
9579[remove test in test_client -- we can't easily assert that files aren't readable by others, on Windows
9580zooko@zooko.com**20070914031226]
9581[node.py: chmod the foolscap private key (node.pem) to 0600, since it's secret
9582warner@allmydata.com**20070921235255]
9583[node.py: use Tub's certFile= argument instead of doing it ourselves
9584warner@allmydata.com**20070523194123]
9585[don't test for existence of certfile and then try to open it -- instead try to open it and catch exception
9586"Zooko O'Whielacronx <zooko@zooko.com>"**20070522210416
9587 This avoids a race condition, also known as time-of-check-to-time-of-use.
9588 
9589]
9590[move increase_rlimits() into iputil and make it a no-op on Windows
9591zooko@zooko.com**20071207140343]
9592[fix iputil so that it doesn't launch dozens of processes when you give it a full path and so that it tries executables in preference order and stops as soon as one gives out a dotted-quad string
9593zooko@zooko.com**20070809175647]
9594[iputil.get_local_ip_for: tolerate running on a disconnected host
9595Brian Warner <warner@lothar.com>**20070608022333]
9596[refactor iputil and make it return addresses in descending order of goodness instead of in a set
9597"Zooko O'Whielacronx <zooko@zooko.com>"**20070522210637
9598 Actually of course iputil can't tell exactly how good they are, and a wise user
9599 of iputil will try all of them.  But you can't try all of them simultaneously,
9600 so you might as well try the best ones first.
9601 
9602]
9603[node.py: try to fix rlimit-setting again
9604warner@allmydata.com**20071116221238]
9605[node.py: try rlimit fix again
9606warner@allmydata.com**20071116050902]
9607[node.py: try to fix RLIMIT_NOFILE on solaris too
9608warner@allmydata.com**20071116050644]
9609[remove logpublisher, use the Foolscap version now that this functionality has been moved into Foolscap-0.2.2
9610warner@lothar.com**20071213023101]
9611[introducer_and_vdrive.py: use logpublisher too
9612warner@allmydata.com**20071120202226]
9613[refactor the feature of getting versions of packages, include the version numbers of more of the packages that we use
9614zooko@zooko.com**20071213013737]
9615[setup: print out the version number of pycryptopp in "tahoe --version"
9616zooko@zooko.com**20071107161156]
9617[setup: add Crypto++ and pycryptopp to dependencies
9618zooko@zooko.com**20071107160013
9619 Crypto++ is a new manual dependency (boo hoo), and pycryptopp is a new automatic dependency.
9620]
9621[setup: split off README.win32 from README and paste in Mike Booker's notes about building OpenSSL
9622zooko@zooko.com**20071015160841]
9623[CREDITS: nejucomo
9624zooko@zooko.com**20070918214313]
9625[update CREDITS file
9626zooko@zooko.com**20070629212230]
9627[add CREDITS file where people who contribute source code, docs, web page updates, etc., are recorded
9628"Zooko O'Whielacronx <zooko@zooko.com>"**20070506211143]
9629[README: OpenSSL is bundled with pyOpenSSL on Windows-native
9630zooko@zooko.com**20071004151253
9631 
9632]
9633[README: add note about how to build on Windows-native using gcc, and a bit of editing
9634zooko@zooko.com**20071004193721]
9635[setup: add misc/dependencies/pycryptopp-0.2.1.tar.gz
9636zooko@zooko.com**20071107155951]
9637[node.py: raise RLIMIT_NOFILE on bsd/cygwin to more than 256
9638warner@allmydata.com**20071116045355]
9639[patch the LogObserver in a more modern, forward-compatible way and update the in-line comments about it
9640czooko@zooko.com**20071022235255]
9641[a slightly nicer method of computing our timestamp format
9642zooko@zooko.com**20071015034651]
9643[logpublisher: hush pyflakes warning
9644warner@allmydata.com**20071117021446]
9645[logpublisher: implement subscribe/publish for log, add a sample client
9646warner@lothar.com**20071117020750]
9647[implement preliminary log publisher/gatherer
9648warner@allmydata.com**20071102002915
9649 
9650 This creates a Referenceable object that will eventually be able to publish
9651 log events to a remote subscriber (at present all it can do is provide
9652 version information). The FURL for this logport is written to 'logport.furl'.
9653 
9654 In addition, if a file named 'log_gatherer.furl' is present, the given target
9655 will be contacted and offered access to the logport. This can be used by a
9656 centralized logging agent to subscribe to logs, e.g. from all the nodes in a
9657 centrally-maintained storage grid. (think syslog -r, but with all the
9658 security properties of FURLs, and permitting non-printable strings and
9659 structured data).
9660 
9661 Once this framework matures a bit, it will be moved into Foolscap.
9662 
9663]
9664[test_node.py: hush pyflakes warnings
9665warner@allmydata.com**20070524005504]
9666[update docs about webport (fixes #185)
9667zooko@zooko.com**20071023005052]
9668[README: use 8123 instead of 8080/8443 as the example port numbers
9669zooko@zooko.com**20070924185524
9670 If people follow the example, I'd like for them to land on an otherwise
9671 little-claimed port number in case we standardize on it in order to facilitate
9672 exchange of URLs.
9673 
9674]
9675[change another example to use port 8123
9676zooko@zooko.com**20071011231213]
9677[README: give a link to the TestGrid page
9678zooko@zooko.com**20071015215553]
9679[test_node.py: improve test coverage of node.py
9680warner@lothar.com**20071031075442]
9681[hierarchical logging: add numbered messages and parent= args
9682warner@allmydata.com**20071120002318]
9683[add unit test for "advertised_ip_addresses" feature and fix bug in that feature uncovered by this unit test
9684"Zooko O'Whielacronx <zooko@zooko.com>"**20070523220855]
9685[Add some passing unit tests for testutil.PollMixin.
9686nejucomo@gmail.com**20070907231541]
9687[fileutil: add du() function
9688warner@allmydata.com**20070703224945]
9689[test_util: improve test coverage of allmydata.util.fileutil
9690warner@lothar.com**20070703181505]
9691[test_util: add more coverage for assertutil.py
9692warner@lothar.com**20070408200213]
9693[test_util: add full coverage for mathutil.py
9694warner@lothar.com**20070408194301]
9695[install our custom timestamp formats in a less disruptive way
9696zooko@zooko.com**20071015034311
9697 The unit tests on Windows fail because trial is attempting to remove its own
9698 log observer during teardown.  This patch customizes the extant log observer
9699 object by replacing its formatTime method with our own.
9700 
9701 I first tried the approach of storing their log observer object and putting it
9702 back during teardown, but it didn't work (perhaps because our node object
9703 doesn't get a chance to do its deferred stopService behavior in time), and
9704 anyway I generally prefer the "fail-safe", or "crash-only" design.
9705 
9706]
9707[remove unused imports (thanks, pyflakes)
9708zooko@zooko.com**20071015153221]
9709[node.py: fix timestamps (add ms and Z) by replacing the FileLogObserver. #171.
9710warner@allmydata.com**20071012003007]
9711[node.py: log twisted version along with tahoe/foolscap/zfec versions
9712warner@allmydata.com**20070531182106]
9713[node.py: don't append 'Z' to the timestamp, since it's really localtime. We need deeper changes to make it be UTC
9714warner@lothar.com**20071011092417]
9715[node.py: set logging timestamp to '2007-10-11 02:11:14.000Z', per ticket #171. No milliseconds yet, though
9716warner@lothar.com**20071011091305]
9717[trying to introduce old style humanreadablied logs hopefully without breaking the existing ones
9718tahoe@arnowaschk.de**20070811215237]
9719[mutable: handle bad hashes, improve test coverage, rearrange slightly to facilitate these
9720warner@allmydata.com**20071114050815]
9721[mutable: make error handling more robust
9722warner@allmydata.com**20071107234545]
9723[rename "secret" to "lease_secret" and change its size from 16 to 32 bytes
9724zooko@zooko.com**20071218003411]
9725[my_private_dir.cap: add newline for readability, open with mode 'w' not 'w+' since we don't need to read from this filehandle
9726warner@allmydata.com**20071218024848]
9727[move my_private_dir.cap into private/
9728warner@allmydata.com**20071218025740]
9729[remove some no-longer needed replacements of "/" with "!" in uris
9730zooko@zooko.com**20071219235440]
9731[A hastily written single-threaded read-only fuse client.
9732nejucomo@gmail.com**20071120072150]
9733[add human-encodings of caps, refactor encodings of caps, tighten checks, fix unit tests to use values of the right size
9734zooko@zooko.com**20080103225543]
9735[unit test that POST /uri/?t=mkdir works
9736zooko@zooko.com**20071218234749]
9737[refactor constructing URI objects from strings and add human-encoding of WriteableSSKFileURI
9738zooko@zooko.com**20080103041215]
9739[remove the DirnodeURI foolscap schema and mv those regexes into uri.py
9740zooko@zooko.com**20071218234424
9741 We currently do not pass dirnode uris over foolscap.
9742]
9743[make more precise regexp for WriteableSSKFileURI and DirnodeURI and use it in unit tests
9744zooko@zooko.com**20071218191508
9745 Also allow an optional leading "http://127.0.0.1:8123/uri/".
9746 Also fix a few unit tests to generate bogus Dirnode URIs of the modern form instead of the former form.
9747 
9748]
9749[remove most (maybe all?) traces of old Dirnode class. Yay for negative code days.
9750warner@allmydata.com**20071204230058]
9751[uri.py: improve test coverage
9752warner@allmydata.com**20071204233831]
9753[trailing-whitespace eradication, no functional changes
9754warner@allmydata.com**20071101222504]
9755[refactor test_uri and add a test of the empty file
9756zooko@zooko.com**20070726174830]
9757[refactor web tests, and interfaces.IFileNode
9758warner@allmydata.com**20071205050137]
9759[remove PyCrypto, now we only use pycrypto++
9760warner@allmydata.com**20071204001001]
9761[hush pyflakes warning in Crypto.Util.number
9762warner@allmydata.com**20070814211712]
9763[set the zip_safe flag to False
9764zooko@zooko.com**20070913223755
9765 This means that by default the allmydata-tahoe egg will be a directory with a tree of files instead of a zip file containing files.  I prefer the former because it makes it easier for people to hack into it.
9766 Unfortunately the files therein are still going to be .pyc's instead of .py's, if I understand correctly.  I would prefer for them to be .py's.  See also discussion on the distutils-sig mailing list:
9767 
9768 http://mail.python.org/pipermail/distutils-sig/2007-July/007827.html
9769 
9770]
9771[rename bin/allmydata-tahoe to bin/tahoe. Closes #155.
9772warner@lothar.com**20071011103824]
9773[README: mention strports-ness of NODE/webport, closes #55
9774warner@allmydata.com**20070606164918]
9775[bin/allmydata-tahoe: add a sys.path-modifying preamble to make it easy to run from source
9776warner@allmydata.com**20070606182400]
9777[/twistd.log -> /logs/twistd.log
9778wilcoxjg@gmail.com**20070809035328]
9779[test_runner: try harder to work on slow buildslaves and cygwin
9780warner@allmydata.com**20070919205600]
9781[client.py: make a note in the logs when the auto-shutdown feature is in use
9782Brian Warner <warner@allmydata.com>**20070814091230]
9783[test_runner: better diagnostics in case test_client fails
9784warner@allmydata.com**20070919030318]
9785[test_runner.py: fix race conditions in start/stop node, should run on cygwin now
9786warner@allmydata.com**20070918221726]
9787[test_runner.py: skip the start/stop test when sys.platform is win32/cygwin.
9788Brian Warner <warner@allmydata.com>**20070918045608
9789 The previous twisted.python.runtime.platformType approach didn't catch cygwin
9790 for some reason.
9791]
9792[test_runner.py: add tests for startstop_node.py
9793warner@lothar.com**20070917092531]
9794[Makefile: check-speed: leave the client node stopped when we're done
9795warner@allmydata.com**20070921020316]
9796[setup: use the setuptools "console_scripts" feature to get an allmydata-tahoe.exe on Windows
9797zooko@zooko.com**20070921205627]
9798[README: fix/update description of allmydata-tahoe
9799zooko@zooko.com**20070924185417]
9800[debian/feisty: use our original bin/allmydata-tahoe instead of setuptools's
9801warner@allmydata.com**20070927005230
9802 because the setuptools "entry points" form asserts that there are
9803 setuptools-visible packages like nevow/zope.interface (i.e. they have .egg-info
9804 metadata). Until very recently, most debian systems did not install this
9805 metadata. Instead, we rely upon the usual debian dependency checking as
9806 expressed in debian/control .
9807 
9808]
9809[debian/sid: copy rules from feisty, the same can be used for both
9810warner@allmydata.com**20070927005524]
9811[debian: remove the lines that install the now-removed .tac files
9812warner@lothar.com**20070407035132]
9813[debian: depend upon python-zfec, stop including zfec in the tahoe .deb
9814warner@allmydata.com**20070821205451]
9815[debian: make all .debs dependent upon python-simplejson. We must create the dapper package, the others are available upstream
9816warner@allmydata.com**20070711210156]
9817[debian: add python-twisted, python-nevow, python-pyopenssl to the dapper dependencies
9818warner@allmydata.com**20070329192214]
9819[debian: add python-nevow to the sid dependencies
9820warner@allmydata.com**20070329192241]
9821[README: refactor README
9822zooko@zooko.com**20071002201907
9823 fixes #163
9824 hopefully fixes #148 -- but somebody else will have to try it (maybe Mike Booker) to find out!
9825 
9826]
9827[README: update the wording of the "LICENCE" section to more closely follow FSF recommendations
9828zooko@zooko.com**20070912183157]
9829[README: update wording of licence
9830zooko@zooko.com**20070823205130]
9831[README: point to new location of wiki/SetuptoolsAndGNUStow
9832zooko@zooko.com**20070921164345]
9833[README: demote The Debian Way
9834zooko@zooko.com**20070921204257]
9835[README: update on how to test and how to run tahoe after installation
9836zooko@zooko.com**20070921205725]
9837[README: add notes about how to use easy_install for dependencies
9838zooko@zooko.com**20070923124711]
9839[README: fix bug in which pywin32 was mentioned as easy_installable
9840zooko@zooko.com**20070924184124]
9841[README: fix bug in which How To Build was omitted from The Running-In-Place Way to install.
9842zooko@zooko.com**20070924184140]
9843[README: further clarity about when you need to acquire source and when you don't
9844zooko@zooko.com**20070921190401]
9845[README: updated debian-packaging section a bit, replace dapper with etch
9846warner@allmydata.com**20070822000725]
9847[README: update/clarify the build-depends packages need to create .debs
9848Brian Warner <warner@allmydata.com>**20070817033007]
9849[README: add dependency on OpenSSL
9850zooko@zooko.com**20070929180525]
9851[setup: alas, pywin32 doesn't actually work as an easy_install; also make dependency missing errors more useful
9852zooko@zooko.com**20070921204028]
9853[Makefile: use .built to only require one tahoe-compile pass
9854warner@allmydata.com**20070919192830]
9855[boringfile: ignore .checked-deps
9856warner@lothar.com**20070916082654]
9857[Makefile: fix and-vs-or bug in check-deps, hide errmsg in non-failing cases
9858warner@allmydata.com**20070919232355]
9859[Makefile: give explicit failure message to user if dependencies aren't found
9860zooko@zooko.com**20070920000436]
9861[Makefile: don't re-check dependencies on each test run, and fix clean target
9862warner@lothar.com**20070915221755]
9863[Makefile: clean: remove _trial_temp/ and _test_memory/ too
9864warner@lothar.com**20070915205559]
9865[README: explain the new packaging system
9866zooko@zooko.com**20070921023254
9867 Happily, the README is now shorter and simpler.
9868]
9869[fix error in README about windows builds
9870"Zooko O'Whielacronx <zooko@zooko.com>"**20070502054433]
9871[added notes on pywin32 version support to README
9872robk-org@allmydata.com**20070613200936]
9873[require setuptools >= 0.6c6 on cygwin, and >= 0.6a9 on other platforms
9874zooko@zooko.com**20070807211554
9875 
9876 Earlier I tried 0.6a9 (which comes in .deb format on Dapper) and something
9877 didn't work, so I raised it to 0.6c3.  However, I didn't make a note of what
9878 failed, and so now I'm hoping that what failed was cygwin-specific.  Anyway,
9879 everyone look out for setuptools compatibility problems on the your favorite
9880 platform (and I'll check the buildslaves), and we'll raise the required version
9881 as little as possible and only on the problematic platform.
9882 
9883]
9884[update README to reflect requirement of setuptools 0.6c6
9885zooko@zooko.com**20070807191259]
9886[setuptools upgrade to 0.6c6
9887tahoe@arnowaschk.de**20070731231811]
9888[change the 'ez_setup.py' script to have distinct desired & minimum required versions of setuptools
9889robk-org@allmydata.com**20070606194903
9890 
9891 and change zfec/setup.py's invocation of ez_setup to require 0.6a9 (which happens to be the default
9892 version installed by apt-get on dapper machines) while leaving the default (desired) version at 0.6c5
9893]
9894[zfec: switch back to minimum setuptools of 0.6c3
9895"Zooko O'Whielacronx <zooko@zooko.com>"**20070430201838
9896 This is newer than the one that comes with Dapper Ubuntu 6.06, *but* if there is no setuptools at all installed, then the bootstrap script will download one itself.  So with this patch, this will install cleanly on a Dapper system as long as the Dapper version of python-setuptools is *not* installed.
9897 
9898]
9899[zfec: see if we can get by with the version of setuptools that comes with Ubuntu 6.06 Dapper
9900"Zooko O'Whielacronx <zooko@zooko.com>"**20070430181647]
9901[zfec: see if we can get by with the version of setuptools that is already in Ubuntu 6.10
9902"Zooko O'Whielacronx <zooko@zooko.com>"**20070430180830]
9903[zfec: complete the removal of the 15-second delay when downloading setuptools
9904"Zooko O'Whielacronx <zooko@zooko.com>"**20070501005643]
9905[zfec: add the setuptools bootstrap script to download setuptools automatically
9906"Zooko O'Whielacronx <zooko@zooko.com>"**20070430062613]
9907[zfec: update licence, contact info, description
9908"Zooko O'Whielacronx <zooko@zooko.com>"**20070427181434]
9909[fec: add test for mathutil
9910warner@allmydata.com**20070416190158]
9911[zfec: use setuptools to construct executables, fix bug on Windows -- forgot "BINARY" flag to output files
9912zooko@zooko.com**20070421020612]
9913[rename bin/fec and bin/unfec to zfec and zunfec
9914warner@lothar.com**20070418192333]
9915[zfec: mv the cmdline tools from "bin/" to "cmdline/", because setuptools overwrites the contents of "bin/" when creating executables
9916"Zooko O'Whielacronx <zooko@zooko.com>"**20070420190914]
9917[zfec: update docs, metadata, version number to 1.0.0a2-0-STABLE
9918zooko@zooko.com**20070418230103]
9919[pyfec: bump version number to  1.0.0a1-2-STABLE
9920"Zooko O'Whielacronx <zooko@zooko.com>"**20070415190812]
9921[pyfec: bump version number to 1.0.0a1-1-STABLE
9922"Zooko O'Whielacronx <zooko@zooko.com>"**20070415005040]
9923[zfec: tweak licence text for clarity
9924zooko@zooko.com**20070426225216]
9925[zfec: change formatting of copyright timestamps, licence etc.
9926"Zooko O'Whielacronx <zooko@zooko.com>"**20070420175254]
9927[rename top-level package from 'fec' to 'zfec'
9928warner@lothar.com**20070418191812]
9929[rename the C extension from "fec" to "_fec"
9930zooko@zooko.com**20070127015804]
9931[pyfec: add -f option to fec, add more user-friendly handling of filesystem errors and user errors
9932"Zooko O'Whielacronx <zooko@zooko.com>"**20070415004832]
9933[pyfec: more progress indicators, handling of already-existent outfile
9934"Zooko O'Whielacronx <zooko@zooko.com>"**20070414230059]
9935[pyfec: fix up docs, version numbers, bump version to 1.0.0a1-0-STABLE
9936"Zooko O'Whielacronx <zooko@zooko.com>"**20070414195451]
9937[pyfec: version number bump to v0.99
9938"Zooko O'Whielacronx <zooko@zooko.com>"**20070201215235]
9939[pyfec: improve package metadata
9940zooko@zooko.com**20070126000829]
9941[pyfec: add bin/fec and bin/unfec, do better handling and reporting of various errors
9942"Zooko O'Whielacronx <zooko@zooko.com>"**20070414190010]
9943[pyfec: import a copy of the argparse module
9944"Zooko O'Whielacronx <zooko@zooko.com>"**20070414180554]
9945[pyfec: update README and bump version number to 0.9.9-0-STABLE
9946"Zooko O'Whielacronx <zooko@zooko.com>"**20070414190218]
9947[pyfec: more thanks to Brian
9948zooko@zooko.com**20070328222251]
9949[give it a version number -- v0.9
9950"Zooko O'Whielacronx <zooko@zooko.com>"**20070411174933
9951 I intend to bump it to 1.0 after adding the cmdline tools.
9952 
9953]
9954[pyfec: add fec/__init__.py to import all the right names into the fec module namespace
9955zooko@zooko.com**20070127022536]
9956[pyfec: new filefec with compressed metadata, better error handling, much better unit tests
9957"Zooko O'Whielacronx <zooko@zooko.com>"**20070414181924]
9958[pyfec: add ACK and TODO
9959"Zooko O'Whielacronx <zooko@zooko.com>"**20070201214915]
9960[pyfec: licensing tweak
9961"Zooko O'Whielacronx <zooko@zooko.com>"**20070131195420]
9962[pyfec: documentation and licensing
9963"Zooko O'Whielacronx <zooko@zooko.com>"**20070130163642]
9964[pyfec: COPYING
9965zooko@zooko.com**20070130162826]
9966[pyfec: add TODO
9967"Zooko O'Whielacronx <zooko@zooko.com>"**20070201163748]
9968[pyfec: rename and clarify -- "blocks" are the units of input/output of the codec, "shares" are sequences of blocks (used to process arbitrary-length files)
9969zooko@zooko.com**20070330185243]
9970[add dummy function to see how fast we can read in a file and invoke a Python function on each segment
9971zooko@zooko.com**20070125235026]
9972[pyfec: add documentation, assertion, licence information
9973zooko@zooko.com**20070328031406]
9974[pyfec: make randomized unit tests more comprehensive
9975"Zooko O'Whielacronx <zooko@zooko.com>"**20070201010224]
9976[merge changes and fix wrong type -- k and m need more than 8 bits (because they are the count rather than the index, i.e. they are 1-indexed)
9977"Zooko O'Whielacronx <zooko@zooko.com>"**20070411173427]
9978[pyfec: loosen preconditions -- you can have up to 256 total shares, not up to 255 total shares
9979"Zooko O'Whielacronx <zooko@zooko.com>"**20070131225316]
9980[pyfec: fix precondition checks on k and m to actually check the value before coercing it into a smaller type (oops)
9981"Zooko O'Whielacronx <zooko@zooko.com>"**20070201010140]
9982[pyfec: tighten internal C types
9983"Zooko O'Whielacronx <zooko@zooko.com>"**20070131195531]
9984[pyfec: make unit test failures print out a few useful bytes instead of kibibytes
9985"Zooko O'Whielacronx <zooko@zooko.com>"**20070201010257]
9986[pyfec: add easyfec.Decoder(), which is easier to use than fec.Decoder()
9987"Zooko O'Whielacronx <zooko@zooko.com>"**20070414175245]
9988[pyfec: add easyfec wrapper which takes a single string and splits it into input shares and pads, then passes it on to the inner fec object
9989zooko@zooko.com**20070328031430]
9990[add copyright notices, license, attributions
9991zooko@zooko.com**20070126000216]
9992[add verbosity option to bench
9993"Zooko O'Whielacronx <zooko@zooko.com>"**20070328004259]
9994[pyfec: import a copy of fileutil.py from the pyutil library
9995"Zooko O'Whielacronx <zooko@zooko.com>"**20070414175402]
9996[pyfec: import a copy of mathutil.py from the pyutil library
9997"Zooko O'Whielacronx <zooko@zooko.com>"**20070414175443]
9998[import Version from pyutil
9999"Zooko O'Whielacronx <zooko@zooko.com>"**20070411174844]
10000[simplejson: lower our minimum-required-version of setuptools to 0.6a9, since that seems to work, and it's the version that comes with dapper
10001warner@lothar.com**20070714024756]
10002[patch simplejson's ezsetup to take a min_version, and patch setup.py to use it, to allow installs on edgy machines with setuptools-0.6c3
10003warner@lothar.com**20070710231111]
10004[import simplejson-1.7.1 into src/simplejson
10005warner@lothar.com**20070710222253]
10006[README: add note about what "darcs get" will do and how to run "darcs pull"
10007zooko@zooko.com**20070809032832]
10008[README: point people to allmydata.org if they are looking for precompiled packages
10009zooko@zooko.com**20070809034403]
10010[README: nevow is now automatically handled by build-deps/install
10011warner@lothar.com**20070915211945]
10012[setup: add pywin32 to our dependencies if sys.platform == "win32"
10013zooko@zooko.com**20070920180540]
10014[setup.py: factor out dependency stuff, add workaround for nevow-0.6.0-on-dapper problem
10015warner@lothar.com**20070915220535]
10016[edit README and require Nevow 0.9.18
10017zooko@zooko.com**20070629223338
10018 If anybody out there is running with Nevow < v0.9.18 and wants to vouch for it, then we can relax that requirement.
10019]
10020[build-deps-setup.py: provide dependency_links too
10021warner@lothar.com**20070915210457]
10022[build-deps-setup.py: use ez_setup here too, for platforms without setuptools
10023Brian Warner <warner@lothar.com>**20070915093140]
10024[setup.py: minor reformatting, use explicit file: URLs in dependency-links
10025warner@lothar.com**20070915210532]
10026[change setup.py to find dependency tarballs in misc/dependencies
10027zooko@zooko.com**20070913223727]
10028[setup.py: require simplejson>=1.4, since we use the indent= argument
10029Brian Warner <warner@allmydata.com>**20070914102415]
10030[setup.py: add Nevow to our dependency list
10031warner@lothar.com**20070915211807]
10032[setup.py: remove nevow dependency: we need it, but easy_install can't install it
10033warner@lothar.com**20070912235538]
10034[Makefile build-deps: use a fake package named 'tahoe-deps', to avoid a double-build of tahoe
10035warner@lothar.com**20070915022355]
10036[insert misc/dependencies
10037zooko@zooko.com**20070913215010]
10038[Makefile: improve 'clean' behavior: rm ez_setup leftovers, ignore _version.py
10039Brian Warner <warner@allmydata.com>**20070914102856
10040 in the test-clean target
10041]
10042[Makefile: fix race condition in test-clean that caused occasional failures
10043Brian Warner <warner@allmydata.com>**20070822042851]
10044[makefile: add a test-clean target
10045warner@allmydata.com**20070524005748]
10046[remove parts of pycrypto that we are no longer going to use: SHA256 and RSA
10047zooko@zooko.com**20071110002112]
10048[crypto: fix compiler warnings in the .c files
10049warner@lothar.com**20070816004852]
10050[setup.py: oops, I inserted a typo by commenting out the wrong line
10051Brian Warner <warner@lothar.com>**20070816075658]
10052[setup.py: disable building RSA for now, since it requires GMP. We'll refrain
10053Brian Warner <warner@lothar.com>**20070816075221
10054 from adding it to the build-dependencies until we actually want to use RSA.
10055]
10056[trailing-whitespace eradication, no functional changes
10057warner@allmydata.com**20071101223341]
10058[copy RSA from PyCrypto into the allmydata/ tree, we'll use it eventually
10059warner@lothar.com**20070816003639]
10060[test_dirnode.py: obtain full coverage of dirnode.py
10061warner@allmydata.com**20071204203204]
10062[test_mutable.py: hush pyflakes
10063warner@lothar.com**20071106073239]
10064[fix several bugs and warnings -- thanks, pyflakes
10065zooko@zooko.com**20071203214235]
10066[test_mutable: improve test coverage a bit, add test_filenode.py
10067warner@allmydata.com**20071204033754]
10068[fix idlib.could_be_base32_encoded_l() to accept *only* valid strings
10069zooko@zooko.com**20080103174311]
10070[add regexes to idlib to match certain kinds of base32-encoded values
10071zooko@zooko.com**20080103224446]
10072[offloaded: basic test for client-side of AssistedUploader
10073warner@allmydata.com**20080110022550]
10074[offloaded: early code: most of client-side, defined the RemoteInterfaces
10075warner@allmydata.com**20080109031854]
10076[webish: add edge metadata to t=json output, including timestamps
10077warner@allmydata.com**20080212011410]
10078[rename dirnode2.py to dirnode.py
10079warner@allmydata.com**20071204174520]
10080[decentralized directories: integration and testing
10081zooko@zooko.com**20071203205242
10082  * use new decentralized directories everywhere instead of old centralized directories
10083  * provide UI to them through the web server
10084  * provide UI to them through the CLI
10085  * update unit tests to simulate decentralized mutable directories in order to test other components that rely on them
10086  * remove the notion of a "vdrive server" and a client thereof
10087  * remove the notion of a "public vdrive", which was a directory that was centrally published/subscribed automatically by the tahoe node (you can accomplish this manually by making a directory and posting the URL to it on your web site, for example)
10088  * add a notion of "wait_for_numpeers" when you need to publish data to peers, which is how many peers should be attached before you start.  The default is 1.
10089  * add __repr__ for filesystem nodes (note: these reprs contain a few bits of the secret key!)
10090  * fix a few bugs where we used to equate "mutable" with "not read-only".  Nowadays all directories are mutable, but some might be read-only (to you).
10091  * fix a few bugs where code wasn't aware of the new general-purpose metadata dict the comes with each filesystem edge
10092  * sundry fixes to unit tests to adjust to the new directories, e.g. don't assume that every share on disk belongs to a chk file.
10093 
10094]
10095[fix test cases to not use camelCase
10096warner@lothar.com**20061201022000]
10097[test_introducer: flushEventualQueue at the end of the test run
10098warner@allmydata.com**20070328001613]
10099[introducer: add some comments about separating nodeid from tubid
10100warner@allmydata.com**20070329181629]
10101[test_system: turn off test_connections, since it is slow and subsumed by the other system tests
10102warner@allmydata.com**20070418230657]
10103[rename all "*PBURL*" to "*FURL*"
10104"Zooko O'Whielacronx <zooko@zooko.com>"**20070522210830
10105 This breaks backwards compatibility with Tahoe v0.2 -- the first public release of Tahoe.
10106 
10107]
10108[node.py: use 'node.pem' for all nodes
10109warner@allmydata.com**20070523194852
10110 
10111 Rather than use separate client.pem and introducer.pem files, use 'node.pem'
10112 for all nodes regardless of what type it is. This is slightly cleaner, but
10113 introduces a compatibility. Users who upgrade to this change should do
10114 'mv client.pem node.pem' to avoid generating a new certificate and thus
10115 changing their TubID.
10116 
10117]
10118[node.py: add logging of startup/shutdown, for the cygwin test_system failure
10119warner@allmydata.com**20070531204422]
10120[add a missing up-call in introducer.startService()
10121robk-org@allmydata.com**20070605014540]
10122[webish: mark read-only directories as such when listing their parent
10123warner@lothar.com**20070626193700]
10124[change IVirtualDrive.get_node_at_path to accept either a list or a single slash-separated string
10125warner@allmydata.com**20070629004614]
10126[interfaces.py: remove some unused 'pass' lines
10127Brian Warner <warner@allmydata.com>**20070629075000]
10128[interfaces: remove spurious 'self' from interface declarations
10129warner@lothar.com**20070707023947]
10130[web: use KeyError (rather than IndexError) to signal a missing child
10131warner@lothar.com**20070707024008]
10132[web: missed a IndexError-to-KeyError conversion
10133warner@lothar.com**20070707024303]
10134[interfaces.py: increase RIVirtualDriveServer.list constraint from 100 entries to 1000, for now
10135warner@allmydata.com**20070712202352]
10136[webish.py: test that _get_or_create_directories fix I made a few hours ago
10137warner@lothar.com**20070714051916]
10138[introducer: don't log.err() an initial connection failure, since that flunks tests. Use self.log() instead. Also improve test_client.py to always trigger this case, before it was finishing to quickly to always hit the problem.
10139warner@allmydata.com**20070809195344]
10140[log a prominent warning message in the case that the introducer cannot be reached
10141robk-org@allmydata.com**20070605014853]
10142[shorten ids
10143tahoe@arnowaschk.de**20070812185318]
10144[test_system.py: add coverage for get_permuted_peers()
10145warner@lothar.com**20070812232934]
10146[IDirectoryNode: add has_child() method
10147warner@allmydata.com**20070815202201]
10148[webish: modify JSON to match zooko's proposed API changes in #118
10149warner@allmydata.com**20070823200039]
10150[node.py: refactor config-file getting and setting
10151warner@lothar.com**20070828015839]
10152[webish: implement 'PUT /uri?t=mkdir' (to create anonymous dirnodes)
10153warner@allmydata.com**20070906002306]
10154[fix test_web refactoring so that the WebMixin class isn't a TestCase
10155zooko@zooko.com**20070810154002
10156 Thanks, Brian.
10157 
10158]
10159[refactor test_web so that other tests can use the part of test_web that sets up a simple filesystem
10160zooko@zooko.com**20070809200842]
10161[vdrive: log an error if we weren't able to use the vdrive the way we wanted to
10162warner@lothar.com**20070915221729]
10163[upload: make peer-selection a bit more uniform. Closes #132.
10164warner@lothar.com**20070917000834]
10165[peer-selection: if we must loop, send a minimal number of queries (by asking for more than one share per peer on the second pass)
10166warner@lothar.com**20070916085300]
10167[upload.py: implement Tahoe2 peer-selection algorithm
10168warner@lothar.com**20070916082407]
10169[upload: switch to Tahoe2, add test for uniform share allocation
10170warner@lothar.com**20070916082503]
10171[provisioning.py: get full test coverage
10172warner@lothar.com**20070917083854]
10173[test_web: improve provisioning.py test coverage a bit by using a live web hit
10174warner@lothar.com**20070828002639]
10175[provisioning.py: add file/server availability numbers
10176warner@allmydata.com**20070906011621]
10177[add a provisioning utility page which shows necessary storage space and transfer rates for grids of various sizes
10178warner@lothar.com**20070827064424]
10179[welcome.xhtml: add a link to allmydata.org
10180warner@lothar.com**20070714001544]
10181[test_system.py: do a large-file test (1.5MB) to trigger pauseProducing
10182warner@lothar.com**20070919084344]
10183[test_system.py: verify that we can replace files in place
10184warner@allmydata.com**20070817000350]
10185[test_system.py: many (failing) web tests were accidentally bypassed, fix those. Add some PUT tests.
10186warner@allmydata.com**20070816234940]
10187[test_system.py: change/remove the tests that currently fail due to web changes
10188warner@lothar.com**20070708030644]
10189[test_system.py: match change to /global_vdrive URL
10190warner@lothar.com**20070615083855]
10191[introducer.py: add test coverage of _disconnected()
10192warner@allmydata.com**20070919185013]
10193[check_memory.py: record initial memory usage (before any connections are made)
10194warner@allmydata.com**20070920193627]
10195[check_memory.py: fix benign-but-noisy vdrive.furl handling bug
10196warner@allmydata.com**20070717023452]
10197[a few edits to architecture.txt and related docs
10198zooko@zooko.com**20070921211226]
10199[update architecture.txt a little bit
10200warner@lothar.com**20070723033005]
10201[in --> across
10202wilcoxjg@gmail.com**20070809041754]
10203[test_system.py: do one upload, then test debug scripts, then do other uploads
10204warner@allmydata.com**20070925011237]
10205[fix test_vdrive (fixes #144)
10206zooko@zooko.com**20070922222627
10207 
10208 It turns out that we actually have *two* files in our storage servers at the
10209 time that test_vdrive asserts things about the shares.  I suppose that
10210 test_vdrive happens to pass on all other operating systems because the
10211 filesystem happens to return the right share as the first one in a
10212 "listdir()".  The fix in this patch is slightly kludgey -- allow either share
10213 to pass -- but good enough.
10214 
10215]
10216[webish: write node.url, for the benefit of CLI tools
10217warner@lothar.com**20071011083804]
10218[create_node: use a webport by default, on localhost:8011
10219warner@lothar.com**20071011090123]
10220[rename client.tac to tahoe-client.tac, so that 'ps ax|grep tahoe' works. Closes #156.
10221warner@lothar.com**20071011094806]
10222[check_memory.py: preserve client.log and stats.out in _test_memory/
10223Brian Warner <warner@lothar.com>**20070916035306
10224 Put the nodes in _test_memory/test/, which is clobbered on each test. Also
10225 kill the client with SIGINT instead of SIGKILL. Also don't daemonize the
10226 client, since we're going to kill it at the end of the test anyways: this
10227 cleans up shutdown a bit.
10228]
10229[check_memory.py: have all clients write their logs to _test_memory/client.log instead of a separate file per client
10230warner@lothar.com**20070915193405]
10231[add public testnet .furls to docs/testnet/, and copy into .deb . Closes #157.
10232warner@allmydata.com**20071011215523]
10233[README: update link to test grid on web page
10234zooko@zooko.com**20070924223719]
10235[deb: add docs/* to the debian package
10236warner@allmydata.com**20071011213729]
10237[boringfile: exclude some foolscap.deb-generated files
10238warner@allmydata.com**20070711202842]
10239[update .darcs-boringfile to match the debian-moves-to-misc/ change
10240warner@allmydata.com**20070705215511]
10241[update feisty packaging
10242warner@allmydata.com**20070329214842]
10243[Makefile: stop producing foolscap .debs
10244warner@allmydata.com**20070821210101]
10245[Makefile: factor out deb-foolscap-ARCH to a separate target
10246warner@allmydata.com**20070711210047]
10247[make the anchor text in the WUI be descriptive of the target -- not "Click Here!"!
10248czooko@zooko.com**20071022235630]
10249[web: oops, forgot to add start.html
10250warner@allmydata.com**20070822220800]
10251[cli: improve test coverage
10252warner@lothar.com**20071021193317]
10253[cli: implement 'mv'. Closes #162.
10254warner@allmydata.com**20071012033148]
10255[move NotMutableError from dirnode.py into interfaces.py
10256warner@allmydata.com**20071101220307]
10257[trailing-whitespace eradication, no functional changes
10258warner@allmydata.com**20071101223401]
10259[docs/configuration.txt: expand the 'sizelimit' docs
10260warner@lothar.com**20071108080842]
10261[Add "sizelimit" to configuration doc.
10262nejucomo@gmail.com**20071105074642]
10263[docs/configuration.txt: explain the files in the node's basedir, which ones are useful to modify, etc
10264warner@allmydata.com**20070813202840]
10265[mutable: add basic test coverage of new-dirnodes-using-mutable-files
10266warner@lothar.com**20071108103100]
10267[test_system: RSA keys are even more variable than I thought, 2044..2049
10268warner@lothar.com**20071108110411]
10269[test_system: RSA keys vary in size, expand valid ranges in test
10270warner@lothar.com**20071108090113]
10271[consolidate dirnode/filenode-creation code into Client
10272warner@lothar.com**20071109085451]
10273[mutable: fix multiple-versions-interfering-with-each-other bug. replace() tests now pass.
10274warner@lothar.com**20071108100733]
10275[mutable: grab encprivkey when necessary during publish, fix test_mutable
10276warner@lothar.com**20071108084627]
10277[mutable: fix usage of NeedMoreDataError
10278warner@allmydata.com**20071107235209]
10279[mutable: rearrange order of Publish to allow replace() to work. Doesn't work yet. Also test_mutable is disabled for a while.
10280warner@allmydata.com**20071108030139]
10281[stabilize on 20-byte nodeids everywhere, printed with foolscap's base32
10282warner@allmydata.com**20071107004959]
10283[mutable.txt: more updates: record offset of extra lease count instead of the actual extra leases
10284warner@allmydata.com**20071031024658]
10285[mutable: fix use of storage API
10286warner@allmydata.com**20071107005334]
10287[mutable: wire in RSA for real, using pycryptopp
10288warner@allmydata.com**20071107235135]
10289[checker: remember checker results, but only in ram for now
10290warner@allmydata.com**20071023004624]
10291[checker.py: rearrange classes a little bit
10292warner@allmydata.com**20071022231918]
10293[add an equally-simple file-verifier
10294warner@allmydata.com**20071016192509]
10295[checker: return more information per CHK file, including the shareholder list
10296warner@lothar.com**20071017092550]
10297[mutable: stub out pubkey creation until we wire in pycryptopp properly
10298warner@allmydata.com**20071107012706]
10299[mutable: test roundtrip, make it work
10300warner@allmydata.com**20071107201901]
10301[storage: rewrite slot API, now use testv_and_readv_and_writev or readv
10302warner@allmydata.com**20071106021714]
10303[storage.py: fix tests, timestamps get updated when leases are renewed
10304warner@allmydata.com**20071031193133]
10305[storage.py: more test coverage, make sure leases survive resizing
10306warner@allmydata.com**20071031190747]
10307[storage.py: improve test coverage even more
10308warner@lothar.com**20071031084401]
10309[storage.py: more mutable-slot coverage, renewing/cancelling leases
10310warner@lothar.com**20071031083156]
10311[mutable slots: add some test coverage for lease-addition
10312warner@lothar.com**20071031073830]
10313[storage: add readv_slots: get data from all shares
10314warner@lothar.com**20071105063701]
10315[mutable slots: finish up basic coding on server-side containers, add some tests. Remove all caching from MutableShareFile.
10316warner@lothar.com**20071031071040]
10317[checkpointing mutable-file work. Storage layer is 80% in place.
10318warner@allmydata.com**20071031024736]
10319[dirnode: change the defined behavior of RIVirtualDriveServer.set to allow replace-in-place without raising an exception
10320warner@allmydata.com**20070817000319]
10321[storage: fill alreadygot= with all known shares for the given storageindex, not just the ones they asked about
10322warner@lothar.com**20070917074840]
10323[storage: don't add a duplicate lease, renew the old one instead
10324Brian Warner <warner@lothar.com>**20070903043947]
10325[storage: handle simultanous uploads: add a lease for the pre-empted client
10326warner@lothar.com**20070902215749]
10327[storage: replace sqlite with in-share lease records
10328warner@lothar.com**20070902214715]
10329[storage: use sqlite from either python2.5's stdlib or the pysqlite2 package
10330warner@lothar.com**20070829062852]
10331[deletion phase3: add a sqlite database to track renew/cancel-lease secrets, implement renew/cancel_lease (but nobody calls them yet). Also, move the shares from BASEDIR/storage/* down to BASEDIR/storage/shares/*
10332warner@lothar.com**20070828064140]
10333[update README concerning dependent libraries that the user has to install
10334"Zooko O'Whielacronx <zooko@zooko.com>"**20070516153433]
10335[client.py: add a 'debug_no_storage' option to throw out all share data
10336warner@allmydata.com**20070717010703]
10337[MANIFEST.in: include .html and .css files from allmydata/web/ too
10338warner@allmydata.com**20070822220841]
10339[mutable: move IV into signed prefix, add more retrieval code
10340warner@allmydata.com**20071106210446]
10341[mutable.txt: need offset of EOF too
10342warner@allmydata.com**20071103052807]
10343[mutable.txt: more notes
10344warner@allmydata.com**20071103035341]
10345[docs/mutable.txt: add IV, define a place for it in the data structure
10346Brian Warner <warner@allmydata.com>**20071030025112]
10347[mutable.txt: use merkle trees on blocks, since it probably won't be that hard (the code is all being copied from the CHK classes anyways), and that keeps the storage format identical to the MDMF case, for better forward-compatibility
10348warner@allmydata.com**20071026232501]
10349[docs/mutable.txt: we need readkey IV
10350Brian Warner <warner@allmydata.com>**20071030011451]
10351[mutable.txt: fix everybody-gets-read bug, define WE-update protocol, add accepting-nodeid to leases to allow updating lease tokens
10352warner@allmydata.com**20071026231550]
10353[mutable.txt: we're now sort of ready to handle lease-migration
10354warner@lothar.com**20071031070408]
10355[docs: add writeup of our mutable-file plans
10356warner@lothar.com**20071026092656]
10357[test_system.mutable: make sure we exercise FEC padding
10358warner@allmydata.com**20071107015033]
10359[add container_size to mutable dump-share output
10360warner@allmydata.com**20071107013122]
10361[dump-share: emit SDMF information too
10362warner@allmydata.com**20071107014631]
10363[test_system.mutable: add test coverage for the 'dump-share' debug command
10364warner@allmydata.com**20071107011049]
10365[debug: add mutable-slot support to 'dump-share' command
10366warner@allmydata.com**20071107005555]
10367[debug: remove the 'dump-share-leases' command, it is subsumed by 'dump-share'
10368warner@lothar.com**20070917084439]
10369[debug: 'dump-uri-extension' command becomes 'dump-share', add 'dump-share-leases'. Both display leases.
10370warner@lothar.com**20070902214820]
10371[test_system: add early test for mutable slots, currently publish-only
10372warner@allmydata.com**20071107005711]
10373[bump test timeout even higher
10374zooko@zooko.com**20070502223105
10375 It does indeed take longer than 2400 seconds to run test_upload_and_download on a virtual windows machine when the underlying real machine is heavily loaded down with filesystem analysis runs...
10376]
10377[WUI: hook up an "overwrite" button on mutable files
10378zooko@zooko.com**20071110165345]
10379[webish: add preliminary mutable file support: upload, download, listings, JSON, URI, RO-URI. No replace yet.
10380warner@lothar.com**20071109095427]
10381[webish: implement replace= for POST commands
10382warner@allmydata.com**20070815222138]
10383[webish: look for when_done= in POST fields as well as queryargs. Closes #101.
10384warner@allmydata.com**20070814004502
10385 
10386 We need to look in the fields because that's how we build the mkdir/upload
10387 forms. Without this, uploading or creating directories would leave us on a
10388 page that had just a URI, instead of something actually useful to a human.
10389]
10390[web: replace FILE links with /uri -based ones, to prevent an XSS attack against the secret vdrive URI contained in the current URL
10391warner@allmydata.com**20070823003501]
10392[webish: strip leading/tailing whitespace from user-provided filenames, to avoid confusion
10393warner@lothar.com**20070825190524]
10394[webish.py: allow users to delete (but not create) empty-named files. Closes #94.
10395Brian Warner <warner@allmydata.com>**20070816061405]
10396[webish: implement 'PUT /uri' (to create anonymous files)
10397warner@allmydata.com**20070906001227]
10398[webish: implement replace= for PUT commands
10399warner@allmydata.com**20070815202223]
10400[vdrive.py: oops, forgot an import
10401warner@lothar.com**20070915222157]
10402[improve code coverage by removing untested raise RuntimeError and replacing it with tested assert
10403zooko@zooko.com**20071027013740]
10404[webish.Directory: add a 'text/plain' link for files, to download as plaintext.
10405Brian Warner <warner@lothar.com>**20070714064535
10406 This is useful to view (e.g.) .py files that would otherwise be served as
10407 some weird text/x-python that browsers will just want to save to disk.
10408]
10409[mutable: rearrange classes, putting MutableFileNode at the bottom
10410warner@allmydata.com**20071106211948]
10411[mutable: get most of the retrieve-side code written. no tests yet.
10412warner@lothar.com**20071106094729]
10413[mutable.Publish: create a dispatch_map for the benefit of recovery code, and pull pack/unpack methods out into functions
10414warner@allmydata.com**20071106041459]
10415[mutable: parameterize Publish/Retrieve classes in MutableFileNode, for tests
10416warner@allmydata.com**20071106211809]
10417[mutable.Publish: rearrange create() to use more of it in unit tests
10418warner@lothar.com**20071106063340]
10419[mutable.Publish: more tests
10420warner@allmydata.com**20071106043843]
10421[test_mutable: hush pyflakes warning
10422warner@lothar.com**20071105064153]
10423[mutable: use proper enable/renew/cancel secrets
10424warner@allmydata.com**20071106035108]
10425[mutable: added send-messages-to-peers code, about 70% done. No recovery code yet.
10426warner@allmydata.com**20071106032947]
10427[mutable: add peer-selection to Publish, and some basic unit tests
10428warner@lothar.com**20071105063807]
10429[mutable.py: add share-unpacking code, use it for more tests
10430warner@allmydata.com**20071103052831]
10431[mutable.py: start writing share-mapping code
10432warner@allmydata.com**20071103055902]
10433[mutable: implement filenode share-packing, still pretty rough
10434warner@allmydata.com**20071103035139]
10435[mutable.py: sketch out data-structure packing/unpacking methods
10436warner@lothar.com**20071102070328]
10437[mutable: split dirnode stuff out to dirnode2.py, will be renamed later
10438warner@lothar.com**20071102064647]
10439[mutable: improve NewDirectoryNode test coverage
10440warner@allmydata.com**20071102013554]
10441[mutable: implement most remaining dirnode methods. No tests yet.
10442warner@allmydata.com**20071101235758]
10443[IMutableFileNode is a subtype of IFileNode
10444zooko@zooko.com**20071110223718
10445 I'm not 100% sure that this is correct, but it looks reasonable, it passes unit
10446 tests (although note that unit tests are currently not covering the new mutable
10447 files very well), and it makes the "view JSON" link on a directory work instead
10448 of raising an assertion error.
10449 
10450]
10451[mutable: first pass at dirnodes, filenodes, new URIs. Some test coverage.
10452warner@allmydata.com**20071101221529
10453 
10454 The URI typenames need revision, and only a few dirnode methods are
10455 implemented. Filenodes are non-functional, but URI/key-management is in
10456 place. There are a lot of classes with names like "NewDirectoryNode" that
10457 will need to be rename once we decide what (if any) backwards compatibility
10458 want to retain.
10459 
10460]
10461[test_uri.py: remove tiny whitespace
10462warner@lothar.com**20070829064003]
10463[created DirnodeURI schema
10464wilcoxjg@gmail.com**20070829062826]
10465[uri.py: improve test coverage a bit
10466warner@lothar.com**20070917080947]
10467[add a simple checker, for both files and directories
10468warner@allmydata.com**20071015231639]
10469[dirnode.build_manifest(): tolerate cycles in the directory graph
10470warner@lothar.com**20070721224013]
10471[uri.py: get keys and index from the URI instance
10472warner@lothar.com**20070722004500]
10473[fix pyflakes warnings from recent b32decode change
10474warner@lothar.com**20070812233351]
10475[client.py: only import webish.py if 'webport' is set, to save 3MB of footprint
10476Brian Warner <warner@allmydata.com>**20070904233306]
10477[cli: add test coverage
10478warner@allmydata.com**20071012022041]
10479[tahoe_put.py: don't treat "^HTTP 200 OK" appearing somewhere in the body as if it appeared in the header
10480zooko@zooko.com**20070817190641]
10481[test_system.py: add coverage for allmydata.control
10482warner@allmydata.com**20070926190655]
10483[don't over-encode the nodeid many times with ascii-encoding
10484zooko@zooko.com**20070812172938]
10485[don't check for existence of portnum file and then try to open it -- instead try to open it and catch exception
10486"Zooko O'Whielacronx <zooko@zooko.com>"**20070522210600
10487 This avoids a race condition, also known as time-of-check-to-time-of-use.
10488]
10489[remove unused imports: hush pyflakes warnings
10490warner@allmydata.com**20070725011358]
10491[web: remove /vdrive/private, replace with a start.html file that points at the /uri/PRIVATE_URI, to prevent XSRF attacks
10492warner@allmydata.com**20070822215434]
10493[test_web.test_welcome: give the rooturl a trailing slash, otherwise older versions of twisted complain
10494warner@lothar.com**20070708062252]
10495[vdrive: eventually create public/private dirnodes event if the vdrive server isn't available at start up
10496warner@allmydata.com**20070725024425]
10497[vdrive: make sure we really record global/private root directory uris
10498warner@allmydata.com**20070628175951]
10499[vdrive.py: log a note when we successfully retrieve the global root directory
10500warner@allmydata.com**20070717031706]
10501[refactor reading of configuration files in client.py
10502zooko@zooko.com**20070822172957
10503 This makes it so that an optional file which is unreadable or is rm'ed
10504 at the wrong moment will be ignored instead of raising an exception.   
10505 It also bums out a couple of unnecessary lines of code (the explicit 
10506 ".close()" call).
10507 
10508]
10509[client.py: write control.furl in the right place
10510warner@allmydata.com**20070717010627]
10511[webish: localfile=/localdir= are now disabled by default, a special switch is required to enable them
10512warner@lothar.com**20070811012122]
10513[test_web.py: remove spurious '# YES' lines, now that all the tests pass
10514warner@allmydata.com**20070725031621]
10515[webish.py: disallow slashes in POSTed filenames. Closes #75.
10516warner@allmydata.com**20070716185312]
10517[added unit test to webish's rename function
10518robk-org@allmydata.com**20070717000501
10519 
10520 added unit tests to test various permutations of the rename function, and
10521 some sanity checks on the rename-form function.
10522 
10523 also added a guard to prevent '/' in from_/to_name in rename calls.
10524]
10525[webish: improve test coverage of WebDownloadTarget
10526warner@lothar.com**20070717191645]
10527[webish: improve test coverage further
10528warner@lothar.com**20070717192829]
10529[webish: reduce POST memory footprint by overriding http.Request
10530warner@lothar.com**20070811002533
10531 
10532 The original twisted.web.http.Request class has a requestReceived method
10533 that parses the form body (in the request's .content filehandle) using
10534 the stdlib cgi.parse_multipart() function. parse_multipart() consumes a
10535 lot of memory when handling large file uploads, because it holds the
10536 arguments entirely in RAM. Nevow's subclass of Request uses cgi.FieldStorage
10537 instead, which is much more memory-efficient.
10538 
10539 This patch uses a local subclass of Request and a modified copy of the
10540 requestReceived method. It disables the cgi.parse_multipart parsing and
10541 instead relies upon Nevow's use of FieldStorage. Our code must look for
10542 form elements (which come from the body of the POST request) in req.fields,
10543 rather than assuming that they will be copied into req.args (which now
10544 only contains the query arguments that appear in the URL).
10545 
10546 As a result, memory usage is no longer inflated by the size of the file
10547 being uploaded in a POST upload request. Note that cgi.FieldStorage uses
10548 temporary files (tempfile.TemporaryFile) to hold the data.
10549 
10550 This closes #29.
10551 
10552]
10553[client.py: add a newline to "myself.furl" contents
10554Brian Warner <warner@lothar.com>**20070818062822]
10555[check_speed: do both upload and download tests
10556warner@allmydata.com**20070921015244]
10557[check_speed: upload multiple files, measure Ax+B
10558warner@allmydata.com**20070920235533]
10559[check_memory: fix race condition for startup of in-process server nodes
10560warner@allmydata.com**20070920223358]
10561[deletion phase2b: create renew/cancel secrets for real.
10562warner@lothar.com**20070828023026]
10563[deletion phase2a: improve creation of renew/cancel secrets. Still fake though.
10564warner@lothar.com**20070828020018]
10565[deletion phase1: send renew/cancel-lease secrets, but my_secret is fake, and the StorageServer discards them
10566warner@lothar.com**20070828002851]
10567[check-memory: add 'receive' mode, for #97 (consumption during share receive
10568warner@allmydata.com**20070919195932]
10569[check_memory: oops, silly bug make 'upload' push to ourselves, raising the usage
10570Brian Warner <warner@allmydata.com>**20070919111448]
10571[check_memory: don't accept shares for download/download-GET test, since that hits bug #97
10572warner@allmydata.com**20070919024029]
10573[Makefile: check-memory-once: add a convenience target for focussed testing
10574warner@allmydata.com**20070919192916]
10575[check_memory: add download-GET-slow, to simulate memory usage of a node feeding downloaded data via HTTP GET to a slow client
10576warner@allmydata.com**20070919033527]
10577[check_memory: add download, download-GET
10578warner@allmydata.com**20070919015605]
10579[#96: add flag to enable pushing data to ourselves, defaulting to False
10580warner@allmydata.com**20070810013024]
10581[node: enable Tub.logLocalFailures now that we require foolscap-0.1.2
10582warner@lothar.com**20070407035559]
10583[activate storage size limits in the client. Closes #34.
10584warner@allmydata.com**20070704002707
10585 
10586 To use this, write a number like 10MB or 5Gb or 5000000000 to a file
10587 named 'sizelimit' in the client's base directory. The node will not grant
10588 leases for shares that would take it much beyond this many bytes of
10589 storage. Note that metadata is not included in the allocation count until
10590 a restart, so the actual space consumed may grow beyond the limit if
10591 the node is not restarted very frequently and the amount of metadata is
10592 significant.
10593 
10594]
10595[introducer.py: minor rearrangement of methods
10596warner@allmydata.com**20070717024742]
10597[refactor upload/encode, to split encrypt and encode responsibilities
10598warner@allmydata.com**20070724023153]
10599[document a proposed IDecoder interface, still pretty bare-bones
10600warner@allmydata.com**20070328183131]
10601[truncate storage index to 128 bits, since it's derived from a 128 bit AES key
10602warner@lothar.com**20070723024844]
10603[CHK: remove the storage index from the URI, deriving it from the key instead
10604warner@lothar.com**20070722012315]
10605[uri: implement URI-processing classes, IFileURI/IDirnodeURI, use internally
10606warner@lothar.com**20070721224036]
10607[webish: provide a valid Content-Length header on downloads
10608warner@allmydata.com**20070703220900]
10609[webish: improve reporting of web download errors that occur early enough
10610warner@allmydata.com**20070703204737
10611 
10612 If the error occurs before any data has been sent, we can give a sensible
10613 error message (code 500, stack trace, etc). This will cover most of the error
10614 cases. The ones that aren't covered are when we run out of good peers after
10615 successfully decoding the first segment, either because they go away or
10616 because their shares are corrupt.
10617 
10618]
10619[webish.py: handle errors during download better. Addresses #65.
10620warner@allmydata.com**20070703201814
10621 
10622 Previously, exceptions during a web download caused a hang rather than some
10623 kind of exception or error message. This patch improves the situation by
10624 terminating the HTTP download rather than letting it hang forever. The
10625 behavior still isn't ideal, however, because the error can occur too late to
10626 abort the HTTP request cleanly (i.e. with an error code). In fact, the
10627 Content-Type header and response code have already been set by the time any
10628 download errors have been detected, so the browser is committed to displaying
10629 an image or whatever (thus any error message we put into the stream is
10630 unlikely to be displayed in a meaningful way).
10631 
10632]
10633[web: improve test coverage
10634warner@lothar.com**20070708054718]
10635[web: add a 'return to welcome page' link
10636warner@lothar.com**20070708043004]
10637[web: make sure we present read-only directories properly
10638warner@lothar.com**20070708052120]
10639[import simplejson directly, and remove our local copies of the component .py files from util/json*
10640warner@lothar.com**20070710224932]
10641[web: indent the JSON to make it easier for humans to read, but slightly larger
10642warner@lothar.com**20070708072323]
10643[import the decoder portion of simplejson-1.7.1 too
10644warner@lothar.com**20070710201240]
10645[fix several methods to handle LIT URIs correctly, rather than assuming that all filenodes are CHK URIs
10646warner@allmydata.com**20070712231749]
10647[test_system.py: more vdrive coverage
10648warner@allmydata.com**20070628220533]
10649[vdrive: add get_node_at_path(pathlist)
10650warner@allmydata.com**20070628180003]
10651[web: survive bogus URIs when displaying sizes
10652warner@lothar.com**20070708043118]
10653[webish.py: remove dead code
10654warner@lothar.com**20070708051246]
10655[storage: we must truncate short segments. Now most tests pass (except uri_extension)
10656warner@lothar.com**20070713233825]
10657[rename storageserver.py to just storage.py, since it has both server and client sides now
10658warner@lothar.com**20070714002545]
10659[make it possible to download LIT uris. oops.
10660warner@allmydata.com**20070712231659]
10661[fix dump-uri-extension
10662warner@lothar.com**20070713235808]
10663[upload: finish refactoring, all unit tests pass now
10664warner@lothar.com**20070720055329]
10665[upload: refactor to enable streaming upload. not all tests pass yet
10666warner@allmydata.com**20070720012144]
10667[rename chunk.py to hashtree.py
10668warner@allmydata.com**20070412201325]
10669[comment out some verbose log messages, add commented-out new ones
10670warner@allmydata.com**20070418032552]
10671[handle foolscap's annoying tendency to turn everything into a sets.Set, which are not interoperable with 2.4's builtin 'set' type
10672warner@allmydata.com**20070330235504]
10673[encode: fix multi-segment uploads: lambdas inside for loops require special attention to make sure you are capturing the *value* of the loop variable and not just the slot it lives in
10674warner@allmydata.com**20070418032908]
10675[encode.py: fix generation of plaintext/crypttext merkle trees
10676warner@lothar.com**20070607201414]
10677[refactor URI_extension handlers out of encode/download and into uri.py
10678warner@allmydata.com**20070612012518]
10679[handle uri_extension with a non-bencode serialization scheme
10680warner@lothar.com**20070608231754]
10681[upload.py: minor refactoring
10682warner@allmydata.com**20070612022151]
10683[allow the introducer to set default encoding parameters. Closes #84.
10684warner@allmydata.com**20070712223330
10685 By writing something like "25 75 100" into a file named 'encoding_parameters'
10686 in the central Introducer's base directory, all clients which use that
10687 introducer will be advised to use 25-out-of-100 encoding for files (i.e.
10688 100 shares will be produced, 25 are required to reconstruct, and the upload
10689 process will be happy if it can find homes for at least 75 shares). The
10690 default values are "3 7 10". For small meshes, the defaults are probably
10691 good, but for larger ones it may be appropriate to increase the number of
10692 shares.
10693]
10694[test_introducer_and_vdrive: remove the assumption that startService returns a Deferred
10695warner@allmydata.com**20070524003720]
10696[more #85 work, system test still fails
10697warner@lothar.com**20070713220901]
10698[implement URI:LIT, which stores small (<55B) files inside the URI itself. Fixes #81.
10699warner@allmydata.com**20070712202236]
10700[bump some unit tests up to very high timeouts because my poor G4 867 MHz PowerBook, which is busy doing video iChat, takes a long time to run these tests
10701"Zooko O'Whielacronx <zooko@zooko.com>"**20070501040343]
10702[test_system: increase timeouts to almost 20 minutes: we have buildslaves that take more than 5 minutes to finish these tests.
10703warner@allmydata.com**20070501031458]
10704[test_system: bump up timeout again, the new extra download forms take more time on poor overloaded slave1
10705warner@allmydata.com**20070416225325]
10706[consolidate multiple definitions of NotEnoughPeersError
10707warner@allmydata.com**20070608052055]
10708[storage: use one file per share instead of 7 (#85). work-in-progress, tests still fail
10709warner@allmydata.com**20070713210449]
10710[rename fileid/verifierid to plaintext_hash/crypttext_hash
10711warner@lothar.com**20070610034604]
10712[docs/thingA.txt: describe what this does, even if it doesn't yet have a name
10713warner@allmydata.com**20070608045058]
10714[storageserver: include metadata in the sizelimit, at least after the bucket has been closed
10715warner@allmydata.com**20070704003849]
10716[storageserver: implement size limits. No code to enable them yet, though
10717warner@allmydata.com**20070704000802]
10718[test_storage: test StorageServer code too: allocation, lookup, multiple-writer behavior
10719warner@allmydata.com**20070418224234]
10720[storageserver: assert that blocks are written in-order, clean up tests a bit
10721warner@allmydata.com**20070418032105]
10722[storageserver: the last segment is not always going to be the same size as the rest, so don't assert such a thing
10723warner@allmydata.com**20070417204145]
10724[test_storage: add (failing) test of the BucketWriter/BucketReader implementation
10725warner@allmydata.com**20070418030344]
10726[don't clobber existing storefile every put block
10727"Zooko O'Whielacronx <zooko@zooko.com>"**20070418031444]
10728[pyutil: fileutil.open_or_create()
10729"Zooko O'Whielacronx <zooko@zooko.com>"**20070418031426]
10730[import fileutil, some of which came from amdlib.util and some of which came from the pyutil library
10731zooko@zooko.com**20070330191223]
10732[storage: wrap buckets in a local proxy
10733warner@lothar.com**20070709062746
10734 This will make it easier to change RIBucketWriter in the future to reduce the wire
10735 protocol to just open/write(offset,data)/close, and do all the structuring on the
10736 client end. The ultimate goal is to store each bucket in a single file, to reduce
10737 the considerable filesystem-quantization/inode overhead on the storage servers.
10738]
10739[remove several leftover defintions of netstring()
10740warner@allmydata.com**20070608051318]
10741[rename thingA to 'uri extension'
10742warner@lothar.com**20070608225916]
10743[docs/uri.txt: document current URI formats
10744warner@lothar.com**20070722002901]
10745[switch from rfc 3548 base-32 to z-base-32 except for tubids/nodeids
10746zooko@zooko.com**20070724204606]
10747[record our nodeid (for reference) in 'my_nodeid'
10748warner@allmydata.com**20061205224048]
10749[more allmydata.util test coverage, rename the test case to be more correct
10750warner@allmydata.com**20070406233322]
10751[add test coverage for stuff in allmydata/utils
10752warner@allmydata.com**20070406232925]
10753[check_memory.py: Disable the 100MB test for now: our buildslave can't currently handle it because the testnet/framework processes uses something like 600M of RSS.
10754warner@allmydata.com**20070815195511]
10755[check_memory.py: include a single 100MB test
10756warner@lothar.com**20070809183033]
10757[now that the buildslave is moved to a new machine, enable the 50MB test
10758Brian Warner <warner@allmydata.com>**20070809083252]
10759[check_memory: oops, only bail if the process ended abnormally
10760warner@lothar.com**20070915184729]
10761[check-memory: if the child process fails to start, shut down instead of hanging forever
10762warner@lothar.com**20070915031657]
10763[check_speed.py: run two 1MB uploads and measure the time it takes
10764warner@allmydata.com**20070920014018]
10765[control.py: make get_memory_usage() callable from elsewhere
10766warner@lothar.com**20070709020754]
10767[started framework for an automated speed-checking tool. Doesn't do much yet.
10768warner@allmydata.com**20070920012747]
10769[Makefile: check_memory.py now manages the combined stats.out itself
10770warner@lothar.com**20070915205336]
10771[Makefile: insert a linebreak after use of PP, since it is long and obscures the real command
10772warner@lothar.com**20070915193211]
10773[Makefile: add 'upload-self' pass to check-memory
10774Brian Warner <warner@allmydata.com>**20070810084134]
10775[Makefile/check-memory: put all stats in ./memstats.out
10776warner@lothar.com**20070717174141]
10777[check_memory.py: test POST-based uploads as well as from-disk ones
10778warner@allmydata.com**20070717031751]
10779[makefile: add a test-darcs-boringfile target
10780warner@allmydata.com**20070524005128]
10781[check_memory: update it, write stats to a file, disable 50MB test for now
10782warner@allmydata.com**20070717010855]
10783[check_memory: getting closer, now we have memusage numbers for uploads of 10kB and 10MB files
10784warner@lothar.com**20070530003939]
10785[testutil.py: hush a pyflakes warning
10786warner@lothar.com**20070424042150]
10787[re-port Makefile to Windows and remove a bunch of no-longer-needed hacks
10788zooko@zooko.com**20070914012035]
10789[use select reactor instead of iocp reactor on Windows
10790zooko@allmydata.com**20070420030757
10791 Good: this makes it pass all the current unit tests
10792 Bad: this makes it limited to around 100 simultaneous peers
10793]
10794[--rterrors is a nice flag for trial
10795zooko@zooko.com**20070427011152]
10796[GNUmakefile: detect trial's location better on Windows
10797zooko@zooko.com**20070427004901]
10798[Makefile: add build_ext target, for convenience
10799warner@lothar.com**20070816004710]
10800[another dummy record to trigger the buildbot
10801warner@allmydata.com**20070426012223]
10802[dummy record to trigger the buildbot
10803warner@allmydata.com**20070426011348]
10804[fix Makefile not to assume that ":" is the PYTHONPATH separator
10805zooko@zooko.com**20070913223734
10806 (It is ";" on Windows.)
10807 
10808]
10809[Makefile: re-order targets and let user's PYTHONPATH be included in the PP
10810zooko@zooko.com**20070913015633]
10811[import version class and make-version script from pyutil -- fixes win32 build, improves error handling, and eliminates unused features
10812zooko@zooko.com**20070816210930]
10813[manually merge recent changes to pyutil's copy of "version.py" with allmydata's copy of "version.py"
10814"Zooko O'Whielacronx <zooko@zooko.com>"**20070509230405]
10815[version.py: handle both '0.2.0' and '0.2.0-1', remove 'tags' for now
10816warner@lothar.com**20070504033127]
10817[make-version.py: remove the strip-until-<changelog> workaround
10818warner@allmydata.com**20070516190258]
10819[make-version.py: accomodate windows by ignoring the junk that appears at the start of 'darcs changes'
10820warner@allmydata.com**20070516001042]
10821[test_client.py: improve test coverage a bit
10822warner@allmydata.com**20070608050902]
10823[catch EnvironmentError from attempt to invoke darcs using subprocess module
10824zooko@zooko.com**20070611185957]
10825[make-version.py invokes darcs as "darcs" instead of "realdarcs"
10826zooko@zooko.com**20070629212250
10827 Some other people might use the official Windows build of darcs, and people who use my cygwin wrapper for darcs will be compatible with this patch as long as they use the latest version of the wrapper.
10828 
10829]
10830[make-version.py: it is sys.platform, not os.platform
10831warner@allmydata.com**20070613010610]
10832[make make-version.py exec darcs correctly on windows
10833robk-org@allmydata.com**20070613005655]
10834[make-version.py: use 'subprocess' module instead of 'commands', to improve windows compatibility
10835warner@allmydata.com**20070516185720]
10836[packaging: add 'build-deps' target, to automatically build and install (locally, in ./support) necessary dependencies. All such installed files are used during tests.
10837warner@lothar.com**20070912234845]
10838[packaging: move to setuptools
10839warner@lothar.com**20070912230253]
10840[transfer any PYTHONPATH environment variable to the environment of the foolscap tests
10841zooko@zooko.com**20070501061947]
10842[add note to GNUmakefile that we append instdir instead of prepending for a good reason
10843"Zooko O'Whielacronx <zooko@zooko.com>"**20070501021751]
10844[fix: don't pass the PYTHONPATH that features the instdir to the invocation of trial for foolscap
10845zooko@allmydata.com**20070501043728
10846 
10847]
10848[add warning that "make test" can take a long time
10849"Zooko O'Whielacronx <zooko@zooko.com>"**20070502055240]
10850[fix one last use of "--root" in building which was corrupting the pathnames in .pyc files
10851"Zooko O'Whielacronx <zooko@zooko.com>"**20070523220149]
10852[makefile: use --single-version-externally-managed for simplejson
10853warner@lothar.com**20070711023710]
10854[makefile: refactor .deb-producing rules
10855warner@allmydata.com**20070711194500]
10856[fix debian targets in makefile
10857"Zooko O'Whielacronx <zooko@zooko.com>"**20070501194646]
10858[move debian files down into misc/
10859warner@allmydata.com**20070705214909]
10860[README: edit to arch_o_median's contribution re: installing the Python way
10861zooko@zooko.com**20070809033245]
10862[README: clarify/edit build, install, and test instructions
10863zooko@zooko.com**20070809034458]
10864[changed README install "Python Way" section
10865wilcoxjg@gmail.com**20070809030035]
10866[update README to reflect existence of "make install" target
10867zooko@zooko.com**20070807191324]
10868[Makefile: improve 'clean' behavior by removing foolscap .pycs and _version.py
10869Brian Warner <warner@lothar.com>**20070818063800]
10870[Makefile: use a different rm *.so command for the 'clean' target
10871warner@allmydata.com**20070815222812]
10872[Makefile: more portable way to make clean succeed when there's nothing to rm
10873zooko@zooko.com**20070815211851
10874 xargs doesn't have a "-r" option on Mac OS X.
10875 
10876]
10877[Makefile: fix 'clean' target to work even if there's nothing to clean
10878warner@allmydata.com**20070814212448]
10879[Makefile: oops, fix clean-simplejson target. Might fix #10.
10880Brian Warner <warner@lothar.com>**20070818065037]
10881[Makefile: improve 'clean' behavior even more, maybe even completely.
10882Brian Warner <warner@lothar.com>**20070818064514
10883 Now we remove downloaded setuptools-*.egg files, and *.egg-info directories
10884]
10885[remove PyCrypto, copy AES/SHA256/Util.number into the allmydata/ tree
10886warner@allmydata.com**20070814205741]
10887[allmydata.Crypto: fix all internal imports
10888warner@lothar.com**20061214092956]
10889[rename Crypto to allmydata.Crypto
10890"Zooko O'Whielacronx <zooko@zooko.com>"**20070130223305
10891 This kind of makes me think that there is a general principle that things
10892 shouldn't know their own names.  After all, a name is what *other* people use
10893 to refer to you.  And in the general case, some other people might refer to you
10894 in ways incompatible with the ways that other people refer to you.
10895 
10896]
10897[.darcs-boringfile: ignore zfec files instead of pyfec files
10898warner@allmydata.com**20070418175355]
10899[modify debian/rules files to handle zfec+setuptools correctly
10900warner@allmydata.com**20070426234517]
10901[README: mention the additional included libraries (zfec, foolscap, pycrypto)
10902warner@allmydata.com**20070516011302]
10903[makefile: build simplejson along with zfec/foolscap/etc
10904warner@lothar.com**20070710222838]
10905[add deb-etch target, rearrange make-version a bit, closes #23
10906warner@lothar.com**20070504070706]
10907[update version-number handling, pull release tags from darcs history
10908warner@lothar.com**20070504031407]
10909[changed MakeFile to install simplejson
10910wilcoxjg@gmail.com**20070809034126]
10911[add install target, works at lest on sudo-free cygwin
10912tahoe@arnowaschk.de**20070731235545]
10913[cleanup new "instdir" on "make clean"
10914"Zooko O'Whielacronx <zooko@zooko.com>"**20070130223252]
10915[Makefile: improve 'clean' target to remove debian/ symlink too
10916warner@lothar.com**20061214100809]
10917[README: formatting (line-wrapping) of arch_o_median's edits to README
10918zooko@zooko.com**20070809034742]
10919[edited README "The Python Way" installs to /usr/bin
10920wilcoxjg@gmail.com**20070809033209]
10921[changed README to inslude simplejson in "The Python Way" install
10922wilcoxjg@gmail.com**20070809034340]
10923[some edits to the README
10924zooko@zooko.com**20070611164054]
10925[re-re-factored the download and install instructions
10926"Zooko O'Whielacronx <zooko@zooko.com>"**20070502195426
10927 Now the instructions about how to download debian packages live on a separate
10928 page of the wiki instead of on the front page or in the README.  The README is
10929 only about building from source.  The front page contains pointers to those two
10930 other pages (the debiandownloadpage and the README).
10931 
10932]
10933[two more fixes for README
10934"Zooko O'Whielacronx <zooko@zooko.com>"**20070502054024]
10935[add another note about where to run "make"
10936"Zooko O'Whielacronx <zooko@zooko.com>"**20070502053735]
10937[fix README on how to install The Debian Way
10938"Zooko O'Whielacronx <zooko@zooko.com>"**20070502063839]
10939[clarify instructions on how to get build dependencies for debian
10940"Zooko O'Whielacronx <zooko@zooko.com>"**20070502061606
10941 My test subject here didn't used "locate" to find something named
10942 "debian/control" somewhere on his filesystem...  :-)
10943 
10944]
10945[move the debian packaging dependencies to the place where they are needed in the README
10946"Zooko O'Whielacronx <zooko@zooko.com>"**20070502061105]
10947[tweak README to be more helpful about a small detail
10948"Zooko O'Whielacronx <zooko@zooko.com>"**20070502051149]
10949[fix the TESTING THAT IT IS PROPERLY INSTALLED section
10950"Zooko O'Whielacronx <zooko@zooko.com>"**20070502064201
10951 My oh-so-useful test subject here skipped that section because he thought it was part of a section that he was finished with.
10952 
10953]
10954[boringfile: ignore the setuptools .egg that ez_setup.py likes to download/build/install during compilation
10955warner@allmydata.com**20070810024518]
10956[.darcs-boringfile: ignore the buildbot's source-stampfile
10957warner@allmydata.com**20070524011242]
10958[Makefile: don't attempt to run trial tests if the dependencies can't be imported
10959zooko@zooko.com**20070914021255]
10960[don't use --root, instead use --single-version-externally-managed
10961"Zooko O'Whielacronx <zooko@zooko.com>"**20070521174714
10962 fixes #35
10963]
10964[makefile: delete .pycs before running tests, since our build process puts the wrong filenames into them
10965warner@lothar.com**20070504041215]
10966[makefile: change the 'test' target to exclude foolscap, add 'test-all' to do both
10967warner@allmydata.com**20070501180839]
10968[Makefile: add an upload-figleaf target, rather than having the buildbot create the rsync command itself
10969warner@lothar.com**20070308212813]
10970[make separate makefile targets for test-foolscap and test-TEST
10971zooko@allmydata.com**20070501060245
10972 So that if you want to run just one test, you can run "make test-TEST TEST=that.one.test" and not get the whole foolscap suite thrown in for the bargain.
10973 
10974]
10975[run foolscap tests from src instead of from instdir since .pyc's in instdir have funny filenames encoded into them that cause foolscap test failures
10976"Zooko O'Whielacronx <zooko@zooko.com>"**20070501021806]
10977[turn foolscap unit tests back on in the "make test" target
10978"Zooko O'Whielacronx <zooko@zooko.com>"**20070430180413]
10979[don't run foolscap unit tests
10980"Zooko O'Whielacronx <zooko@zooko.com>"**20070430032528]
10981[cli: add --node-directory and --root-uri to all commands
10982warner@lothar.com**20071011073036]
10983[command-line: remove the --vdrive option (it is now hardcoded to "global")
10984zooko@zooko.com**20070823202700]
10985[command-line: fix a few bugs in the "execute this python file" way to execute rm
10986zooko@zooko.com**20070817211731]
10987[command-line: add "rm", and tidy-up variable names, and make it so "allmydata-tahoe spam" prints a usage message instead of returning silently
10988zooko@zooko.com**20070817202316]
10989[relnotes.txt: edit and update relnotes and clarify licence
10990zooko@zooko.com**20070817192509]
10991[small edit of relnotes
10992zooko@zooko.com**20070723012337]
10993[in relnotes.txt, make the safety warnings slightly less scary
10994zooko@zooko.com**20070807212323
10995 
10996 and update the reference to the wiki's UseCases page
10997 
10998]
10999[clarify licence
11000zooko@zooko.com**20070809034442]
11001[make big distinction between downloading precompiled packages and building yourself
11002"Zooko O'Whielacronx <zooko@zooko.com>"**20070502053433
11003 Both of my two test subjects here stumbled on this by thinking that building on debian was related to building debian packages was related to downloading precompiled packages.
11004 
11005]
11006[update README to reflect dependency on python-dev
11007"Zooko O'Whielacronx <zooko@zooko.com>"**20070430063349]
11008[README: mention the names of the debian packages that provide our dependencies
11009warner@allmydata.com**20070430194830]
11010[add the apt-get information to the README
11011"Zooko O'Whielacronx <zooko@zooko.com>"**20070502050458]
11012[clarify licence
11013zooko@zooko.com**20070629222815]
11014[update licence to allow linking with OpenSSL
11015zooko@zooko.com**20070430045605]
11016[relnotes.txt: a few more updates to relnotes.txt
11017zooko@zooko.com**20070816235222]
11018[relnotes.txt: incomplete update to describe v0.5
11019zooko@zooko.com**20070816230302
11020 more to come...
11021]
11022[update relnotes.txt to reflect NJS's comments
11023zooko@zooko.com**20070723012129]
11024[relnotes.txt: reflow to 70-char width
11025zooko@zooko.com**20070705015926]
11026[fix small typo in relnotes.txt
11027"Zooko O'Whielacronx <zooko@zooko.com>"**20070502205211]
11028[relnotes.txt update for v0.4 release
11029zooko@zooko.com**20070629235805]
11030[fix the relnotes.txt -- don't incorrectly attribute a compatibility break to foolscap
11031zooko@zooko.com**20070611172014]
11032[relnotes.txt reflow column width and editing
11033zooko@zooko.com**20070629235827]
11034[relnotes.txt: mention the private filesystem
11035warner@allmydata.com**20070630000149]
11036[relnotes.txt: formatting for thinner columns
11037zooko@zooko.com**20070629235538]
11038[trivial formatting tweak in relnotes.txt
11039"Zooko O'Whielacronx <zooko@zooko.com>"**20070502040505]
11040[update the relnotes.txt for v0.3
11041zooko@zooko.com**20070611162142]
11042[edit: fix typo and formatting in relnotes.txt
11043"Zooko O'Whielacronx <zooko@zooko.com>"**20070430155700]
11044[edit description of Foolscap in relnotes.txt
11045"Zooko O'Whielacronx <zooko@zooko.com>"**20070501004306]
11046[better description of Foolscap in README
11047zooko@zooko.com**20070501003451]
11048[edits to relnotes.txt
11049"Zooko O'Whielacronx <zooko@zooko.com>"**20070501152647]
11050[relnotes.txt: editing for English usage
11051"Zooko O'Whielacronx <zooko@zooko.com>"**20070419210915]
11052[edit relnotes.txt
11053"Zooko O'Whielacronx <zooko@zooko.com>"**20070427233752]
11054[relnotes.txt: all platforms pass unit tests. Whee!
11055"Zooko O'Whielacronx <zooko@zooko.com>"**20070420035301]
11056[relnotes.txt: a bit of editing
11057"Zooko O'Whielacronx <zooko@zooko.com>"**20070420035319]
11058[small edit to target market
11059"Zooko O'Whielacronx <zooko@zooko.com>"**20070502200614]
11060[edit release notes to give proper user expectations
11061"Zooko O'Whielacronx <zooko@zooko.com>"**20070430042455]
11062[tahoe v0.2.0-0-UNSTABLE
11063"Zooko O'Whielacronx <zooko@zooko.com>"**20070502232323]
11064[v0.2.0b2-0-UNSTABLE
11065"Zooko O'Whielacronx <zooko@zooko.com>"**20070501224619]
11066[grand unified version numbers
11067"Zooko O'Whielacronx <zooko@zooko.com>"**20070501202315
11068 Now the allmydata python package, the setup.py script, and the debian packages all get their tahoe version number from the same place.
11069]
11070[v0.2.0b1-0-UNSTABLE
11071"Zooko O'Whielacronx <zooko@zooko.com>"**20070501061123]
11072[v0.1.4b2-0-UNSTABLE
11073"Zooko O'Whielacronx <zooko@zooko.com>"**20070430170007]
11074[v0.1.3-0-UNSTABLE
11075"Zooko O'Whielacronx <zooko@zooko.com>"**20070430130243]
11076[v0.1.2-0-UNSTABLE
11077"Zooko O'Whielacronx <zooko@zooko.com>"**20070430060008]
11078[allmydata-tahoe v0.1.1-1-UNSTABLE
11079"Zooko O'Whielacronx <zooko@zooko.com>"**20070427230722]
11080[tahoe v0.1.1-0-UNSTABLE
11081"Zooko O'Whielacronx <zooko@zooko.com>"**20070426182515]
11082[assign version number tahoe 0.1.0-0-UNSTABLE
11083"Zooko O'Whielacronx <zooko@zooko.com>"**20070419204759]
11084[copy version.py from pyutil
11085"Zooko O'Whielacronx <zooko@zooko.com>"**20070419204736]
11086[make relnotes.txt point to the latest source tarball
11087"Zooko O'Whielacronx <zooko@zooko.com>"**20070430175635]
11088[update URL pointing to source code tarball
11089"Zooko O'Whielacronx <zooko@zooko.com>"**20070430060539]
11090[update URLs in relnotes.txt
11091"Zooko O'Whielacronx <zooko@zooko.com>"**20070427231244]
11092[command-line: remove some redundant options checking
11093zooko@zooko.com**20070817200643]
11094[command-line: fix all three commands and all two ways to invoke them to require node-url and give a useful usage string if node-url is absent or of the wrong form
11095zooko@zooko.com**20070817195447]
11096[tahoe_ls: remove a couple of vestigial or debugging bits
11097zooko@zooko.com**20070711024640]
11098[scripts: rearrange Options, make --version behave the same for all commands
11099warner@allmydata.com**20070816195019]
11100[put now exits after doing its work, and it prints a terse message if 200 or 201, and a full dump of response elsewise
11101zooko@zooko.com**20070816233039]
11102[incomplete version of tahoe-put.py
11103zooko@zooko.com**20070816230101
11104 It doesn't exit properly afterward, and it might not do the best things with non-success responses from the server.
11105 (See tahoe-put-web2ish.py for an example of better response handling.)
11106 
11107]
11108[tahoe_put.py: require node-url to be provided
11109zooko@zooko.com**20070817190611]
11110[cli: use port 8123 as the example port number
11111zooko@zooko.com**20070924201727]
11112[cmdline: change "--server" to "--node-url" and make it have no default value
11113zooko@zooko.com**20070816235327]
11114[a first crack at the "put" command-line
11115zooko@zooko.com**20070816191538
11116 There are actually two versions in this patch, one of which requires twisted.web2 and the other of which uses the Python standard library's socket module.  The socketish one doesn't know when the web server is done so it hangs after doing its thing.  (Oh -- maybe I should add an HTTP header asking the web server to close the connection when finished.)  The web2ish one works better in that respect.  Neither of them handle error responses from the server very well yet.
11117 
11118 After lunch I intend to finish the socketish one.
11119 
11120 To try one, mv src/allmydata/scripts/tahoe_put-{socketish,web2ish}.py src/allmydata/scripts/tahoe_put.py .
11121 
11122 If you want to try the web2ish one, and you can't find a web2 package to install, you can get one from:
11123 
11124 http://allmydata.org/~zooko/repos/twistedweb2snarf/
11125 
11126]
11127[cli: implement 'get'
11128warner@allmydata.com**20070711172619]
11129[tahoe-get.py: add optional target-local-file argument
11130zooko@zooko.com**20070710012711]
11131[tahoe-get.py: fix bug: actually respect the optional server argument
11132zooko@zooko.com**20070710014716]
11133[tahoe-get.py: accept vdrive and server options (using optparse)
11134zooko@zooko.com**20070710012002]
11135[tahoe-get.py: the first, most primitive command-line client
11136zooko@zooko.com**20070710011953]
11137[cli: implement 'allmydata-tahoe ls'
11138warner@lothar.com**20070711023737]
11139[tahoe-ls.py: hush a pyflakes warning
11140warner@lothar.com**20070710232605]
11141[tahoe-ls.py: initial version of an 'ls' CLI utility
11142warner@lothar.com**20070710223455]
11143[runner.py: further refactoring
11144warner@lothar.com**20070711020518]
11145[fix 'allmydata restart'
11146warner@lothar.com**20061205183758]
11147[runner.py: add --force flag to restart, to restart a not-already-running node
11148warner@lothar.com**20070707181732]
11149[runner.py: start to refactor into separate files
11150warner@lothar.com**20070711014152]
11151[runner.py: make 'allmydata-tahoe --version' emit version numbers of everything
11152warner@allmydata.com**20070716215836]
11153[runner.py: improve test coverage further: implement --quiet with StringIOs
11154warner@lothar.com**20070626231918]
11155[node creation: be willing to utilize a pre-existing (but empty) directory
11156warner@allmydata.com**20070329213228]
11157[runner.py: add --quiet, use it from test cases
11158warner@lothar.com**20070424041713]
11159[webish: add checker results and a 'Check' button to the web interface
11160warner@allmydata.com**20071024002357]
11161[include the filename on URI-link urls for files
11162robk-org@allmydata.com**20070711222647
11163 
11164 this is likely to induce browsers to do more useful things with the result
11165 than they would when given neither content-type nor filename.  (i.e. they
11166 can guess that a .jpg file is an image, even with a bogus content type)
11167]
11168[docs: webapi: Add concise shorthand for options, input, output, and statuses to the operation descriptions...
11169nejucomo@gmail.com**20080130072742
11170 
11171 I'm not convinced if this is the best way to do this, but I find it
11172 handy to have a conscise "quick reference" for the webapi operations
11173 which summarize all related I/O.
11174 
11175 Another possibility is to reject this patch, but create a separate
11176 "webapi_quickref.html" with a concise table.
11177 
11178]
11179[new improved webapi.txt
11180zooko@zooko.com**20070823200326
11181 As per ticket #118, this refactors the explanation of URIs and paths and changes the JSON metadata schema.
11182 
11183 http://allmydata.org/trac/tahoe/ticket/118
11184 
11185]
11186[webapi.txt: shorter and hopefully clearer description of names vs. identifiers
11187zooko@zooko.com**20070815192804
11188 Brian (and anyone who has an interest in the API and documentation): please review.
11189 
11190]
11191[webapi.txt: minor clarifications and examples
11192warner@lothar.com**20070810225227]
11193[webapi.txt: add URI-based GET variants
11194zooko@zooko.com**20070810193329]
11195[webapi.txt: clear up underspecified items, replace 'webpassword' paragraph
11196Brian Warner <warner@allmydata.com>**20070816020447
11197 with a section about our expected plans for #98, add more introductory text
11198 to the sections on manipulate-file vs manipulate-directory.
11199]
11200[webapi.txt: specify replace= behavior on all PUT and POST commands
11201Brian Warner <warner@allmydata.com>**20070816023149]
11202[webapi.txt: s/dirnodes/directories/
11203zooko@zooko.com**20070816225353]
11204[webapi.txt: separate out debug/test commands, indicate that localfile=/localdir= requires special activation
11205warner@lothar.com**20070811012022]
11206[webapi.txt: put back the localfile feature
11207zooko@zooko.com**20070810195237
11208 So that we can compare versions webapi.txt with and without this documentation side by side.
11209 
11210]
11211[webapi.txt: some editing, and remove the localfile feature and the manifest feature
11212zooko@zooko.com**20070810192413
11213 My motivation to remove these features is as per:
11214 
11215 http://allmydata.org/pipermail/tahoe-dev/2007-August/000067.html
11216 
11217 However, I haven't heard back from Brian yet, so I'm actually going to put them back in the next patch so that I can compare the two versions of webapi.txt side by side.
11218 
11219]
11220[webapi.txt: put back the manifest feature
11221zooko@zooko.com**20070810195833
11222 So that we can compare versions of webapi.txt with and without this documentation, side by side.
11223]
11224[webapi.txt: further refactoring and add a section explaining TOCTTOU bugs and how to avoid them by using URIs
11225zooko@zooko.com**20070810190430]
11226[webapi.txt: further refactoring and editing to clarify the fact that you don't know whether a thing is a file or a directory before you fetch it
11227zooko@zooko.com**20070810171927]
11228[add a 'rename' button to the webish dir view
11229robk-org@allmydata.com**20070712235354
11230 
11231 alongside the 'del' button is now presented a 'rename' button, which takes
11232 the user to a new page, the 't=rename-form' page, which asks ther user for
11233 the new name of the child and ultimately submits a POST request to the dir
11234 for 't=rename' to perform the actual rename i.e. an attach followed by a
11235 delete of children.
11236]
11237[webapi.txt: update rfc reference
11238warner@lothar.com**20070809182435]
11239[webapi.txt: add "?t=file" flag and reorganize doc to discourage people from thinking that they know before hand the file-or-dir type of the thing that they are naming
11240zooko@zooko.com**20070810164352]
11241[web: /uri/ must escape slashes, we use bangs for this
11242warner@lothar.com**20070708050652]
11243[web: remove t=XML, and other dead code
11244warner@lothar.com**20070708055515]
11245[webish.py: add links to JSON/etc representations of directory contents to the listing
11246warner@lothar.com**20070707183107]
11247[webapi: normalized API: use t=upload or t=download when providing localdir= or localfile=
11248warner@lothar.com**20070710202410]
11249[webapi updates
11250warner@lothar.com**20070707173707]
11251[web: use real JSON instead of the fake stubs
11252warner@lothar.com**20070708071711
11253 Also include the encoder portion of Bob Ippolito's simplejson-1.7.1 as
11254 allmydata.util.json_encoder . simplejson is distributed under a more liberal
11255 license than Tahoe (looks to be modified BSD), so redistributing it should be ok.
11256 
11257]
11258[web: add when_done to all POST operations, use it from upload/mkdir/mount/delete forms
11259warner@lothar.com**20070708041748]
11260[web: change per-directory forms to match new POST scheme
11261warner@lothar.com**20070708033547]
11262[webish: when mounting a shared directory, don't automatically move to it
11263warner@lothar.com**20070615093424]
11264[webish: log dirname in mkdir
11265warner@lothar.com**20070615094819]
11266[web: make 'delete' buttons work again
11267warner@lothar.com**20070708034630]
11268[web: remove debug prints
11269warner@lothar.com**20070708031130]
11270[web: more test work, now all tests either pass or are skipped (POST, XMLRPC, and URI/)
11271warner@lothar.com**20070707173405]
11272[add IDirectoryNode.get_child_at_path
11273warner@lothar.com**20070707023837]
11274[dirnode: add build_manifest() and introduce 'refresh capabilities'
11275warner@lothar.com**20070627024120]
11276[web: more test work, now all tests pass, POST too, only XMLRPC left to implement
11277warner@lothar.com**20070708030658]
11278[webapi: checkpointing more test progress
11279warner@lothar.com**20070707071636]
11280[webish.py: put the URI in a narrower auto-scrolling box (with CSS)
11281warner@lothar.com**20070615083220]
11282[webish: fix ?t=manifest, ?t=xml so they don't throw exceptions, prune directory.xhtml
11283warner@lothar.com**20070707181531]
11284[checkpointing new webapi: not all tests pass yet
11285warner@lothar.com**20070707024355]
11286[webish: display program/library versions on the welcome page
11287warner@allmydata.com**20070611175111]
11288[node.py: hush pyflakes warnings
11289warner@allmydata.com**20070524005448]
11290[make stopService() defer until startService() completes (fixes a problem with the new not-yet-committed unit test)
11291"Zooko O'Whielacronx <zooko@zooko.com>"**20070523220803]
11292[update docs, remove extraneous licence text, sort module names in import statement
11293"Zooko O'Whielacronx <zooko@zooko.com>"**20070521204251
11294 closes #46 ?
11295]
11296[node.py: switch to using get_local_addresses_async, which is slightly more portable (most forms of unix)
11297warner@lothar.com**20070308211252]
11298[control: add RIControlClient, fix some pyflakes warnings
11299warner@lothar.com**20070308012027]
11300[fix handling of local_ip file and rename it to advertised_ip_addresses and document it in README
11301"Zooko O'Whielacronx <zooko@zooko.com>"**20070522210140]
11302[make it print out version numbers when it constructs a Node instance
11303"Zooko O'Whielacronx <zooko@zooko.com>"**20070427204738]
11304[some English usage edits to README, thanks to Stephen Hill
11305"Zooko O'Whielacronx <zooko@zooko.com>"**20070502040323]
11306[add some simple create-client/start-client targets, document htem briefly
11307warner@allmydata.com**20070427031648]
11308[update README in response to some criticisms from some European grad student on IRC
11309"Zooko O'Whielacronx <zooko@zooko.com>"**20070428001325]
11310[install libs into instdir/lib and scripts into instdir/bin
11311zooko@allmydata.com**20070501004910]
11312[don't include test code itself in the test-coverage numbers
11313warner@allmydata.com**20070416193245]
11314[remove "." from setup.py invocation because it seems to be screwing up paths in the .pyc's
11315"Zooko O'Whielacronx <zooko@zooko.com>"**20070430214336]
11316[build foolscap from the bundled snapshot
11317zooko@zooko.com**20070430024418
11318 and fix PYTHONPATH usage in a few places in GNUmakefile
11319 
11320]
11321[GNUmakefile: clean up better
11322zooko@zooko.com**20070418230954]
11323[GNUmakefile: rm -rf ./src/pyfec/build on clean
11324"Zooko O'Whielacronx <zooko@zooko.com>"**20070418164947]
11325[GNUmakefile: don't stop clean if clean-pyfec fails
11326"Zooko O'Whielacronx <zooko@zooko.com>"**20070418164824]
11327[GNUmakefile: 'test' should use zfec, not fec
11328warner@allmydata.com**20070419005918]
11329[port GNUmakefile to Windows, cygwin, Linux, MacOSX/PPC, MacOSX/Intel
11330"Zooko O'Whielacronx <zooko@zooko.com>"**20070410192432
11331 And of course it may well work on lots of other modern unixes, too, especially the more GNUish ones.
11332]
11333[include pyfec in the trial tests
11334warner@allmydata.com**20070407011723]
11335[pyfec: trial-ize the unit tests, making sure to keep working if trial is unavailable
11336warner@allmydata.com**20070407011650]
11337[pyfec: fix some error-checking, add more unit tests
11338warner@allmydata.com**20070328195312]
11339[pyfec: correctly handle wrongly typed input by raising exception
11340zooko@zooko.com**20070328065332]
11341[pyfec: fix preconditions and typing, remove unused error-checking, tidy-up naming and documentation
11342"Zooko O'Whielacronx <zooko@zooko.com>"**20070201060325]
11343[fix tests to not require pyutil and other tweaks
11344zooko@zooko.com**20070125212534]
11345[pyfec: add precondition checks on the values of k and m to constructors
11346zooko@zooko.com**20070126004704]
11347[pyfec: remove (optimize) unused code
11348zooko@zooko.com**20070127021028]
11349[add comment
11350"Zooko O'Whielacronx <zooko@zooko.com>"**20070124212145]
11351[pyfec: trivial formatting tweak
11352zooko@zooko.com**20070127021053]
11353[pyfec: fix preconditions, tighten internal C types, fix bugs in the file-encoding and benchmarking utility functions
11354"Zooko O'Whielacronx <zooko@zooko.com>"**20070130163735]
11355[use buffers as generic "read" buffers instead of char buffers
11356zooko@zooko.com**20070125212401
11357 This is a typing kludge -- if your buffers have elements of size > 1 then we will be processing only a subset of the elements and treating each byte of the element as a separate entry.
11358 Oh well.
11359]
11360[pyfec: make README.txt much more detailed and rename some internal variables and add some docstrings
11361zooko@zooko.com**20070127020850]
11362[stricter typing -- using unsigned char for indexes into shares
11363"Zooko O'Whielacronx <zooko@zooko.com>"**20070124211751]
11364[add README.txt
11365zooko@zooko.com**20070126004637]
11366[pyfec: add utility functions to encode into a bunch of temp files and to decode from a bunch of tempfiles
11367zooko@zooko.com**20070127021527]
11368[pyfec: delete m-k of the tempfiles at random in the benchmark of the to/from files
11369zooko@zooko.com**20070127022213]
11370[pyfec: move benchmark code from test_pyfec.py into the new bench_pyfec.py and add more benchmark code
11371zooko@zooko.com**20070127021549]
11372[add benchmark
11373zooko@zooko.com**20070125233348]
11374[add utility method file_fec
11375zooko@zooko.com**20070125212519]
11376[pyfec: fix typo in unit test
11377"Zooko O'Whielacronx <zooko@zooko.com>"**20070201162846]
11378[pyfec: execute tests on import of test_pyfec.py only if it is the __main__
11379zooko@zooko.com**20070127021759]
11380[use zfec's setuptools installer in the nice controllable way
11381zooko@allmydata.com**20070426224016]
11382[GNUmakefile: remove test-zfec target, since the normal 'test' target provides zfec coverage
11383warner@allmydata.com**20070418184100]
11384[pyflakes: do not assume that pyflakes lives in /usr/local, just assume that it is on the PATH
11385warner@allmydata.com**20070427020048]
11386[make pyflakes run faster and with more alacrity
11387zooko@zooko.com**20070427011235]
11388[edit README
11389"Zooko O'Whielacronx <zooko@zooko.com>"**20070501195724]
11390[improve "the Debian way" build process to produce foolscap .debs
11391"Zooko O'Whielacronx <zooko@zooko.com>"**20070501194135]
11392[add .deb targets for edgy
11393warner@allmydata.com**20070404233925]
11394[large update to the install instructions in the README, and add a link to allmydata.org
11395zooko@zooko.com**20070430051633]
11396[update README to reflect simpler run-in-place procedure
11397"Zooko O'Whielacronx <zooko@zooko.com>"**20070428001751]
11398[update README to show that foolscap is bundled and to fix the module name of zfec
11399zooko@zooko.com**20070430045623]
11400[update README to mention which dependencies are python packages
11401"Zooko O'Whielacronx <zooko@zooko.com>"**20070427224313
11402 In particular, my brother is an Ubuntu/Debian user who said it would be nice if
11403 we had mentioned that those packages were named "python-foo" in the apt package
11404 namespace.
11405 
11406]
11407[more README updates in response to user feedback
11408"Zooko O'Whielacronx <zooko@zooko.com>"**20070427230351
11409 The user in this case is my brother Josh.
11410]
11411[webish.py: add a web page to display the manifest for any particular directory
11412warner@lothar.com**20070627025521]
11413[Add the 'vdrive' service, for clients to access the public/private root dirs.
11414warner@allmydata.com**20070628001106
11415 
11416 These allow client-side code to conveniently retrieve the IDirectoryNode
11417 instances for both the global shared public root directory, and the per-user
11418 private root directory.
11419]
11420[client.py: use persistent FURLs for our Node, to reduce spurious connection attempts (#26)
11421warner@allmydata.com**20070607223221]
11422[merge vdrive.py and filetable.py into a single dirnode.py
11423warner@lothar.com**20070627001658]
11424[remove old filetree code
11425warner@lothar.com**20070626033419]
11426[filetree: mark leaf nodes by adding is_leaf_subtree(), stop traversing when we hit them, to make vdrive._get_file_uri() work
11427warner@lothar.com**20070121193116]
11428[test_filetree: more vdrive._get_file_uri() coverage
11429warner@lothar.com**20070121193940]
11430[hush pyflakes
11431warner@allmydata.com**20070124212922]
11432[use the "binary" flag on open() for files that shouldn't have line-endings automatically converted
11433"Zooko O'Whielacronx <zooko@zooko.com>"**20070404231230]
11434[vdrive.py: let put_file return the URI that was used for the file itself
11435warner@lothar.com**20070424084140]
11436[add licence, update metadata and URLs
11437"Zooko O'Whielacronx <zooko@zooko.com>"**20070427204715]
11438[rename bin/allmydata to bin/allmydata-tahoe, so the package can co-exist with the regular (amdlib) package
11439warner@allmydata.com**20070120020533]
11440[relnotes.txt: English usage (more)
11441"Zooko O'Whielacronx <zooko@zooko.com>"**20070419211648]
11442[relnotes.txt: update probable project URLs
11443warner@allmydata.com**20070420031121]
11444[further update the notes about the dependencies
11445zooko@zooko.com**20070427051613]
11446[update README re: dependencies
11447"Zooko O'Whielacronx <zooko@zooko.com>"**20070427040049]
11448[add setuptools to required dependencies in README
11449"Zooko O'Whielacronx <zooko@zooko.com>"**20070426225654]
11450[README: mention 'fakeroot' and other build dependencies to creat debian packages
11451warner@allmydata.com**20070426220022]
11452[update README
11453"Zooko O'Whielacronx <zooko@zooko.com>"**20070426212815]
11454[tweak README
11455zooko@zooko.com**20070409231444]
11456[tahoe readme - updated to included all packages and clarify text
11457secorp@allmydata.com**20070329190232]
11458[update relnotes.txt
11459"Zooko O'Whielacronx <zooko@zooko.com>"**20070427051920]
11460[a couple of minor edits to relnotes.txt
11461"Zooko O'Whielacronx <zooko@zooko.com>"**20070426182457]
11462[relnotes.txt: fix typo
11463"Zooko O'Whielacronx <zooko@zooko.com>"**20070419210520]
11464[update tarball URL
11465"Zooko O'Whielacronx <zooko@zooko.com>"**20070427045436]
11466[globally search and replace "mesh" with "grid" and adjust description of the effect of NAT on the topology
11467"Zooko O'Whielacronx <zooko@zooko.com>"**20070430200609]
11468[vdrive: protect dirnode contents with an HMAC
11469warner@lothar.com**20070626193621]
11470[more runner.py test coverage: don't bypass argv parsing
11471warner@lothar.com**20070626235138]
11472[improve test coverage of runner.py
11473warner@lothar.com**20070626223646]
11474[test_runner.py: improve test coverage a little bit
11475warner@lothar.com**20070424042819]
11476[dump_uri_extension: improve test coverage of runner.py
11477warner@lothar.com**20070626225500]
11478[testutil: make SignalMixin actually be a mixin (and not inherit from TestCase), use it from all tests that start notes and thus exec ifconfig
11479warner@lothar.com**20070424041502]
11480[iputil/testutil: fix pyflakes errors/warnings
11481warner@allmydata.com**20070419013337]
11482[iputil.list_async_addresses now "works" on cygwin
11483zooko@zooko.com**20070419003008]
11484[util.iputil: try to survive not having a global network connection at all
11485warner@lothar.com**20070308002142]
11486[test_iputil: remove the test that only works on linux, since we're using the cross-unix 'get_local_addresses_async' anyways. This should allow the tests to pass on OS-X
11487warner@allmydata.com**20070329182117]
11488[oops -- the previous commit of iputil wasn't the right version
11489"Zooko O'Whielacronx <zooko@zooko.com>"**20070416221201
11490 Too bad synchronizing pyutil and allmydata.util includes a manual step.
11491 
11492]
11493[test_iputil: improve error message
11494warner@allmydata.com**20070416220525]
11495[pyutil: iputil: fix netbsd, irix, sunos
11496zooko@zooko.com**20070418144026]
11497[iputil.py: remove unused import
11498warner@allmydata.com**20070417000800]
11499[port iputil to Windows (and Irix, and NetBSD, and Solaris 2, ...)
11500"Zooko O'Whielacronx <zooko@zooko.com>"**20070416215913]
11501[iputil: use the subprocess module instead of os.popen
11502warner@lothar.com**20070308012900]
11503[iputil: use explicit /sbin/ifconfig, to avoid depending upon PATH
11504warner@lothar.com**20070308004740]
11505[iputil: switch to a scapy-inspired SIOCGIFADDR approach, very linux-specific now
11506warner@lothar.com**20070308020347]
11507[copy testutil from pyutil
11508zooko@zooko.com**20070419002836]
11509[copy repeatable_random from pyutil
11510zooko@zooko.com**20070419002733]
11511[remove unused/obsoleted workqueue.py
11512warner@lothar.com**20070627002523]
11513[fix some of the filetree/workqueue interface definitions
11514warner@allmydata.com**20070126233124]
11515[extirpate all references the "queen" and "metatracker"
11516"Zooko O'Whielacronx <zooko@zooko.com>"**20070430165752
11517 This is a potentially disruptive and potentially ugly change to the code base,
11518 because I renamed the object that serves in both roles from "Queen" to
11519 "IntroducerAndVdrive", which is a bit of an ugly name.
11520 
11521 However, I think that clarity is important enough in this release to make this
11522 change.  All unit tests pass.  I'm now darcs recording this patch in order to
11523 pull it to other machines for more testing.
11524 
11525]
11526[rename "pyfec" to "zfec" within tahoe build system and source code
11527"Zooko O'Whielacronx <zooko@zooko.com>"**20070418171123]
11528[probably fix the debian dapper packaging to include pyfec and crypto.. sid still needs to be fixed
11529warner@allmydata.com**20070329190724]
11530[debian: change name of debian packages to 'allmydata-tahoe' to avoid conflicts
11531warner@allmydata.com**20061205204002]
11532[fix the sid debian packaging too
11533warner@allmydata.com**20070329191639]
11534[first attempt at adding debian packaging support for ubuntu 'feisty'
11535warner@allmydata.com**20070329213615]
11536[debian: give incrementing version numbers to .deb packages, using timestamps
11537warner@allmydata.com**20070106020651]
11538[dummy line to show off buildbot
11539warner@lothar.com**20070202224545]
11540[add some USAGE notes to the release notes, capitalize section headers, some small edits
11541warner@allmydata.com**20070420003006]
11542[relnotes.txt: English usage
11543"Zooko O'Whielacronx <zooko@zooko.com>"**20070419211100]
11544[rough draft of release announcement for 0.1
11545"Zooko O'Whielacronx <zooko@zooko.com>"**20070419205513]
11546[more architecture docs, this is fun
11547warner@allmydata.com**20070420081429]
11548[add architecture/code-layout documents describing our current architecture and a bit of our future plans
11549warner@allmydata.com**20070420064347]
11550[add a couple of todos to roadmap.txt (one of which is to eliminate roadmap.txt)
11551"Zooko O'Whielacronx <zooko@zooko.com>"**20070426230134]
11552[remove a couple of items from the todo list in roadmap.txt
11553"Zooko O'Whielacronx <zooko@zooko.com>"**20070419204824]
11554[update roadmap
11555warner@allmydata.com**20070419174437]
11556[merge TODO into roadmap.txt
11557"Zooko O'Whielacronx <zooko@zooko.com>"**20070410173338]
11558[update roadmap: add download-peer-selection
11559warner@allmydata.com**20070405193422]
11560[roadmap: connection management v1 milestone done
11561warner@lothar.com**20061201021924]
11562[update notes about lease deletion logic
11563zooko@zooko.com**20061204072512]
11564[update roadmap with webish UI progress
11565warner@lothar.com**20061205015622]
11566[got read/write webish interface working
11567Brian Warner <warner@lothar.com>**20061204182252]
11568[roadmap.txt: editing
11569"Zooko O'Whielacronx <zooko@zooko.com>"**20070403173234]
11570[roadmap: updated who is working on what
11571"Zooko O'Whielacronx <zooko@zooko.com>"**20070403171620
11572 Namely that we don't know who is working on what at the moment...
11573 
11574]
11575[update roadmap more
11576warner@lothar.com**20061204015505]
11577[add Operations/Deployment for first open source release
11578"Zooko O'Whielacronx <zooko@zooko.com>"**20070403173247
11579 As per discussion I had with Peter this morning, we should do these three things and then release the first open source version.
11580 
11581]
11582[add TODO: port to Windows
11583"Zooko O'Whielacronx <zooko@zooko.com>"**20070410162758]
11584[update TODO (add operational TODOs)
11585zooko@zooko.com**20070409232034]
11586[TODOs
11587zooko@zooko.com**20070330175211]
11588[add TODO
11589zooko@zooko.com**20070330031938]
11590[webish: fix link to private_vdrive
11591warner@allmydata.com**20070629020752]
11592[webish: make each link in the directory name an href to that directory
11593warner@allmydata.com**20070629181718]
11594[vdrive: switch to URI:DIR and URI:DIR-RO, providing transitive readonlyness
11595warner@lothar.com**20070625202351]
11596[filetable: oops, os.listdir() does not guarantee sorted results
11597warner@lothar.com**20070120190226]
11598[rename queen control files to 'introducer'
11599warner@allmydata.com**20070420012415]
11600[switch from FieldStorage.value to FieldStorage.file
11601"Zooko O'Whielacronx <zooko@zooko.com>"**20070525230019
11602 Unfortunately this doesn't make the O(n) memory usage go away.  It might reduce the constants -- I'm not sure.  I look forward to enhancement #54 -- memory usage tests!
11603 
11604]
11605[test_filetable: fix to match new vdrive approach
11606warner@allmydata.com**20070615070101]
11607[runner.py: add 'dump-directory-node' command
11608warner@lothar.com**20070615074705]
11609[add 'allmydata-tahoe dump-uri-extension' utility command
11610warner@allmydata.com**20070612013821]
11611[runner.py: allow --multiple to enable starting/stopping/creating multiple nodes at once
11612warner@allmydata.com**20070606210657]
11613[test_runner.py: add some coverage for allmydata.scripts.runner, to create nodes
11614warner@allmydata.com**20070420015645]
11615[runner.py: allow all directory-using commands (create/start/stop) to accept argv[-1] as well as --basedir
11616warner@allmydata.com**20070606183719]
11617[runner.py: spoke too soon. Really fix #51 this time.
11618warner@allmydata.com**20070524182039]
11619[make runner find twistd and invoke it with python
11620zooko@zooko.com**20070427061413
11621 This makes allmydata-tahoe work on Windows, and probably doesn't make it fail on other platforms.
11622]
11623[runner.py: expanduser() basedirs, so '~' works. Closes #51.
11624warner@allmydata.com**20070524181019]
11625[webish: enable deletion of directories
11626warner@lothar.com**20070615083257]
11627[create a personal (non-shared) vdrive, in addition to the global shared one
11628warner@lothar.com**20070615083324]
11629[minor change to test buildbot triggering for new repository
11630warner@allmydata.com**20061207210520]
11631[check_memory.py: finish the failsafe-shutdown code
11632warner@allmydata.com**20070525003442]
11633[make new vdrive work, implement convenience wrapper, passes all tests
11634warner@lothar.com**20070615073732]
11635[webish: present real URI in directory listing, not an unnecessarily b2a'ed form
11636warner@allmydata.com**20070117204602]
11637[vdrive/webish: finish verifierid/uri transition
11638warner@allmydata.com**20070117014313]
11639[add some vdrive logging
11640warner@lothar.com**20061204064636]
11641[webish: show vdrive and introducer connectedness separately
11642warner@lothar.com**20070610040357
11643 Also don't offer a link to the vdrive webpages if we don't have a vdrive.furl
11644]
11645[fix some python2.5 incompatibilities, and remove an old webish display that suggested we might know about peers but not be connected to them
11646warner@allmydata.com**20070328004449]
11647[replace 'queen' with 'introducer' in a lot of places, but not all
11648warner@allmydata.com**20070420003021]
11649[fix return value of 'allmydata restart'
11650Brian Warner <warner@lothar.com>**20061206014352]
11651[add more useful text to the README
11652warner@allmydata.com**20070405005535]
11653[port the makefile to Windows and update the README
11654zooko@allmydata.com**20070404181838]
11655[Makefile: add a default target to just build the tree
11656warner@lothar.com**20070107190937]
11657[add test-pyfec target, not added to the main 'test' target because it adds 20 seconds to the test run
11658warner@lothar.com**20070308235438]
11659[fix purely syntactic merge conflict
11660"Zooko O'Whielacronx <zooko@zooko.com>"**20070201220707]
11661[Makefile: $(PWD) doesn't always work, in particular the buildslaves don't
11662Brian Warner <warner@allmydata.com>**20070201093913
11663 update environment variables like $(PWD) when the launch commands.
11664]
11665["make clean" recursively runs cleanup in subprojects (pyfec and Crypto)
11666"Zooko O'Whielacronx <zooko@zooko.com>"**20070201214952]
11667[Makefile: update figleaf code to use INSTDIR instead of now-obsolete builddir.py
11668warner@allmydata.com**20070306014606]
11669[Makefile: parameterize 'trial' and 'python' to enable a python2.5 builder
11670warner@allmydata.com**20070201011233]
11671[modify figleaf2html to show module names instead of .py filenames, also add a --root argument to restrict coverage to a specific parent directory
11672warner@lothar.com**20070104042325]
11673[move figleaf2html and figleaf_htmlizer.py into our tree, for easier customization
11674warner@lothar.com**20070104040651]
11675[figleaf: delete coverage file (.figleaf) before each test run, otherwise I suspect coverage data will accumulate from one test run to the next
11676warner@allmydata.com**20070109032808]
11677[figleaf.el: when converting to the elisp-readable format, use our in-tree version of figleaf rather than one found on the system. Also change the keybinding to toggle annotations to C-cC-a, which is easier to type
11678warner@allmydata.com**20070109032903]
11679[more figleaf emacs work: enable the minor mode, then type C-cA to toggle annotations
11680warner@lothar.com**20070104072536]
11681[forget about old peers (closes #26)
11682warner@allmydata.com*-20070508021024
11683 Add a new method to RIIntroducer, to allow the central introducer node to
11684 remove peers from the active set after they've gone away. Without this,
11685 client nodes accumulate stale peer FURLs forever. This introduces a
11686 compatibility break, as old introducers won't know about the 'lost_peers'
11687 message, although the errors produced are probably harmless.
11688 
11689]
11690[forget about old peers (closes #26)
11691warner@allmydata.com**20070508021024
11692 Add a new method to RIIntroducer, to allow the central introducer node to
11693 remove peers from the active set after they've gone away. Without this,
11694 client nodes accumulate stale peer FURLs forever. This introduces a
11695 compatibility break, as old introducers won't know about the 'lost_peers'
11696 message, although the errors produced are probably harmless.
11697 
11698]
11699[revamp vdrive: nodes with furls. tests still fail.
11700warner@allmydata.com**20070615031434]
11701[test_system: improve webish.py coverage
11702warner@lothar.com**20070424084154]
11703[add RIClient.get_versions, in the hopes of enabling backwards-compatibility code in the future
11704warner@allmydata.com**20070426190125]
11705[enable private upload, in which the file is inserted at the grid layer but not at the vdrive layer
11706"Zooko O'Whielacronx <zooko@zooko.com>"**20070516154019
11707 This patch is actually by Faried Nawaz, as per ticket #33:
11708 
11709 http://allmydata.org/trac/tahoe/ticket/33
11710 
11711]
11712[test_system.py: minor reformatting
11713warner@allmydata.com**20070601013101]
11714[client.py: allow operation without vdrive.furl, for storage-only no-UI nodes
11715warner@allmydata.com**20070608005549]
11716[move almost all hashing to SHA256, consolidate into hashutil.py
11717warner@allmydata.com**20070608044721
11718 
11719 The only SHA-1 hash that remains is used in the permutation of nodeids,
11720 where we need to decide if we care about performance or long-term security.
11721 I suspect that we could use a much weaker hash (and faster) hash for
11722 this purpose. In the long run, we'll be doing thousands of such hashes
11723 for each file uploaded or downloaded (one per known peer).
11724 
11725]
11726[hashutil: convenience methods for tagged and encoded hashes
11727zooko@zooko.com**20070330011130
11728 In various cases, including Merkle Trees, it is useful to tag and encode the inputs to your secure hashes to prevent security flaws due to ambiguous meanings of hash values.
11729]
11730[interfaces: use explicit TupleOf and ChoiceOf constraints, since the upcoming version of Foolscap changes the meaning of bare tuples (from ChoiceOf to TupleOf)
11731warner@lothar.com**20070414020438]
11732[raise constraint on FURLs from 150 chars to 1000 chars
11733"Zooko O'Whielacronx <zooko@zooko.com>"**20070522205917]
11734[encode/download: reduce memory footprint by deleting large intermediate buffers as soon as possible, improve hash tree usage
11735warner@lothar.com**20070607201558]
11736[encode.py: hush pyflakes warnings
11737warner@lothar.com**20070607201855]
11738[encode.py: fix pyflakes warning
11739Brian Warner <warner@lothar.com>**20070607095616]
11740[test_encode.py: even more testing of merkle trees, getting fairly comprehensive now
11741warner@allmydata.com**20070608042439]
11742[change #!/usr/bin/python to #!/usr/bin/env python
11743zooko@zooko.com**20070329210128
11744 Note that using "whatever version of python the name 'python' maps to in the current shell environment" is more error-prone that specifying which python you mean, such as by executing "/usr/bin/python setup.py" instead of executing "./setup.py".  When you build tahoe (by running "make") it will make a copy of bin/allmydata-tahoe in instdir/bin/allmydata-tahoe with the shebang line rewritten to execute the specific version of python that was used when building instead of to execute "/usr/bin/env python".
11745 
11746 However, it seems better that the default for lazy people be "whatever 'python' means currently" instead of "whatever 'python' meant to the manufacturer of your operating system".
11747 
11748]
11749[tool to generate an overhead/alacrity table for various hashing schemes
11750warner@lothar.com**20061022031004]
11751[added a simulator tool
11752warner@lothar.com**20061128222708]
11753[control.py: fix get_memory_usage, add a sample client tool
11754warner@lothar.com**20070308023149]
11755[add tests for bad/inconsistent plaintext/crypttext merkle tree hashes
11756warner@allmydata.com**20070608023229]
11757[download.py: refactor get-thingA-from-somebody to reuse the logic for other things
11758warner@lothar.com**20070607065002]
11759[fetch plaintext/crypttext merkle trees during download, but don't check the segments against them yet
11760warner@lothar.com**20070607071541]
11761[use absolute import of 'allmydata.Crypto' rather than a relative import of just 'Crypto', to make it clear that we're using our own form rather than relying upon the system version
11762warner@allmydata.com**20070106031226]
11763[encode: add plaintext/crypttext merkle trees to the shares, and the thingA block. Still needs tests and download-side verification.
11764warner@lothar.com**20070607024020]
11765[encode.py: clean up handling of lost peers during upload, add some logging
11766warner@allmydata.com**20070606194016]
11767[test_encode.py: further refactoring of send_and_recover
11768warner@allmydata.com**20070608013625]
11769[test_encode.py: refactor send_and_recover a bit
11770warner@allmydata.com**20070608012426]
11771[encode: tolerate lost peers, as long as we still get enough shares out. Closes #17.
11772warner@allmydata.com**20070606173240]
11773[move validation data to thingA, URI has storage_index plus thingA hash
11774warner@allmydata.com**20070602014801
11775 
11776 This (compatibility-breaking) change moves much of the validation data and
11777 encoding parameters out of the URI and into the so-called "thingA" block
11778 (which will get a better name as soon as we find one we're comfortable with).
11779 The URI retains the "storage_index" (a generalized term for the role that
11780 we're currently using the verifierid for, the unique index for each file
11781 that gets used by storage servers to decide which shares to return), the
11782 decryption key, the needed_shares/total_shares counts (since they affect
11783 peer selection), and the hash of the thingA block.
11784 
11785 This shortens the URI and lets us add more kinds of validation data without
11786 growing the URI (like plaintext merkle trees, to enable strong incremental
11787 plaintext validation), at the cost of maybe 150 bytes of alacrity. Each
11788 storage server holds an identical copy of the thingA block.
11789 
11790 This is an incompatible change: new messages have been added to the storage
11791 server interface, and the URI format has changed drastically.
11792 
11793]
11794[fix BucketWriter to not create a finalhome until it is complete, and to clean up the empty $VERIFIERID dir under incoming/ when it moves the last share out of it
11795zooko@zooko.com**20070331010156]
11796[storageserver: ignore files in verifierdir whose filenames aren't of the right form for shares
11797zooko@zooko.com**20070418144156]
11798[fix storage server to handle the case that it has no directory at all when someone asks for buckets
11799"Zooko O'Whielacronx <zooko@zooko.com>"**20070331001207]
11800[fix bug in storage-server: yes, "0" is a number, Mr. storage server
11801"Zooko O'Whielacronx <zooko@zooko.com>"**20070331000704]
11802[factor out the tagged hash function used for subshares/blocks
11803warner@allmydata.com**20070418032756]
11804[encode.py: remove an unused import
11805warner@allmydata.com**20070413030932]
11806[log a running total of how much of your file has been uploaded
11807zooko@zooko.com**20070331010137]
11808[download: remove unused import
11809warner@allmydata.com**20070418041120]
11810[make test_encode less CPU-intense by using 4-out-of-10 encoding instead of 25-out-of-100
11811warner@allmydata.com**20070419175615]
11812[download: validate handling of missing sharehashes too
11813warner@allmydata.com**20070417001544]
11814[interfaces: allow URIs to be up to 300 chars long, we're just crossing over the edge now
11815warner@allmydata.com**20070427010829]
11816[allmydata.interfaces: remove some of the placeholders now that we require foolscap-0.1.2
11817warner@lothar.com**20070404225936]
11818[added a README explaining how to get started and what library dependencies are needed
11819warner@allmydata.com**20070328174829]
11820[raise the limit on the number of hashes when retrieving them, too
11821"Zooko O'Whielacronx <zooko@zooko.com>"**20070430130010]
11822[change uri-packer-unpacker to deal with dictionaries, not fragile tuples
11823warner@allmydata.com**20070523181849]
11824[uri.py: share counts are not base32-encoded
11825warner@allmydata.com**20070330193616]
11826[use real encryption, generate/store/verify verifierid and fileid
11827warner@allmydata.com**20070426005310]
11828[download: remove some leftover (and not very useful) debug logging
11829warner@allmydata.com**20070417001757]
11830[test_encode.Encode: cover more combinations of data size relative to segment size and number of block hash tree leaves
11831warner@allmydata.com**20070417192956]
11832[test_encode.Roundtrip: cover more combinations of data size relative to segment size and number of block hash tree leaves
11833warner@allmydata.com**20070417195755]
11834[encode: make MAX_SEGMENT_SIZE controllable, to support tests which force the use of multiple segments. Also, remove not-very-useful upload-side debug messages
11835warner@allmydata.com**20070417022957]
11836[test_encode: test filesizes which are an exact multiple of the segment size. This test fails right now.
11837warner@allmydata.com**20070417025503]
11838[download: more test coverage
11839warner@allmydata.com**20070417002137]
11840[download: verify that bad blocks or hashes are caught by the download process
11841warner@allmydata.com**20070416233021]
11842[download: log more information when hashtree checks fail
11843warner@allmydata.com**20070416200819]
11844[encode: handle uploads of the same file multiple times. Unfortunately we have to do almost as much work the second time around, to compute the full URI
11845warner@allmydata.com**20070419012910]
11846[encode: clean up some weirdness that was there to make unit tests easier to write
11847warner@lothar.com**20070406053618]
11848[download: improve test coverage on our IDownloadTarget classes, make FileHandle return the filehandle when its done so that it is easier to close
11849warner@allmydata.com**20070416200736]
11850[system_test: exercise multiple segments
11851warner@allmydata.com**20070417204047]
11852[test_system: bump up timeouts for the sake of slow slave1, give each test a separate base directory
11853warner@lothar.com**20070407033432]
11854[test_system.py: remove the lowered (20s) timeouts, since some buildslaves require more like 30 or 40 seconds to complete the test
11855warner@lothar.com**20070308233009]
11856[webish: add 'my nodeid' to the page
11857warner@allmydata.com**20070329213155]
11858[tests: clean up tearDown to use flushEventualQueue instead of hacking fixed-time delays
11859warner@allmydata.com**20070404230913]
11860[display file size in directory.xhtml
11861Faried Nawaz <self@node.pk>**20070504200732]
11862[webish: more verifierid-to-uri transition
11863warner@allmydata.com**20070117015553]
11864[download.py: refactor bucket_failed() a bit, add some docs
11865warner@allmydata.com**20070601013136]
11866[hash trees: further cleanup, to make sure we're validating the right thing
11867warner@allmydata.com**20070413024148
11868 hashtree.py: improve the methods available for finding out which hash nodes
11869  are needed. Change set_hashes() to require that every hash provided can
11870  be validated up to the root.
11871 download.py: validate from the top down, including the URI-derived roothash
11872  in the share hash tree, and stashing the thus-validated share hash for use
11873  in the block hash tree.
11874]
11875[encode: add more logging to investigate occasional test failures
11876warner@allmydata.com**20070407010438]
11877[encode/upload: add more logging, to understand the test failure on a slow buildslave
11878warner@allmydata.com**20070406224545]
11879[hashtree.py: reindent from 2-spaces to 4-spaces. No functional changes.
11880warner@allmydata.com**20070412212411]
11881[encode: start to fix a few problems, still a lot of work left to go
11882warner@lothar.com**20061214103117]
11883[download: always validate the blockhash, and don't let the bucket trick us into not validating hashes
11884warner@allmydata.com**20070412221846]
11885[verify hash chains on incoming blocks
11886warner@allmydata.com**20070412200740
11887 Implement enough of chunk.IncompleteHashTree to be usable.
11888 Rearrange download: all block/hash requests now go through
11889 a ValidatedBucket instance, which is responsible for retrieving
11890 and verifying hashes before providing validated data. Download
11891 was changed to use ValidatedBuckets everywhere instead of
11892 unwrapped RIBucketReader references.
11893]
11894[chunk.py: remove unused non-tagged hash code
11895warner@allmydata.com**20070330183247]
11896[chunk.py: fix a pyflakes warning
11897warner@allmydata.com**20070330024940]
11898[finish making the new encoder/decoder/upload/download work
11899warner@allmydata.com**20070330235050]
11900[small tweaks to test_storage.py
11901zooko@zooko.com**20061204073559]
11902[encode_new: use tagged (sha256) hashes everywhere
11903warner@allmydata.com**20070330183213]
11904[upload: change _compute_uri a bit, get infile in a different way
11905warner@allmydata.com**20070330193014]
11906[add unit tests and fix bugs in upload
11907zooko@zooko.com**20070330215433]
11908[hush pyflakes warnings
11909warner@allmydata.com**20070117033434]
11910[switch upload to use encode_new, fix a few things (but not nearly all of them)
11911warner@allmydata.com**20070330185303]
11912[encode_new.py: add comments, make variable names more illuminating
11913warner@allmydata.com**20070328180619]
11914[ICodecEncoder: resolve some questions about the API, still more to examine
11915warner@allmydata.com**20070328031445]
11916[update the docs on ICodecEncoder and ICodecDecoder
11917warner@allmydata.com**20070328020509]
11918[add some questions to allmydata.interfaces
11919warner@allmydata.com**20070306025738]
11920[encode_new.py: rearrange methods into the order in which they should be called
11921warner@allmydata.com**20070328203017]
11922[chunk: add IncompleteHashTree for download purposes, plus tests
11923warner@lothar.com**20070406160957]
11924[change HashTree to use new hashutil convenience methods, thus fixing a security flaw
11925zooko@zooko.com**20070330011235]
11926[download: retrieve share hashes when downloading. We don't really do much validation with them yet, though.
11927warner@lothar.com**20070407055119]
11928[add new test for doing an encode/decode round trip, and make it almost work
11929warner@allmydata.com**20070330202001]
11930[finish storage server and write new download
11931zooko@zooko.com**20070330175219]
11932[fix counting of bytes written
11933robk@allmydata.com**20061201023736]
11934[fix another read_attr bug
11935robk@allmydata.com**20061201024907]
11936[fix bug in bucketstore read/write _attr
11937robk@allmydata.com**20061201023657]
11938[mv amdlib/util/* to allmydata/util/
11939zooko@zooko.com**20061204080325]
11940[pulled in assertutil and with it humanreadable from amdlib.util
11941robk@allmydata.com**20061130212225]
11942[fix pyflakes warning in debugshell, by providing a dummy value for 'app' that will be overwritten when the manhole connection is established
11943warner@allmydata.com**20070106031559]
11944[hush pyflakes warnings
11945warner@allmydata.com**20070116033110]
11946[update the use of the encoder API in download.py
11947"Zooko O'Whielacronx <zooko@zooko.com>"**20070201223013]
11948[test_encode: make sure encode_new can produce the data it is supposed to
11949warner@allmydata.com**20070330183257]
11950[new upload and storage server
11951zooko@zooko.com**20070330031952]
11952[make initial simple encode_new test pass
11953warner@lothar.com**20061214101701]
11954[change upload to push 2 shares instead of 3
11955warner@allmydata.com**20070116211526
11956 Now that peers can talk to themselves, the 5-node system test won't fail
11957 just because one of the shares was hosted on the downloader (and thus
11958 inaccessible until recently). The 3-share push was there to avoid this
11959 problem.
11960]
11961[upload: fix typo in debug messages
11962warner@allmydata.com**20070117014228]
11963[encode_new.py: recent Foolscap accepts 'None' as a constraint
11964warner@allmydata.com**20070117015630]
11965[figleaf doesn't like the last line of a file to be a comment
11966warner@allmydata.com**20061214023512]
11967[filetree: make delete() work
11968warner@allmydata.com**20070124211053]
11969[filetree: change the way addpath works, now we add workqueue steps for all involved subtrees at about the same time, rather than letting one step add the next when it runs. Finally add a (passing) test for uploading files to CHK-based directories
11970warner@lothar.com**20070122070609]
11971[filetree: add vdrive upload/download test, change workqueue relative-filename semantics
11972warner@lothar.com**20070121220315]
11973[workqueue: more tests, coverage now at 63.4%, yay
11974warner@lothar.com**20070109073612]
11975[workqueue: more tests
11976warner@lothar.com**20070109075850]
11977[filetree: test NoSuchDirectoryError in vdrive.list()
11978warner@lothar.com**20070121105037]
11979[complete the Introducer changes, separate out vdrive access, make everything work again
11980warner@allmydata.com**20070327231211]
11981[make sure the StorageServer goes underneath the client's basedir
11982warner@lothar.com**20061203065228]
11983[clients now get the queen's pburl from a file named roster_pburl, not hardcoded in the .tac file
11984warner@lothar.com**20061204102740]
11985[fix bin/allmydata argument-parsing
11986warner@lothar.com**20061205183515]
11987[webish: add queen pburl and connection status to welcome page
11988warner@lothar.com**20061205185132]
11989[queen.sendOnly: ignore DeadReferenceError too
11990warner@lothar.com**20070121220109]
11991[sendOnly: oops, I keep forgetting that you can't really use f.trap in a lambda, because it returns the failure it trapped
11992warner@allmydata.com**20070110031305]
11993[hush a pyflakes warning
11994Brian Warner <warner@allmydata.com>**20070323052200]
11995[more work on a memory-footprint test program
11996warner@lothar.com**20070312232837]
11997[add new build/instdir directories to the boringfile
11998warner@allmydata.com**20070131000345]
11999[add some experimental emacs test-coverage-annotation tools, still in development
12000warner@lothar.com**20070102054842]
12001[start work on a memory-measuring test tool
12002warner@lothar.com**20070309001224]
12003[Makefile: count-lines: ignore build/* files, also add total number of .py files
12004warner@allmydata.com**20070131001037]
12005[Makefile: add target to count lines of code and TODOs
12006warner@lothar.com**20070122071739]
12007[merge incomplete stuff with other patches
12008"Zooko O'Whielacronx <zooko@zooko.com>"**20070323232026]
12009[add a local foolscap control interface, to upload/download files and check memory usage
12010warner@lothar.com**20070308011606]
12011[move IWorkQueue into allmydata.interfaces, give VirtualDrive an uploader
12012warner@lothar.com**20070121211531]
12013[more filetree, workqueue-boxes now hold serialized Nodes, move NodeMaker out to a separate module
12014warner@lothar.com**20070121101854]
12015[workqueue: more improvements, more tests
12016warner@allmydata.com**20070109042942]
12017[workqueue: start adding tests
12018warner@allmydata.com**20070109032933]
12019[move upload/download interfaces to allmydata.interfaces, let SubTreeMaker assert IDownloader-ness of its 'downloader' argument
12020warner@lothar.com**20070121210134]
12021[download.py: fix IDownloader to take a URI
12022warner@lothar.com**20070119081748]
12023[filetree: start testing IVirtualDrive, beginning with list()
12024warner@lothar.com**20070121031441]
12025[filetree: put SubTreeMaker and NodeMaker in separate classes
12026warner@lothar.com**20070120230456]
12027[more filetree work, more tests now pass
12028warner@lothar.com**20070120215021]
12029[more filetree, it's actually starting to make sense now
12030warner@lothar.com**20070120204151]
12031[filetree: more tests, still very early
12032warner@lothar.com**20070120111315]
12033[filetree: refactor INode serialization, start on tests
12034warner@lothar.com**20070120105253]
12035[more filetree hacking, still too early to test
12036warner@lothar.com**20070120102520]
12037[checkpont more filetree stuff
12038warner@allmydata.com**20070120052239]
12039[snapshot filetree work: fix pyflakes complaints
12040warner@lothar.com**20070119083536]
12041[snapshot filetree work: it's getting close
12042warner@lothar.com**20070119082303]
12043[workqueue: fix pyflakes warnings, code is still quite incomplete
12044warner@allmydata.com**20070106031119]
12045[filetree.interfaces: remove not-really-code to improve coverage stats
12046warner@allmydata.com**20070117230047]
12047[rearrange service startup a bit, now Node.startService() returns a Deferred that fires when the tub is actually ready, and there is also a Node.when_tub_ready() hook. This allows get_local_addresses() to be slow and not break everything. Changed all necessary test cases to accomodate this slow startup.
12048warner@lothar.com**20070308211036]
12049[change node startup to put all local addresses in the PBURL, including 127.0.0.1. This should facilitate testing on both connected and disconnected systems.
12050warner@lothar.com**20070308004317]
12051[iputil: add get_local_addresses(), an attempt to enumerate all IPv4 addresses on this host. This is pretty unix-specific for right now (it calls ifconfig)
12052warner@lothar.com**20070308002230]
12053[incomplete work to be finished elsewhere
12054"Zooko O'Whielacronx <zooko@zooko.com>"**20070323231557]
12055[client: closures confuse me, late binding bites me yet again
12056warner@lothar.com**20061203065307]
12057[add simple metadata (a single string) to the storage protocol
12058warner@allmydata.com**20070115200122]
12059[remove a couple of unused methods of buckets
12060zooko@zooko.com**20061204081401]
12061[now that foolscap-0.0.7 accepts connect-to-self, allow peers to know about themselves. We now require foolscap-0.0.7
12062warner@allmydata.com**20070116211249]
12063[test_system.py: exercise queen.Roster._lost_node too
12064warner@allmydata.com**20070110014036]
12065[webish: add PBURL to the all-peers table on the welcome page
12066warner@allmydata.com**20070117030118]
12067[make logging multiple nodes at once easier to follow
12068warner@lothar.com**20061203022750]
12069[separate queen's service of introduction-to-the-network from queen's service of providing-access-to-the-vdrive
12070"Zooko O'Whielacronx <zooko@zooko.com>"**20070322213930]
12071[fix test_codec and test_upload to handle current API
12072zooko@zooko.com**20070328055715]
12073[upload: rearrange peer-selection code to be more readable, and fix a silly bug
12074warner@allmydata.com**20070117013512]
12075[oops, fix that NotEnoughPeersError instrumentation
12076warner@allmydata.com**20070117010723]
12077[add better error reporting to NotEnoughPeersError
12078warner@allmydata.com**20070117004752]
12079[update ReplicatingEncoder and decoder to match the current ICodecEncoder/decoder interface
12080warner@lothar.com**20070328051731]
12081[switch to pyfec
12082zooko@zooko.com**20070328070516]
12083[update roadmap
12084warner@lothar.com**20070119081724]
12085[update roadmap
12086warner@lothar.com**20061204015133]
12087[more roadmap updates
12088warner@lothar.com**20061204104333]
12089[document IEncoder, add Encoder.set_landlords()
12090warner@allmydata.com**20070328182453]
12091[use pyfec instead of py_ecc for erasure coding and update API to codec
12092"Zooko O'Whielacronx <zooko@zooko.com>"**20070201220700]
12093[disable figleaf tracing during py_ecc, since it takes *forever*, especially on the slow buildslave
12094warner@allmydata.com**20070106001204]
12095[figleaf: move a copy into allmydata.util.figleaf, update Makefile/trial stuff
12096warner@lothar.com**20070104033829]
12097[Makefile: allow 'make test TEST=something.else'
12098warner@lothar.com**20061214101329]
12099[Makefile: fix location of figleaf.excludes
12100warner@lothar.com**20061214101643]
12101[Makefile: add pyflakes target, only covering allmydata code (not pycrypto)
12102warner@lothar.com**20061214100522]
12103[add figleaf-output target
12104warner@allmydata.com**20061207012402]
12105[encode.py: add some timing comments
12106warner@allmydata.com**20070105064842]
12107[update URI format, include codec name
12108warner@allmydata.com**20070117032959]
12109[update interfaces and docs for codec
12110"Zooko O'Whielacronx <zooko@zooko.com>"**20070124213402
12111 It now takes a sequence of buffers instead of a single string for both encode and decode, and it also takes a separate sequence of shareids for decode instead of a sequence of tuples, and it returns a sequence of buffers instead of a single string.
12112]
12113[change IEncoder to ICodecEncoder, to match the previous change
12114warner@allmydata.com**20070112025714]
12115[nicer API -- you don't have to shuffle the shares into place before calling decode_all()
12116"Zooko O'Whielacronx <zooko@zooko.com>"**20070124212053
12117 Instead it does that shuffling in C inside fecmodule.
12118 
12119]
12120[pyfec v0.9
12121"Zooko O'Whielacronx <zooko@zooko.com>"**20070122231731
12122 
12123 Here is the change history from the first darcs era, in reverse chronological
12124 order:
12125 
12126 Mon Jan 22 16:12:56 MST 2007  "Zooko O'Whielacronx <zooko@zooko.com>"
12127   * move everything into a subdirectory so that I can merge this darcs repo with the tahoe darcs repo
12128   
12129 
12130      ./fec -> ./pyfec/fec
12131      ./setup.py -> ./pyfec/setup.py
12132     A ./pyfec/
12133 
12134 Mon Jan 22 16:10:17 MST 2007  "Zooko O'Whielacronx <zooko@zooko.com>"
12135   * clean up and minimize fec.c
12136    * strip out unused code
12137    * hard-code GF_BITS to 8
12138    * reindent and reformat curly bracket placement
12139   
12140 
12141     M ./fec/fec.c -655 +324
12142     M ./fec/fec.h -25
12143 
12144 Mon Jan 22 14:24:32 MST 2007  "Zooko O'Whielacronx <zooko@zooko.com>"
12145   * change API to allow a subset of the shares to be produced, and to just pass back pointers to primary shares instead of copying them
12146 
12147     M ./fec/fec.c -24 +40
12148     M ./fec/fec.h -5 +17
12149     M ./fec/fecmodule.c -63 +144
12150     M ./fec/test/test_pyfec.py -16 +25
12151     M ./setup.py -2 +27
12152 
12153 Tue Jan 16 23:01:44 MST 2007  "Zooko O'Whielacronx <zooko@zooko.com>"
12154   * split encoder from decoder
12155 
12156     M ./fec/fecmodule.c -48 +161
12157     M ./fec/test/test_pyfec.py -3 +4
12158 
12159 Tue Jan 16 14:35:25 MST 2007  "Zooko O'Whielacronx <zooko@zooko.com>"
12160   * it compiles now!
12161 
12162      ./fec.c -> ./pyfec/fec.c
12163      ./fec.h -> ./pyfec/fec.h
12164      ./fecmodule.c -> ./pyfec/fecmodule.c
12165      ./pyfec -> ./fec
12166     M ./fec/fec.c -109 +85 r13
12167     M ./fec/fec.h -3 +2 r13
12168     M ./fec/fecmodule.c -23 +241 r13
12169     A ./fec/test/
12170     A ./fec/test/test_pyfec.py
12171     A ./pyfec/
12172     A ./setup.py
12173 
12174 Tue Jan  9 10:47:58 MST 2007  zooko@zooko.com
12175   * start of new fecmodule.c
12176 
12177     A ./fecmodule.c
12178 
12179 Mon Jan  1 15:00:04 MST 2007  zooko@zooko.com
12180   * tidy up error handling
12181 
12182     M ./fec.c -26 +16
12183 
12184 Mon Jan  1 14:06:30 MST 2007  zooko@zooko.com
12185   * remove the on-the-fly encoding option
12186   We don't currently need it.
12187 
12188     M ./fec.c -68
12189     M ./fec.h -22
12190 
12191 Mon Jan  1 13:53:28 MST 2007  zooko@zooko.com
12192   * original import from Mnet project
12193 
12194     A ./fec.c
12195     A ./fec.h
12196 
12197]
12198[download: update all users to match Zooko's change to ICodecDecoder.decode (as it now returns a list instead of a single string)
12199warner@allmydata.com**20070124232322]
12200[change build system to use subpackages pristinely and ask them to install themselves into an "instdir"
12201"Zooko O'Whielacronx <zooko@zooko.com>"**20070130205759]
12202[add __init__ and setup.py glue for py_ecc, so we can import it
12203warner@lothar.com**20070102054324]
12204[Makefile: use absolute paths when setting PYTHONPATH
12205warner@allmydata.com**20070117030200]
12206[Makefile: add correct generated build/lib.linux-i686-2.4 directory to PYTHONPATH for tests
12207warner@lothar.com**20061214095951]
12208[tests: add support for figleaf code-coverage gathering
12209warner@allmydata.com**20061206212612]
12210[add preliminary debian packaging
12211warner@lothar.com**20061205080044]
12212[split filetree_new.py up into smaller pieces, in a new subpackage
12213warner@allmydata.com**20070117195438]
12214[filetable_new: fix the test
12215warner@lothar.com**20061224184703]
12216[checkpoint work-in-progress for WorkQueue, a disk-persistent list of work to be done
12217warner@lothar.com**20070102054716]
12218[rename the new filetable code to 'filetree', since robk astutely pointed out that 'table' is misleading and implies a flat list of files in a single directory
12219warner@allmydata.com**20070108222914]
12220[add mathutil.next_power_of_k() and mathutil.ave()
12221"Zooko O'Whielacronx <zooko@zooko.com>"**20070201215526]
12222[filetable: switch to new approach with anonymous nodes
12223warner@allmydata.com**20070615002456]
12224[improve test coverage a bit
12225warner@allmydata.com**20070117213429]
12226[add RIMutableDirectoryNode.get, to get a specific child file or directory
12227warner@lothar.com**20061204100329]
12228[more filetable_new tests
12229warner@lothar.com**20061225065618]
12230[rearrange encode/upload, add URIs, switch to ReplicatingEncoder
12231warner@allmydata.com**20070116032222
12232 
12233 Added metadata to the bucket store, which is used to hold the share number
12234 (but the bucket doesn't know that, it just gets a string).
12235 
12236 Modified the codec interfaces a bit.
12237 
12238 Try to pass around URIs to/from download/upload instead of verifierids.
12239 URI format is still in flux.
12240 
12241 Change the current (primitive) file encoder to use a ReplicatingEncoder
12242 because it provides ICodecEncoder. We will be moving to the (less primitive)
12243 file encoder (currently in allmydata.encode_new) eventually, but for now
12244 this change lets us test out PyRS or zooko's upcoming C-based RS codec in
12245 something larger than a single unit test. This primitive file encoder only
12246 uses a single segment, and has no merkle trees.
12247 
12248 Also added allmydata.util.deferredutil for a DeferredList wrapper that
12249 errbacks (but only when all component Deferreds have fired) if there were
12250 any errors, which unfortunately is not a behavior available from the standard
12251 DeferredList.
12252 
12253 
12254]
12255[more upload unit tests
12256warner@lothar.com**20061204064621]
12257[increase the maximum size of ShareData, since currently it is also a limit on uploaded file size
12258warner@lothar.com**20061204111431]
12259[only run a single (short) py_ecc test on slave3, since it is so slow the tests timeout
12260warner@allmydata.com**20070105064252]
12261[test_encode_share.py: fix some pyflakes warnings
12262warner@allmydata.com**20070106005322]
12263[add some (disabled) encoder benchmarking code
12264warner@allmydata.com**20070106004603]
12265[use the word 'codec' for erasure coding, for now. 'encode' is used for file-level segmentation/hashing
12266warner@allmydata.com**20070112025127]
12267[encoding: fix the last py_ecc problem, tests pass now
12268warner@allmydata.com**20070105060642]
12269[fix our use of py_ecc (set log2FieldSize=8 explicitly)
12270warner@allmydata.com**20070105055021]
12271[establish IEncoder/IDecoder, create suitable interfaces for both the simple replicating encoder and the py_ecc one, add a (failing) unit test for it
12272warner@allmydata.com**20070105035251]
12273[figleaf gets confused when the last line of a file is a comment
12274warner@allmydata.com**20061207205823]
12275[webish: improve download, now you can just append the vdrive path to the base URL to get at the contents of the file. Also added a download-by-URI box
12276warner@allmydata.com**20061207204837]
12277[webish: add mesh stats, peer list. improve distribution of client services within rend_* methods
12278warner@lothar.com**20061205015435]
12279[add mkdir to webish interface, switch to new bind_* approach
12280warner@lothar.com**20061205004924]
12281[allow webfront to use a strports port specification
12282warner@allmydata.com**20061207184740]
12283[add a basic read-only webfront test
12284warner@allmydata.com**20061207184806]
12285[change Encoder to use py_ecc, now that it works
12286warner@allmydata.com**20070106001245]
12287[more pyflakes cleanups
12288warner@allmydata.com**20070105000620]
12289[checkpointing new filetable work.. tests don't pass yet
12290warner@lothar.com**20061224183924]
12291[filetable: shuffle lines a bit to appease figleaf's confusion
12292warner@lothar.com**20061214103357]
12293[record some WIP structure for filetable
12294warner@allmydata.com**20061214023700]
12295[change encode_new to use IEncoder
12296warner@allmydata.com**20070105055135]
12297[filetable_new: import py_ecc, make the tests get a little bit further
12298warner@lothar.com**20070102054412]
12299[add padding to segments and convert type from string to list of integers before passing to py_ecc
12300"Zooko O'Whielacronx <zooko@zooko.com>"**20070104235814
12301 But then I get an error that I don't understand about ECC math...
12302 
12303]
12304[make encode_new use py_ecc for real live erasure coding
12305zooko@zooko.com**20061229195053
12306 (This patch is not tested -- I'm working on a Mac which doesn't have gcc
12307 installed...  (gcc is necessary for the crypto module.)  I will now attempt to
12308 connect to a better development computer over my mom's staticy, failure-prone,
12309 14.4 K modem...)
12310 
12311]
12312[encode_new: fix a bug in subshare hashes and tidy-up a couple of things
12313zooko@zooko.com**20061229184010]
12314[start work on new encoder, with merkle trees and subshares and stuff
12315warner@allmydata.com**20061214023235]
12316[import py_ecc, a pure python fec by Emin Martinian, which is under a permissive licence
12317zooko@zooko.com**20061229194645
12318 It is too slow for a real product, but is a quick way to get a working prototype, and also is freely redistributable by us...
12319]
12320[move all packages into src/, fix allmydata.Crypto build. Now you must perform a 'setup.py build' before using anything, and you must add the build directory (build/lib.linux-i686-2.4) to your PYTHONPATH before doing anything
12321warner@lothar.com**20061214093950]
12322[first cut at creating allmydata.Crypto, starting with python-amycrypto-2.0.1.allmydata2 (with working CTR mode)
12323warner@lothar.com**20061214092530]
12324[add bin/allmydata to create/stop/start nodes
12325warner@lothar.com**20061205182523]
12326[setup.py: oops, add sub-packages, needed since I went back to distutils
12327Brian Warner <warner@lothar.com>**20061206010622]
12328[add distutils-based packaging
12329warner@lothar.com**20061205072926]
12330[ignore .buildbot options directory
12331warner@lothar.com**20061204031049]
12332[import mathutil from pyutil
12333zooko@zooko.com**20061229195042]
12334[webish: add option to export/import shared directories (always read-write)
12335warner@lothar.com**20070615093123]
12336[webish: implement delete (for files only, not directories)
12337warner@lothar.com**20061205012738]
12338[add 'make directory' button to webish
12339warner@lothar.com**20061204180329]
12340[implemented upload side of webish
12341warner@lothar.com**20061204111536]
12342[add a (read-only) web frontend. Put a 'webport' file in your base directory to activate it.
12343warner@lothar.com**20061204100609]
12344[add download code to vdrive, add system-level test for vdrive functionality, refactor DownloadTargets
12345warner@lothar.com**20061204044219]
12346[unit tests for vdrive
12347warner@lothar.com**20061204031126]
12348[initial file-table support, VirtualDrive service, rearrange Storage somewhat
12349warner@lothar.com**20061204010741]
12350[added run-client2 target to makefile
12351robk@allmydata.com**20061201015119]
12352[added create_dirs makefile target to create initial dirs
12353robk@allmydata.com**20061130231606]
12354[create a Makefile to drive things
12355warner@lothar.com**20061130214005]
12356[fix pyflakes warnings/errors
12357warner@lothar.com**20061202222846]
12358[added 'debugshell' module a convenient dumping ground for tools for manhole environment
12359robk@allmydata.com**20061201015308]
12360[misc upload fixes and improvements
12361warner@lothar.com**20061203023143]
12362[add more logging
12363warner@lothar.com**20061203065353]
12364[avoid race conditions and multiple-notify in the Roster
12365warner@lothar.com**20061203022909]
12366[deal with the face that peerids are always binary in tests
12367warner@lothar.com**20061203023102]
12368[implement/test download, modify Storage to match
12369warner@lothar.com**20061203090143]
12370[added read and cross check to storage unit test, minor cleanups
12371robk@allmydata.com**20061201082111]
12372[split 'Bucket' into separate subclasses for read and write
12373robk@allmydata.com**20061201090454]
12374[allow buckets written by previous runs to be read
12375robk@allmydata.com**20061201084555]
12376[prevent reading unfinished buckets
12377robk@allmydata.com**20061201084827]
12378[rearrange names, add more RemoteInterfaces to make tests pass again
12379warner@lothar.com**20061202232557]
12380[prototype encoder
12381zooko@zooko.com**20061202233126]
12382[make the system test work
12383warner@lothar.com**20061203065627]
12384[improving system test, still broken, possibly a Foolscap problem
12385warner@lothar.com**20061203023208]
12386[rearrange node startup again, allowing Tub.registerReference to happen in startService rather than in some later turn. Also add a 'local_ip' file with which you can override the published IP address of the node
12387warner@lothar.com**20061203013731]
12388[rearrange client setup, factor out common Node functionality, add Uploader service to client
12389warner@lothar.com**20061203002718]
12390[point client.tac at yumyum's queen
12391warner@lothar.com**20061130231631]
12392[remove that queen_host stuff
12393warner@lothar.com**20061130231340]
12394[change manhole setup for queen too
12395warner@lothar.com**20061201013838]
12396[add Manhole to queen (port 8021), also change manhole namespace to just have 'app' (for both queen and client)
12397warner@lothar.com**20061130233045]
12398[fix up StorageServer so that unit tests will run again
12399warner@lothar.com**20061201021829]
12400[add Client.permute_peers
12401warner@lothar.com**20061201021851]
12402[change bucket writer protocol, give Encoder a RemoteReference instead of a file-like object
12403warner@lothar.com**20061202011726]
12404[upload: add WriterProxy
12405warner@lothar.com**20061201100611]
12406[standardize on keeping nodeids (and all other SHA1-derived values as binary everywhere, only doing idlib.b2a() when interacting with a human or the filesystem
12407warner@lothar.com**20061202222626]
12408[fix losing-client-connection handler
12409warner@lothar.com**20061201001346]
12410[set Client.nodeid to our (ascii, base32) tubid
12411warner@lothar.com**20061201012017]
12412[implement upload peer selection
12413warner@lothar.com**20061201085428]
12414[add Client.get_remote_service utility method
12415warner@lothar.com**20061201001736]
12416[improve RemoteInterface specifications
12417warner@lothar.com**20061202220309]
12418[added storage test
12419robk@allmydata.com**20061201043842]
12420[add RemoteInterfaces (foolscap schemas). some tests break.
12421warner@lothar.com**20061202011750]
12422[add roadmap
12423warner@lothar.com**20061130231619]
12424[rerecord all the storageserver patches in one go
12425robk@allmydata.com**20061201021423
12426   
12427 darcs was dying trying to deal with the conflict resolution patches.
12428       
12429 this adds a (very rough) bucketstore and storageserver.
12430 probably needs lots of work both in api and implementation.
12431 
12432]
12433[implement more Roster stuff: add_peer, lost_peer. Changed Client service registration scheme.
12434warner@lothar.com**20061201000957]
12435[start developing Roster, track all active peers
12436warner@lothar.com**20061130234315]
12437[help the queen have a persistent PBURL, have the client connect to it
12438warner@lothar.com**20061130223938]
12439[change manhole setup for client: create authorized_keys.8022 (or other portnum)
12440warner@lothar.com**20061201013425]
12441[add Manhole functionality to the client: port 8022, add an authorized_keys file to the client's basedir to enable it
12442warner@lothar.com**20061130232641]
12443[start on client what-is-my-ipaddress functionality
12444warner@lothar.com**20061130222339]
12445[create a stub Storage service, start work on publishing it
12446warner@lothar.com**20061130212952]
12447[add test infrastructure, use 'make test' to run it, please run before pushing
12448warner@lothar.com**20061130215526]
12449[have client running, no queen to connect to yet
12450warner@lothar.com**20061130212706]
12451[add darcs boringfile
12452warner@lothar.com**20061130213733]
12453[add beginning queen code
12454warner@lothar.com**20061130213924]
12455[beginnings of a system test, with 5 nodes and a queen
12456warner@lothar.com**20061203003018]
12457[webapi.txt: note that the 'curl' utility can be used to exercise most of this interface
12458warner@lothar.com**20070710173637]
12459[add webapi.txt: explain our plans for the node's webserver
12460warner@allmydata.com**20070705203603]
12461[NEWS: update to summarize all changes since the last update
12462warner@lothar.com**20081020164047]
12463[NEWS: more edits, almost done
12464warner@lothar.com**20080919010036]
12465[NEWS: finish editing for the upcoming 1.3.0 release
12466warner@lothar.com**20080919193053]
12467[NEWS: describe all changes since the last release. Still needs editing.
12468warner@lothar.com**20080919002755]
12469[NEWS: add user-visible changes since the previous release
12470warner@lothar.com**20080721232930]
12471[docs: NEWS: a couple of small edits
12472zooko@zooko.com**20080611195140]
12473[NEWS: description of user-visible changes in the new release
12474warner@allmydata.com**20080611193935]
12475[docs: add a copy of the NEWS file into docs/ since I sent out a release announcement which links to it there
12476zooko@zooko.com**20080612024150]
12477[docs: add statement on our refusal to insert backdoors
12478zooko@zooko.com**20101006051147
12479 Ignore-this: 644d308319a7b80c4434bdff9760404a
12480]
12481[add the 'Denver Airport' design doc, for Chord-based peer selection
12482warner@lothar.com**20061202010914]
12483[actually add tests
12484warner@lothar.com**20061130222301]
12485[start client framework
12486warner@lothar.com**20061130211447]
12487Patch bundle hash:
124885953c6bfe7ed2f5971a54a57bbba2e17660a14ab