Ticket #1076: nfc-normalization.dpatch

File nfc-normalization.dpatch, 66.7 KB (added by davidsarah, at 2010-06-16T03:29:12Z)

Provisional patch to NFC-normalize filenames going in and out of Tahoe directories.

Line 
1Wed Jun 16 04:14:50 GMT Daylight Time 2010  david-sarah@jacaranda.org
2  * Provisional patch to NFC-normalize filenames going in and out of Tahoe directories.
3
4New patches:
5
6[Provisional patch to NFC-normalize filenames going in and out of Tahoe directories.
7david-sarah@jacaranda.org**20100616031450
8 Ignore-this: ed08c9d8df37ef0b7cca42bb562c996b
9] {
10hunk ./src/allmydata/dirnode.py 2
11 
12-import time, math
13+import time, math, unicodedata
14 
15 from zope.interface import implements
16 from twisted.internet import defer
17hunk ./src/allmydata/dirnode.py 19
18      DeepCheckAndRepairResults
19 from allmydata.monitor import Monitor
20 from allmydata.util import hashutil, mathutil, base32, log
21+from allmydata.util.stringutils import quote_output
22 from allmydata.util.assertutil import precondition
23 from allmydata.util.netstring import netstring, split_netstring
24 from allmydata.util.consumer import download_to_data
25hunk ./src/allmydata/dirnode.py 79
26 
27     return metadata
28 
29+def normalize(namex):
30+    return unicodedata.normalize('NFC', namex)
31 
32 # TODO: {Deleter,MetadataSetter,Adder}.modify all start by unpacking the
33 # contents and end by repacking them. It might be better to apply them to
34hunk ./src/allmydata/dirnode.py 87
35 # the unpacked contents.
36 
37 class Deleter:
38-    def __init__(self, node, name, must_exist=True, must_be_directory=False, must_be_file=False):
39+    def __init__(self, node, namex, must_exist=True, must_be_directory=False, must_be_file=False):
40         self.node = node
41hunk ./src/allmydata/dirnode.py 89
42-        self.name = name
43+        self.name = normalize(namex)
44         self.must_exist = must_exist
45         self.must_be_directory = must_be_directory
46         self.must_be_file = must_be_file
47hunk ./src/allmydata/dirnode.py 115
48 
49 
50 class MetadataSetter:
51-    def __init__(self, node, name, metadata, create_readonly_node=None):
52+    def __init__(self, node, namex, metadata, create_readonly_node=None):
53         self.node = node
54hunk ./src/allmydata/dirnode.py 117
55-        self.name = name
56+        self.name = normalize(namex)
57         self.metadata = metadata
58         self.create_readonly_node = create_readonly_node
59 
60hunk ./src/allmydata/dirnode.py 145
61         if entries is None:
62             entries = {}
63         precondition(isinstance(entries, dict), entries)
64+        # keys of 'entries' may not be normalized.
65         self.entries = entries
66         self.overwrite = overwrite
67         self.create_readonly_node = create_readonly_node
68hunk ./src/allmydata/dirnode.py 150
69 
70-    def set_node(self, name, node, metadata):
71-        precondition(isinstance(name, unicode), name)
72+    def set_node(self, namex, node, metadata):
73         precondition(IFilesystemNode.providedBy(node), node)
74hunk ./src/allmydata/dirnode.py 152
75-        self.entries[name] = (node, metadata)
76+        self.entries[namex] = (node, metadata)
77 
78     def modify(self, old_contents, servermap, first_time):
79         children = self.node._unpack_contents(old_contents)
80hunk ./src/allmydata/dirnode.py 157
81         now = time.time()
82-        for (name, (child, new_metadata)) in self.entries.iteritems():
83-            precondition(isinstance(name, unicode), name)
84+        for (namex, (child, new_metadata)) in self.entries.iteritems():
85+            name = normalize(namex)
86             precondition(IFilesystemNode.providedBy(child), child)
87 
88             # Strictly speaking this is redundant because we would raise the
89hunk ./src/allmydata/dirnode.py 168
90             metadata = None
91             if name in children:
92                 if not self.overwrite:
93-                    raise ExistingChildError("child '%s' already exists" % name)
94+                    raise ExistingChildError("child %s already exists" % quote_output(name, encoding='utf-8'))
95 
96                 if self.overwrite == "only-files" and IDirectoryNode.providedBy(children[name][0]):
97hunk ./src/allmydata/dirnode.py 171
98-                    raise ExistingChildError("child '%s' already exists" % name)
99+                    raise ExistingChildError("child %s already exists" % quote_output(name, encoding='utf-8'))
100                 metadata = children[name][1].copy()
101 
102             metadata = update_metadata(metadata, new_metadata, now)
103hunk ./src/allmydata/dirnode.py 182
104         new_contents = self.node._pack_contents(children)
105         return new_contents
106 
107+
108 def _encrypt_rw_uri(filenode, rw_uri):
109     assert isinstance(rw_uri, str)
110     writekey = filenode.get_writekey()
111hunk ./src/allmydata/dirnode.py 219
112         (child, metadata) = children[name]
113         child.raise_error()
114         if deep_immutable and not child.is_allowed_in_immutable_directory():
115-            raise MustBeDeepImmutableError("child '%s' is not allowed in an immutable directory" % (name,), name)
116+            raise MustBeDeepImmutableError("child %s is not allowed in an immutable directory" %
117+                                           quote_output(name, encoding='utf-8'), name)
118         if has_aux:
119             entry = children.get_aux(name)
120         if not entry:
121hunk ./src/allmydata/dirnode.py 292
122         return plaintext
123 
124     def _create_and_validate_node(self, rw_uri, ro_uri, name):
125+        # name is just for error reporting
126         node = self._nodemaker.create_from_cap(rw_uri, ro_uri,
127                                                deep_immutable=not self.is_mutable(),
128                                                name=name)
129hunk ./src/allmydata/dirnode.py 300
130         return node
131 
132     def _create_readonly_node(self, node, name):
133+        # name is just for error reporting
134         if not node.is_unknown() and node.is_readonly():
135             return node
136         return self._create_and_validate_node(None, node.get_readonly_uri(), name=name)
137hunk ./src/allmydata/dirnode.py 309
138         # the directory is serialized as a list of netstrings, one per child.
139         # Each child is serialized as a list of four netstrings: (name, ro_uri,
140         # rwcapdata, metadata), in which the name, ro_uri, metadata are in
141-        # cleartext. The 'name' is UTF-8 encoded. The rwcapdata is formatted as:
142+        # cleartext. The 'name' is UTF-8 encoded, and should be normalized to NFC.
143+        # The rwcapdata is formatted as:
144         # pack("16ss32s", iv, AES(H(writekey+iv), plaintext_rw_uri), mac)
145         assert isinstance(data, str), (repr(data), type(data))
146         # an empty directory is serialized as an empty string
147hunk ./src/allmydata/dirnode.py 323
148         while position < len(data):
149             entries, position = split_netstring(data, 1, position)
150             entry = entries[0]
151-            (name_utf8, ro_uri, rwcapdata, metadata_s), subpos = split_netstring(entry, 4)
152+            (namex_utf8, ro_uri, rwcapdata, metadata_s), subpos = split_netstring(entry, 4)
153             if not mutable and len(rwcapdata) > 0:
154                 raise ValueError("the rwcapdata field of a dirnode in an immutable directory was not empty")
155hunk ./src/allmydata/dirnode.py 326
156-            name = name_utf8.decode("utf-8")
157+
158+            # A name containing characters that are unassigned in one version of Unicode might
159+            # not be normalized wrt a later version. Therefore we normalize names going both in
160+            # and out of directories.
161+            name = normalize(namex_utf8.decode("utf-8"))
162+
163             rw_uri = ""
164             if writeable:
165                 rw_uri = self._decrypt_rwcapdata(rwcapdata)
166hunk ./src/allmydata/dirnode.py 354
167                     children[name] = (child, metadata)
168                     children.set_with_aux(name, (child, metadata), auxilliary=entry)
169                 else:
170-                    log.msg(format="mutable cap for child '%(name)s' unpacked from an immutable directory",
171-                                   name=name_utf8,
172+                    log.msg(format="mutable cap for child %(name)s unpacked from an immutable directory",
173+                                   name=quote_output(name, encoding='utf-8'),
174                                    facility="tahoe.webish", level=log.UNUSUAL)
175             except CapConstraintError, e:
176hunk ./src/allmydata/dirnode.py 358
177-                log.msg(format="unmet constraint on cap for child '%(name)s' unpacked from a directory:\n"
178-                               "%(message)s", message=e.args[0], name=name_utf8,
179+                log.msg(format="unmet constraint on cap for child %(name)s unpacked from a directory:\n"
180+                               "%(message)s", message=e.args[0], name=quote_output(name, encoding='utf-8'),
181                                facility="tahoe.webish", level=log.UNUSUAL)
182 
183         return children
184hunk ./src/allmydata/dirnode.py 422
185         name to a tuple of (IFilesystemNode, metadata)."""
186         return self._read()
187 
188-    def has_child(self, name):
189+    def has_child(self, namex):
190         """I return a Deferred that fires with a boolean, True if there
191         exists a child of the given name, False if not."""
192hunk ./src/allmydata/dirnode.py 425
193-        assert isinstance(name, unicode)
194+        name = normalize(namex)
195         d = self._read()
196         d.addCallback(lambda children: children.has_key(name))
197         return d
198hunk ./src/allmydata/dirnode.py 442
199             raise NoSuchChildError(name)
200         return child
201 
202-    def get(self, name):
203+    def get(self, namex):
204         """I return a Deferred that fires with the named child node,
205         which is an IFilesystemNode."""
206hunk ./src/allmydata/dirnode.py 445
207-        assert isinstance(name, unicode)
208+        name = normalize(namex)
209         d = self._read()
210         d.addCallback(self._get, name)
211         return d
212hunk ./src/allmydata/dirnode.py 450
213 
214-    def get_child_and_metadata(self, name):
215+    def get_child_and_metadata(self, namex):
216         """I return a Deferred that fires with the (node, metadata) pair for
217         the named child. The node is an IFilesystemNode, and the metadata
218         is a dictionary."""
219hunk ./src/allmydata/dirnode.py 454
220-        assert isinstance(name, unicode)
221+        name = normalize(namex)
222         d = self._read()
223         d.addCallback(self._get_with_metadata, name)
224         return d
225hunk ./src/allmydata/dirnode.py 459
226 
227-    def get_metadata_for(self, name):
228-        assert isinstance(name, unicode)
229+    def get_metadata_for(self, namex):
230+        name = normalize(namex)
231         d = self._read()
232         d.addCallback(lambda children: children[name][1])
233         return d
234hunk ./src/allmydata/dirnode.py 465
235 
236-    def set_metadata_for(self, name, metadata):
237-        assert isinstance(name, unicode)
238+    def set_metadata_for(self, namex, metadata):
239+        name = normalize(namex)
240         if self.is_readonly():
241             return defer.fail(NotWriteableError())
242         assert isinstance(metadata, dict)
243hunk ./src/allmydata/dirnode.py 476
244         d.addCallback(lambda res: self)
245         return d
246 
247-    def get_child_at_path(self, path):
248+    def get_child_at_path(self, pathx):
249         """Transform a child path into an IFilesystemNode.
250 
251         I perform a recursive series of 'get' operations to find the named
252hunk ./src/allmydata/dirnode.py 486
253         The path can be either a single string (slash-separated) or a list of
254         path-name elements.
255         """
256-        d = self.get_child_and_metadata_at_path(path)
257+        d = self.get_child_and_metadata_at_path(pathx)
258         d.addCallback(lambda (node, metadata): node)
259         return d
260 
261hunk ./src/allmydata/dirnode.py 490
262-    def get_child_and_metadata_at_path(self, path):
263+    def get_child_and_metadata_at_path(self, pathx):
264         """Transform a child path into an IFilesystemNode and
265         a metadata dictionary from the last edge that was traversed.
266         """
267hunk ./src/allmydata/dirnode.py 495
268 
269-        if not path:
270+        if not pathx:
271             return defer.succeed((self, {}))
272hunk ./src/allmydata/dirnode.py 497
273-        if isinstance(path, (list, tuple)):
274+        if isinstance(pathx, (list, tuple)):
275             pass
276         else:
277hunk ./src/allmydata/dirnode.py 500
278-            path = path.split("/")
279-        for p in path:
280-            assert isinstance(p, unicode)
281-        childname = path[0]
282-        remaining_path = path[1:]
283-        if remaining_path:
284-            d = self.get(childname)
285+            pathx = pathx.split("/")
286+        for p in pathx:
287+            assert isinstance(p, unicode), p
288+        childnamex = pathx[0]
289+        remaining_pathx = pathx[1:]
290+        if remaining_pathx:
291+            d = self.get(childnamex)
292             d.addCallback(lambda node:
293hunk ./src/allmydata/dirnode.py 508
294-                          node.get_child_and_metadata_at_path(remaining_path))
295+                          node.get_child_and_metadata_at_path(remaining_pathx))
296             return d
297hunk ./src/allmydata/dirnode.py 510
298-        d = self.get_child_and_metadata(childname)
299+        d = self.get_child_and_metadata(childnamex)
300         return d
301 
302hunk ./src/allmydata/dirnode.py 513
303-    def set_uri(self, name, writecap, readcap, metadata=None, overwrite=True):
304-        precondition(isinstance(name, unicode), name)
305+    def set_uri(self, namex, writecap, readcap, metadata=None, overwrite=True):
306         precondition(isinstance(writecap, (str,type(None))), writecap)
307         precondition(isinstance(readcap, (str,type(None))), readcap)
308 
309hunk ./src/allmydata/dirnode.py 519
310         # We now allow packing unknown nodes, provided they are valid
311         # for this type of directory.
312-        child_node = self._create_and_validate_node(writecap, readcap, name)
313-        d = self.set_node(name, child_node, metadata, overwrite)
314+        child_node = self._create_and_validate_node(writecap, readcap, namex)
315+        d = self.set_node(namex, child_node, metadata, overwrite)
316         d.addCallback(lambda res: child_node)
317         return d
318 
319hunk ./src/allmydata/dirnode.py 528
320         # this takes URIs
321         a = Adder(self, overwrite=overwrite,
322                   create_readonly_node=self._create_readonly_node)
323-        for (name, e) in entries.iteritems():
324-            assert isinstance(name, unicode)
325+        for (namex, e) in entries.iteritems():
326+            assert isinstance(namex, unicode), namex
327             if len(e) == 2:
328                 writecap, readcap = e
329                 metadata = None
330hunk ./src/allmydata/dirnode.py 541
331             
332             # We now allow packing unknown nodes, provided they are valid
333             # for this type of directory.
334-            child_node = self._create_and_validate_node(writecap, readcap, name)
335-            a.set_node(name, child_node, metadata)
336+            child_node = self._create_and_validate_node(writecap, readcap, namex)
337+            a.set_node(namex, child_node, metadata)
338         d = self._node.modify(a.modify)
339         d.addCallback(lambda ign: self)
340         return d
341hunk ./src/allmydata/dirnode.py 547
342 
343-    def set_node(self, name, child, metadata=None, overwrite=True):
344+    def set_node(self, namex, child, metadata=None, overwrite=True):
345         """I add a child at the specific name. I return a Deferred that fires
346         when the operation finishes. This Deferred will fire with the child
347         node that was just added. I will replace any existing child of the
348hunk ./src/allmydata/dirnode.py 560
349 
350         if self.is_readonly():
351             return defer.fail(NotWriteableError())
352-        assert isinstance(name, unicode)
353         assert IFilesystemNode.providedBy(child), child
354         a = Adder(self, overwrite=overwrite,
355                   create_readonly_node=self._create_readonly_node)
356hunk ./src/allmydata/dirnode.py 563
357-        a.set_node(name, child, metadata)
358+        a.set_node(namex, child, metadata)
359         d = self._node.modify(a.modify)
360         d.addCallback(lambda res: child)
361         return d
362hunk ./src/allmydata/dirnode.py 579
363         return d
364 
365 
366-    def add_file(self, name, uploadable, metadata=None, overwrite=True):
367+    def add_file(self, namex, uploadable, metadata=None, overwrite=True):
368         """I upload a file (using the given IUploadable), then attach the
369         resulting FileNode to the directory at the given name. I return a
370         Deferred that fires (with the IFileNode of the uploaded file) when
371hunk ./src/allmydata/dirnode.py 584
372         the operation completes."""
373-        assert isinstance(name, unicode)
374+        name = normalize(namex)
375         if self.is_readonly():
376             return defer.fail(NotWriteableError())
377         d = self._uploader.upload(uploadable)
378hunk ./src/allmydata/dirnode.py 594
379                       self.set_node(name, node, metadata, overwrite))
380         return d
381 
382-    def delete(self, name, must_exist=True, must_be_directory=False, must_be_file=False):
383+    def delete(self, namex, must_exist=True, must_be_directory=False, must_be_file=False):
384         """I remove the child at the specific name. I return a Deferred that
385         fires (with the node just removed) when the operation finishes."""
386hunk ./src/allmydata/dirnode.py 597
387-        assert isinstance(name, unicode)
388         if self.is_readonly():
389             return defer.fail(NotWriteableError())
390hunk ./src/allmydata/dirnode.py 599
391-        deleter = Deleter(self, name, must_exist=must_exist,
392+        deleter = Deleter(self, namex, must_exist=must_exist,
393                           must_be_directory=must_be_directory, must_be_file=must_be_file)
394         d = self._node.modify(deleter.modify)
395         d.addCallback(lambda res: deleter.old_child)
396hunk ./src/allmydata/dirnode.py 605
397         return d
398 
399-    def create_subdirectory(self, name, initial_children={}, overwrite=True,
400+    def create_subdirectory(self, namex, initial_children={}, overwrite=True,
401                             mutable=True, metadata=None):
402hunk ./src/allmydata/dirnode.py 607
403-        assert isinstance(name, unicode)
404+        name = normalize(namex)
405         if self.is_readonly():
406             return defer.fail(NotWriteableError())
407         if mutable:
408hunk ./src/allmydata/dirnode.py 624
409         d.addCallback(_created)
410         return d
411 
412-    def move_child_to(self, current_child_name, new_parent,
413-                      new_child_name=None, overwrite=True):
414+    def move_child_to(self, current_child_namex, new_parent,
415+                      new_child_namex=None, overwrite=True):
416         """I take one of my children and move them to a new parent. The child
417         is referenced by name. On the new parent, the child will live under
418         'new_child_name', which defaults to 'current_child_name'. I return a
419hunk ./src/allmydata/dirnode.py 630
420         Deferred that fires when the operation finishes."""
421-        assert isinstance(current_child_name, unicode)
422+
423         if self.is_readonly() or new_parent.is_readonly():
424             return defer.fail(NotWriteableError())
425hunk ./src/allmydata/dirnode.py 633
426-        if new_child_name is None:
427-            new_child_name = current_child_name
428-        assert isinstance(new_child_name, unicode)
429+
430+        current_child_name = normalize(current_child_namex)
431+        if new_child_namex is None:
432+            new_child_namex = current_child_name
433         d = self.get(current_child_name)
434         def sn(child):
435hunk ./src/allmydata/dirnode.py 639
436-            return new_parent.set_node(new_child_name, child,
437+            return new_parent.set_node(new_child_namex, child,
438                                        overwrite=overwrite)
439         d.addCallback(sn)
440         d.addCallback(lambda child: self.delete(current_child_name))
441}
442
443Context:
444
445[test_system.py: investigate failure in allmydata.test.test_system.SystemTest.test_upload_and_download_random_key due to bytes_sent not being an int
446david-sarah@jacaranda.org**20100616001648
447 Ignore-this: 9c78092ab7bfdc909acae3a144ddd1f8
448] 
449[SFTP: remove a dubious use of 'pragma: no cover'.
450david-sarah@jacaranda.org**20100613164356
451 Ignore-this: 8f96a81b1196017ed6cfa1d914e56fa5
452] 
453[SFTP: test that renaming onto a just-opened file fails.
454david-sarah@jacaranda.org**20100612033709
455 Ignore-this: 9b14147ad78b16a5ab0e0e4813491414
456] 
457[SFTP: further small improvements to test coverage. Also ensure that after a test failure, later tests don't fail spuriously due to the checks for heisenfile leaks.
458david-sarah@jacaranda.org**20100612030737
459 Ignore-this: 4ec1dd3d7542be42007987a2f51508e7
460] 
461[SFTP: further improve test coverage (paths containing '.', bad data for posix-rename extension, and error in test of openShell).
462david-sarah@jacaranda.org**20100611213142
463 Ignore-this: 956f9df7f9e8a66b506ca58dd9a5dbe7
464] 
465[SFTP: improve test coverage for no-write on mutable files, and check for heisenfile table leaks in all relevant tests. Delete test_memory_leak since it is now redundant.
466david-sarah@jacaranda.org**20100611205752
467 Ignore-this: 88be1cf323c10dd534a4b8fdac121e31
468] 
469[SFTP: add test for extension of file opened with FXF_APPEND.
470david-sarah@jacaranda.org**20100610182647
471 Ignore-this: c0216d26453ce3cb4b92eef37d218fb4
472] 
473[NEWS: add UTF-8 coding declaration.
474david-sarah@jacaranda.org**20100609234851
475 Ignore-this: 3e6ef125b278e0a982c88d23180a78ae
476] 
477[tests: bump up the timeout on this iputil test from 2s to 4s
478zooko@zooko.com**20100609143017
479 Ignore-this: 786b7f7bbc85d45cdf727a6293750798
480] 
481[docs: a few tweaks to NEWS and CREDITS and make quickstart.html point to 1.7.0β!
482zooko@zooko.com**20100609142927
483 Ignore-this: f8097d3062f41f06c4420a7c84a56481
484] 
485[docs: Update NEWS file with new features and bugfixes in 1.7.0
486francois@ctrlaltdel.ch**20100609091120
487 Ignore-this: 8c1014e4469ef530e5ff48d7d6ae71c5
488] 
489[docs: wording fix, thanks to Jeremy Visser, fix #987
490francois@ctrlaltdel.ch**20100609081103
491 Ignore-this: 6d2e627e0f1cd58c0e1394e193287a4b
492] 
493[SFTP: fix most significant memory leak described in #1045 (due to a file being added to all_heisenfiles under more than one direntry when renamed).
494david-sarah@jacaranda.org**20100609080003
495 Ignore-this: 490b4c14207f6725d0dd32c395fbcefa
496] 
497[test_stringutils.py: Fix test failure on CentOS builder, possibly Python 2.4.3-related.
498david-sarah@jacaranda.org**20100609065056
499 Ignore-this: 503b561b213baf1b92ae641f2fdf080a
500] 
501[docs: update relnote.txt for Tahoe-LAFS v1.7.0β
502zooko@zooko.com**20100609054602
503 Ignore-this: 52e1bf86a91d45315960fb8806b7a479
504] 
505[setup: move the mock library from install_requires to tests_require (re: #1016)
506zooko@zooko.com**20100609050542
507 Ignore-this: c51a4ff3e19ed630755be752d2233db4
508] 
509[setup: show-tool-versions.py: print out the output from the unix command "locale" and re-arrange encoding data a little bit
510zooko@zooko.com**20100609040714
511 Ignore-this: 69382719b462d13ff940fcd980776004
512] 
513[setup: add zope.interface to the packages described by show-tool-versions.py
514zooko@zooko.com**20100609034915
515 Ignore-this: b5262b2af5c953a5f68a60bd48dcaa75
516] 
517[Fix for Unicode-related test failures on Zooko's OS X 10.6 machine.
518david-sarah@jacaranda.org**20100609055448
519 Ignore-this: 395ad16429e56623edfa74457a121190
520] 
521[stringutils.py, sftpd.py: Portability fixes for Python <= 2.5.
522david-sarah@jacaranda.org**20100609013302
523 Ignore-this: 9d9ce476ee1b96796e0f48cc5338f852
524] 
525[_auto_deps.py: allow Python 2.4.3 on Redhat-based distributions.
526david-sarah@jacaranda.org**20100609003646
527 Ignore-this: ad3cafdff200caf963024873d0ebff3c
528] 
529[CREDITS: update François's Description
530zooko@zooko.com**20100608155513
531 Ignore-this: a266b438d25ca2cb28eafff75aa4b2a
532] 
533[CREDITS: jsgf
534zooko@zooko.com**20100608143052
535 Ignore-this: 10abe06d40b88e22a9107d30f1b84810
536] 
537[setup: rename the setuptools_trial .egg that comes bundled in the base dir to not have "-py2.6" in its name, since it works with other versions of python as well
538zooko@zooko.com**20100608041607
539 Ignore-this: 64fe386d2e5fba0ab441116e74dad5a3
540] 
541[setup: rename the darcsver .egg that comes bundled in the base dir to not have "-py2.6" in its name, since it works with other versions of python as well
542zooko@zooko.com**20100608041534
543 Ignore-this: 53f925f160256409cf01b76d2583f83f
544] 
545[Back out Windows-specific Unicode argument support for v1.7.
546david-sarah@jacaranda.org**20100609000803
547 Ignore-this: b230ffe6fdaf9a0d85dfe745b37b42fb
548] 
549[SFTP: suppress NoSuchChildError if heisenfile attributes have been updated in setAttrs, in the case where the parent is available.
550david-sarah@jacaranda.org**20100608063753
551 Ignore-this: 8c72a5a9c15934f8fe4594ba3ee50ddd
552] 
553[SFTP: ignore permissions when opening a file (needed for sshfs interoperability).
554david-sarah@jacaranda.org**20100608055700
555 Ignore-this: f87f6a430f629326a324ddd94426c797
556] 
557[tests: bump up the timeout on these tests; MM's buildslave is sometimes extremely slow on tests, but it will complete them if given enough time. MM is working on making that buildslave more predictable in how long it takes to run tests.
558zooko@zooko.com**20100608033754
559 Ignore-this: 98dc27692c5ace1e4b0650b6680629d7
560] 
561[test_web.py: fix pyflakes warnings introduced by byterange patch.
562david-sarah@jacaranda.org**20100608042012
563 Ignore-this: a7612724893b51d1154dec4372e0508
564] 
565[Improve HTTP/1.1 byterange handling
566Jeremy Fitzhardinge <jeremy@goop.org>**20100310025913
567 Ignore-this: 6d69e694973d618f0dc65983735cd9be
568 
569 Fix parsing of a Range: header to support:
570  - multiple ranges (parsed, but not returned)
571  - suffix byte ranges ("-2139")
572  - correct handling of incorrectly formatted range headers
573    (correct behaviour is to ignore the header and return the full
574     file)
575  - return appropriate error for ranges outside the file
576 
577 Multiple ranges are parsed, but only the first range is returned.
578 Returning multiple ranges requires using the multipart/byterange
579 content type.
580 
581] 
582[test_cli.py: remove invalid 'test_listdir_unicode_bad' test.
583david-sarah@jacaranda.org**20100607183730
584 Ignore-this: fadfe87980dc1862f349bfcc21b2145f
585] 
586[check_memory.py: adapt to servers-of-happiness changes.
587david-sarah@jacaranda.org**20100608013528
588 Ignore-this: c6b28411c543d1aea2f148a955f7998
589] 
590[show-tool-versions.py: platform.linux_distribution() is not always available
591david-sarah@jacaranda.org**20100608004523
592 Ignore-this: 793fb4050086723af05d06bed8b1b92a
593] 
594[show-tool-versions.py: show platform.linux_distribution()
595david-sarah@jacaranda.org**20100608003829
596 Ignore-this: 81cb5e5fc6324044f0fc6d82903c8223
597] 
598[Remove the 'tahoe debug consolidate' subcommand.
599david-sarah@jacaranda.org**20100607183757
600 Ignore-this: 4b14daa3ae557cea07d6e119d25dafe9
601] 
602[tests: drastically increase timeout of this very time-consuming test in honor of François's ARM box
603zooko@zooko.com**20100607115929
604 Ignore-this: bf1bb52ffb6b5ccae71d4dde14621bc8
605] 
606[setup: update authorship, datestamp, licensing, and add special exceptions to allow combination with Eclipse- and QPL- licensed code
607zooko@zooko.com**20100607062329
608 Ignore-this: 5a1d7b12dfafd61283ea65a245416381
609] 
610[common_http.py, tahoe_cp.py: Fix an error in calling the superclass constructor in HTTPError and MissingSourceError (introduced by the Unicode fixes).
611david-sarah@jacaranda.org**20100607174714
612 Ignore-this: 1a118d593d81c918a4717c887f033aec
613] 
614[FTP-and-SFTP.txt: minor technical correction to doc for 'no-write' flag.
615david-sarah@jacaranda.org**20100607061600
616 Ignore-this: 66aee0c1b6c00538602d08631225e114
617] 
618[test_stringutils.py: trivial error in exception message for skipped test.
619david-sarah@jacaranda.org**20100607061455
620 Ignore-this: f261a5d4e2b8fe3bcc37e02539ba1ae2
621] 
622[setup: organize misc/ scripts and tools and remove obsolete ones
623zooko@zooko.com**20100607051618
624 Ignore-this: 161db1158c6b7be8365b0b3dee2e0b28
625 This is for ticket #1068.
626] 
627[More Unicode test fixes.
628david-sarah@jacaranda.org**20100607053358
629 Ignore-this: 6a271fb77c31f28cb7bdba63b26a2dd2
630] 
631[Unicode fixes for platforms with non-native-Unicode filesystems.
632david-sarah@jacaranda.org**20100607043238
633 Ignore-this: 2134dc1793c4f8e50350bd749c4c98c2
634] 
635[Unicode fixes.
636david-sarah@jacaranda.org**20100607010215
637 Ignore-this: d58727b5cd2ce00e6b6dae3166030138
638] 
639[quickstart.html: link to snapshots page, sorted with most recent first.
640david-sarah@jacaranda.org**20100606221127
641 Ignore-this: 93ea7e6ee47acc66f6daac9cabffed2d
642] 
643[setup: loosen the Desert Island test to allow it to check the network for new packages as long as it doesn't actually download any
644zooko@zooko.com**20100606175717
645 Ignore-this: e438a8eb3c1b0e68080711ec6ff93ffa
646 (You can look but don't touch.)
647] 
648[setup: have the buildbots print out locale.getpreferredencoding(), locale.getdefaultlocale(), locale.getlocale(), and os.path.supports_unicode_filenames
649zooko@zooko.com**20100605162932
650 Ignore-this: 85e31e0e0e1364e9215420e272d58116
651 Even though that latter one is completely useless, I'm curious.
652] 
653[quickstart.html: We haven't released 1.7beta yet.
654david-sarah@jacaranda.org**20100606220301
655 Ignore-this: 4e18898cfdb08cc3ddd1ff94d43fdda7
656] 
657[Raise Python version requirement to 2.4.4 for non-UCS-2 builds, to avoid a critical Python security bug.
658david-sarah@jacaranda.org**20100605031713
659 Ignore-this: 2df2b6d620c5d8191c79eefe655059e2
660] 
661[unicode tests: fix missing import
662zooko@zooko.com**20100604142630
663 Ignore-this: db437fe8009971882aaea9de05e2bc3
664] 
665[unicode: make test_cli test a non-ascii argument, and make the fallback term encoding be locale.getpreferredencoding()
666zooko@zooko.com**20100604141251
667 Ignore-this: b2bfc07942f69141811e59891842bd8c
668] 
669[unicode: always decode json manifest as utf-8 then encode for stdout
670zooko@zooko.com**20100604084840
671 Ignore-this: ac481692315fae870a0f3562bd7db48e
672 pyflakes pointed out that the exception handler fallback called an un-imported function, showing that the fallback wasn't being exercised.
673 I'm not 100% sure that this patch is right and would appreciate François or someone reviewing it.
674] 
675[fix flakes
676zooko@zooko.com**20100604075845
677 Ignore-this: 3e6a84b78771b0ad519e771a13605f0
678] 
679[fix syntax of assertion handling that isn't portable to older versions of Python
680zooko@zooko.com**20100604075805
681 Ignore-this: 3a12b293aad25883fb17230266eb04ec
682] 
683[test_stringutils.py: Skip test test_listdir_unicode_good if filesystem supports only ASCII filenames
684Francois Deppierraz <francois@ctrlaltdel.ch>**20100521160839
685 Ignore-this: f2ccdbd04c8d9f42f1efb0eb80018257
686] 
687[test_stringutils.py: Skip test_listdir_unicode on mocked platform which cannot store non-ASCII filenames
688Francois Deppierraz <francois@ctrlaltdel.ch>**20100521160559
689 Ignore-this: b93fde736a8904712b506e799250a600
690] 
691[test_stringutils.py: Add a test class for OpenBSD 4.1 with LANG=C
692Francois Deppierraz <francois@ctrlaltdel.ch>**20100521140053
693 Ignore-this: 63f568aec259cef0e807752fc8150b73
694] 
695[test_stringutils.py: Mock the open() call in test_open_unicode
696Francois Deppierraz <francois@ctrlaltdel.ch>**20100521135817
697 Ignore-this: d8be4e56a6eefe7d60f97f01ea20ac67
698 
699 This test ensure that open(a_unicode_string) is used on Unicode platforms
700 (Windows or MacOS X) and that open(a_correctly_encoded_bytestring) on other
701 platforms such as Unix.
702 
703] 
704[test_stringutils.py: Fix a trivial Python 2.4 syntax incompatibility
705Francois Deppierraz <francois@ctrlaltdel.ch>**20100521093345
706 Ignore-this: 9297e3d14a0dd37d0c1a4c6954fd59d3
707] 
708[test_cli.py: Fix tests when sys.stdout.encoding=None and refactor this code into functions
709Francois Deppierraz <francois@ctrlaltdel.ch>**20100520084447
710 Ignore-this: cf2286e225aaa4d7b1927c78c901477f
711] 
712[Fix handling of correctly encoded unicode filenames (#534)
713Francois Deppierraz <francois@ctrlaltdel.ch>**20100520004356
714 Ignore-this: 8a3a7df214a855f5a12dc0eeab6f2e39
715 
716 Tahoe CLI commands working on local files, for instance 'tahoe cp' or 'tahoe
717 backup', have been improved to correctly handle filenames containing non-ASCII
718 characters.
719   
720 In the case where Tahoe encounters a filename which cannot be decoded using the
721 system encoding, an error will be returned and the operation will fail.  Under
722 Linux, this typically happens when the filesystem contains filenames encoded
723 with another encoding, for instance latin1, than the system locale, for
724 instance UTF-8.  In such case, you'll need to fix your system with tools such
725 as 'convmv' before using Tahoe CLI.
726   
727 All CLI commands have been improved to support non-ASCII parameters such as
728 filenames and aliases on all supported Operating Systems except Windows as of
729 now.
730] 
731[stringutils.py: Unicode helper functions + associated tests
732Francois Deppierraz <francois@ctrlaltdel.ch>**20100520004105
733 Ignore-this: 7a73fc31de2fd39d437d6abd278bfa9a
734 
735 This file contains a bunch of helper functions which converts
736 unicode string from and to argv, filenames and stdout.
737] 
738[Add dependency on Michael Foord's mock library
739Francois Deppierraz <francois@ctrlaltdel.ch>**20100519233325
740 Ignore-this: 9bb01bf1e4780f6b98ed394c3b772a80
741] 
742[setup: adjust make clean target to ignore our bundled build tools
743zooko@zooko.com**20100604051250
744 Ignore-this: d24d2a3b849000790cfbfab69237454e
745] 
746[setup: bundle a copy of setuptools_trial as an unzipped egg in the base dir of the Tahoe-LAFS source tree
747zooko@zooko.com**20100604044648
748 Ignore-this: a4736e9812b4dab2d5a2bc4bfc5c3b28
749 This is to work-around this Distribute issue:
750 http://bitbucket.org/tarek/distribute/issue/55/revision-control-plugin-automatically-installed-as-a-build-dependency-is-not-present-when-another-build-dependency-is-being
751] 
752[setup: bundle a copy of darcsver in unzipped egg form in the root of the Tahoe-LAFS source tree
753zooko@zooko.com**20100604044146
754 Ignore-this: a51a52e82dd3a39225657ffa27decae2
755 This is to work-around this Distribute issue:
756 http://bitbucket.org/tarek/distribute/issue/55/revision-control-plugin-automatically-installed-as-a-build-dependency-is-not-present-when-another-build-dependency-is-being
757] 
758[setup: undo the previous patch to quote the executable in scripts
759zooko@zooko.com**20100604025204
760 Ignore-this: beda3b951c49d1111478618b8cabe005
761 The problem isn't in the script, it is in the cli.exe script that is built by setuptools. This might be related to
762 http://bugs.python.org/issue6792
763 and
764 http://bugs.python.org/setuptools/issue2
765 Or it might be a separate issue involving the launcher.c code e.g. http://tahoe-lafs.org/trac/zetuptoolz/browser/launcher.c?rev=576#L210 and its handling of the interpreter name.
766] 
767[quickstart.html: warn against installing Python at a path containing spaces.
768david-sarah@jacaranda.org**20100604032413
769 Ignore-this: c7118332573abd7762d9a897e650bc6a
770] 
771[setup: put quotes around the path to executable in case it has spaces in it, when building a tahoe.exe for win32
772zooko@zooko.com**20100604020836
773 Ignore-this: 478684843169c94a9c14726fedeeed7d
774] 
775[misc/show-tool-versions.py: Display additional Python interpreter encoding informations (stdout, stdin and filesystem)
776Francois Deppierraz <francois@ctrlaltdel.ch>**20100521094313
777 Ignore-this: 3ae9b0b07fd1d53fb632ef169f7c5d26
778] 
779[Fix test failures in test_web caused by changes to web page titles in #1062. Also, change a 'target' field to '_blank' instead of 'blank' in welcome.xhtml.
780david-sarah@jacaranda.org**20100603232105
781 Ignore-this: 6e2cc63f42b07e2a3b2d1a857abc50a6
782] 
783[Resolve merge conflict for sftpd.py
784david-sarah@jacaranda.org**20100603182537
785 Ignore-this: ba8b543e51312ac949798eb8f5bd9d9c
786] 
787[SFTP: possible fix for metadata times being shown as the epoch.
788david-sarah@jacaranda.org**20100602234514
789 Ignore-this: bdd7dfccf34eff818ff88aa4f3d28790
790] 
791[SFTP: further improvements to test coverage.
792david-sarah@jacaranda.org**20100602234422
793 Ignore-this: 87eeee567e8d7562659442ea491e187c
794] 
795[SFTP: improve test coverage. Also make creating a directory fail when permissions are read-only (rather than ignoring the permissions).
796david-sarah@jacaranda.org**20100602041934
797 Ignore-this: a5e9d9081677bc7f3ddb18ca7a1f531f
798] 
799[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.
800david-sarah@jacaranda.org**20100602032641
801 Ignore-this: 48817b54cd63f5422cb88214c053b03b
802] 
803[dirnode.py: Fix bug that caused 'tahoe' fields, 'ctime' and 'mtime' not to be updated when new metadata is present.
804david-sarah@jacaranda.org**20100602014644
805 Ignore-this: 5bac95aa897b68f2785d481e49b6a66
806] 
807[SFTP: fix a bug that caused the temporary files underlying EncryptedTemporaryFiles not to be closed.
808david-sarah@jacaranda.org**20100601055310
809 Ignore-this: 44fee4cfe222b2b1690f4c5e75083a52
810] 
811[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.
812david-sarah@jacaranda.org**20100601051139
813 Ignore-this: eff7c08bd47fd52bfe2b844dabf02558
814] 
815[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.
816david-sarah@jacaranda.org**20100601045428
817 Ignore-this: 14f26e17e58db97fad0dcfd350b38e95
818] 
819[SFTP: the same bug as in _sync_heisenfiles also occurred in two other places.
820david-sarah@jacaranda.org**20100530060127
821 Ignore-this: 8d137658fc6e4596fa42697476c39aa3
822] 
823[SFTP: another try at fixing the _sync_heisenfiles bug.
824david-sarah@jacaranda.org**20100530055254
825 Ignore-this: c15f76f32a60083a6b7de6ca0e917934
826] 
827[SFTP: fix silly bug in _sync_heisenfiles ('f is not ignore' vs 'not (f is ignore)').
828david-sarah@jacaranda.org**20100530053807
829 Ignore-this: 71c4bc62613bf8fef835886d8eb61c27
830] 
831[SFTP: log when a sync completes.
832david-sarah@jacaranda.org**20100530051840
833 Ignore-this: d99765663ceb673c8a693dfcf88c25ea
834] 
835[SFTP: fix bug in previous logging patch.
836david-sarah@jacaranda.org**20100530050000
837 Ignore-this: 613e4c115f03fe2d04c621b510340817
838] 
839[SFTP: more logging to track down OpenOffice hang.
840david-sarah@jacaranda.org**20100530040809
841 Ignore-this: 6c11f2d1eac9f62e2d0f04f006476a03
842] 
843[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.
844david-sarah@jacaranda.org**20100530025544
845 Ignore-this: 9919dddd446fff64de4031ad51490d1c
846] 
847[Move suppression of DeprecationWarning about BaseException.message from sftpd.py to main __init__.py. Also, remove the global suppression of the 'integer argument expected, got float' warning, which turned out to be a bug.
848david-sarah@jacaranda.org**20100529050537
849 Ignore-this: 87648afa0dec0d2e73614007de102a16
850] 
851[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.
852david-sarah@jacaranda.org**20100529045253
853 Ignore-this: 2404076b2154ff2659e2b10e0b9e813c
854] 
855[Change doc comments in interfaces.py to take into account unknown nodes.
856david-sarah@jacaranda.org**20100528171922
857 Ignore-this: d2fde6890b3bca9c7275775f64fbff56
858] 
859[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.
860david-sarah@jacaranda.org**20100527194529
861 Ignore-this: 6d8114cef4450c52c57639f82852716f
862] 
863[Trivial whitespace changes.
864david-sarah@jacaranda.org**20100527194114
865 Ignore-this: 98d611bc54ee20b01a5f6b334ff61b2d
866] 
867[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.
868david-sarah@jacaranda.org**20100525230257
869 Ignore-this: 63245d6d864f8f591c86170864d7c57f
870] 
871[SFTP: handle removing a file while it is open. Also some simplifications of the logout handling.
872david-sarah@jacaranda.org**20100525184210
873 Ignore-this: 660ee80be6ecab783c60452a9da896de
874] 
875[SFTP: a posix-rename response should actually return an FXP_STATUS reply, not an FXP_EXTENDED_REPLY as Twisted Conch assumes. Work around this by raising an SFTPError with code FX_OK.
876david-sarah@jacaranda.org**20100525033323
877 Ignore-this: fe2914d3ef7f5194bbeaf3f2dda2ad7d
878] 
879[SFTP: fix problem with posix-rename code returning a Deferred for the renamed filenode, not for the result of the request (an empty string).
880david-sarah@jacaranda.org**20100525020209
881 Ignore-this: 69f7491df2a8f7ea92d999a6d9f0581d
882] 
883[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.
884david-sarah@jacaranda.org**20100524230412
885 Ignore-this: eb1a3fb72492fa2fb19667b6e4300440
886] 
887[SFTP: name of the POSIX rename extension should be 'posix-rename@openssh.com', not 'extposix-rename@openssh.com'.
888david-sarah@jacaranda.org**20100524021156
889 Ignore-this: f90eb1ff9560176635386ee797a3fdc7
890] 
891[SFTP: avoid race condition where .write could be called on an OverwriteableFileConsumer after it had been closed.
892david-sarah@jacaranda.org**20100523233830
893 Ignore-this: 55d381064a15bd64381163341df4d09f
894] 
895[SFTP: log tracebacks for RAISEd exceptions.
896david-sarah@jacaranda.org**20100523221535
897 Ignore-this: c76a7852df099b358642f0631237cc89
898] 
899[Suppress 'integer argument expected, got float' DeprecationWarning everywhere
900david-sarah@jacaranda.org**20100523221157
901 Ignore-this: 80efd7e27798f5d2ad66c7a53e7048e5
902] 
903[SFTP: more logging to investigate behaviour of getAttrs(path).
904david-sarah@jacaranda.org**20100523204236
905 Ignore-this: e58fd35dc9015316e16a9f49f19bb469
906] 
907[SFTP: fix pyflakes warnings; drop 'noisy' versions of eventually_callback and eventually_errback; robustify conversion of exception messages to UTF-8.
908david-sarah@jacaranda.org**20100523140905
909 Ignore-this: 420196fc58646b05bbc9c3732b6eb314
910] 
911[SFTP: fixes and test cases for renaming of open files.
912david-sarah@jacaranda.org**20100523032549
913 Ignore-this: 32e0726be0fc89335f3035157e202c68
914] 
915[SFTP: Increase test_sftp timeout to cater for francois' ARM buildslave.
916david-sarah@jacaranda.org**20100522191639
917 Ignore-this: a5acf9660d304677048ab4dd72908ad8
918] 
919[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.
920david-sarah@jacaranda.org**20100522035836
921 Ignore-this: 8ef93a828e927cce2c23b805250b81a4
922] 
923[SFTP: relax pyasn1 version dependency to >= 0.0.8a.
924david-sarah@jacaranda.org**20100520181437
925 Ignore-this: 2c7b3dee7b7e14ba121d3118193a386a
926] 
927[SFTP tests: fix test_openDirectory_and_attrs that was failing in timezones west of UTC.
928david-sarah@jacaranda.org**20100520181027
929 Ignore-this: 9beaf602beef437c11c7e97f54ce2599
930] 
931[SFTP: allow getAttrs to succeed on a file that has been opened for creation but not yet uploaded or linked (part of #1050).
932david-sarah@jacaranda.org**20100520035613
933 Ignore-this: 2f59107d60d5476edac19361ccf6cf94
934] 
935[SFTP: improve logging so that results of requests are (usually) logged.
936david-sarah@jacaranda.org**20100520003652
937 Ignore-this: 3f59eeee374a3eba71db9be31d5a95
938] 
939[SFTP: add tests for more combinations of open flags.
940david-sarah@jacaranda.org**20100519053933
941 Ignore-this: b97ee351b1e8ecfecabac70698060665
942] 
943[SFTP: allow FXF_WRITE | FXF_TRUNC (#1050).
944david-sarah@jacaranda.org**20100519043240
945 Ignore-this: bd70009f11d07ac6e9fd0d1e3fa87a9b
946] 
947[SFTP: remove another case where we were logging data.
948david-sarah@jacaranda.org**20100519012713
949 Ignore-this: 83115daf3a90278fed0e3fc267607584
950] 
951[SFTP: avoid logging all data passed to callbacks.
952david-sarah@jacaranda.org**20100519000651
953 Ignore-this: ade6d69a473ada50acef6389fc7fdf69
954] 
955[SFTP: fixes related to reporting of permissions (needed for sshfs).
956david-sarah@jacaranda.org**20100518054521
957 Ignore-this: c51f8a5d0dc76b80d33ffef9b0541325
958] 
959[SFTP: change error code returned for ExistingChildError to FX_FAILURE (fixes gvfs with some picky programs such as gedit).
960david-sarah@jacaranda.org**20100518004205
961 Ignore-this: c194c2c9aaf3edba7af84b7413cec375
962] 
963[SFTP: fixed bugs that caused hangs during write (#1037).
964david-sarah@jacaranda.org**20100517044228
965 Ignore-this: b8b95e82c4057367388a1e6baada993b
966] 
967[SFTP: work around a probable bug in twisted.conch.ssh.session:loseConnection(). Also some minor error handling cleanups.
968david-sarah@jacaranda.org**20100517012606
969 Ignore-this: 5d3da7c4219cb0c14547e7fd70c74204
970] 
971[SFTP: add pyasn1 as dependency, needed if we are using Twisted >= 9.0.0.
972david-sarah@jacaranda.org**20100516193710
973 Ignore-this: 76fd92e8a950bb1983a90a09e89c54d3
974] 
975[SFTP: Support statvfs extensions, avoid logging actual data, and decline shell sessions politely.
976david-sarah@jacaranda.org**20100516154347
977 Ignore-this: 9d05d23ba77693c03a61accd348ccbe5
978] 
979[SFTP: fix error in SFTPUserHandler arguments introduced by execCommand patch.
980david-sarah@jacaranda.org**20100516014045
981 Ignore-this: f5ee494dc6ad6aa536cc8144bd2e3d19
982] 
983[SFTP: implement execCommand to interoperate with clients that issue a 'df -P -k /' command. Also eliminate use of Zope adaptation.
984david-sarah@jacaranda.org**20100516012754
985 Ignore-this: 2d0ed28b759f67f83875b1eaf5778992
986] 
987[sftpd.py: 'log.OPERATIONAL' should be just 'OPERATIONAL'.
988david-sarah@jacaranda.org**20100515155533
989 Ignore-this: f2347cb3301bbccc086356f6edc685
990] 
991[Attempt to fix #1040 by making SFTPUser implement ISession.
992david-sarah@jacaranda.org**20100515005719
993 Ignore-this: b3baaf088ba567e861e61e347195dfc4
994] 
995[Eliminate Windows newlines from sftpd.py.
996david-sarah@jacaranda.org**20100515005656
997 Ignore-this: cd54fd25beb957887514ae76e08c277
998] 
999[Update SFTP implementation and tests: fix #1038 and switch to foolscap logging; also some code reorganization.
1000david-sarah@jacaranda.org**20100514043113
1001 Ignore-this: 262f76d953dcd4317210789f2b2bf5da
1002] 
1003[Change shouldFail to avoid Unicode errors when converting Failure to str
1004david-sarah@jacaranda.org**20100512060754
1005 Ignore-this: 86ed419d332d9c33090aae2cde1dc5df
1006] 
1007[Tests for new SFTP implementation
1008david-sarah@jacaranda.org**20100512060552
1009 Ignore-this: 20308d4a59b3ebc868aad55ae0a7a981
1010] 
1011[New SFTP implementation: mutable files, read/write support, streaming download, Unicode filenames, and more
1012david-sarah@jacaranda.org**20100512055407
1013 Ignore-this: 906f51c48d974ba9cf360c27845c55eb
1014] 
1015[allmydata.org -> tahoe-lafs.org in __init__.py
1016david-sarah@jacaranda.org**20100603063530
1017 Ignore-this: f7d82331d5b4a3c4c0938023409335af
1018] 
1019[small change to CREDITS
1020david-sarah@jacaranda.org**20100603062421
1021 Ignore-this: 2909cdbedc19da5573dec810fc23243
1022] 
1023[Resolve conflict in patch to change imports to absolute.
1024david-sarah@jacaranda.org**20100603054608
1025 Ignore-this: 15aa1caa88e688ffa6dc53bed7dcca7d
1026] 
1027[Minor documentation tweaks.
1028david-sarah@jacaranda.org**20100603054458
1029 Ignore-this: e30ae407b0039dfa5b341d8f88e7f959
1030] 
1031[title_rename_xhtml.dpatch.txt
1032freestorm77@gmail.com**20100529172542
1033 Ignore-this: d2846afcc9ea72ac443a62ecc23d121b
1034 
1035 - Renamed xhtml Title from "Allmydata - Tahoe" to "Tahoe-LAFS"
1036 - Renamed Tahoe to Tahoe-LAFS in page content
1037 - Changed Tahoe-LAFS home page link to http://tahoe-lafs.org (added target="blank")
1038 - Deleted commented css script in info.xhtml
1039 
1040 
1041] 
1042[tests: refactor test_web.py to have less duplication of literal caps-from-the-future
1043zooko@zooko.com**20100519055146
1044 Ignore-this: 49e5412e6cc4566ca67f069ffd850af6
1045 This is a prelude to a patch which will add tests of caps from the future which have non-ascii chars in them.
1046] 
1047[doc_reformat_stats.txt
1048freestorm77@gmail.com**20100424114615
1049 Ignore-this: af315db5f7e3a17219ff8fb39bcfcd60
1050 
1051 
1052    - Added heading format begining and ending by "=="
1053    - Added Index
1054    - Added Title
1055           
1056    Note: No change are made in paragraphs content
1057 
1058 
1059 **END OF DESCRIPTION***
1060 
1061 Place the long patch description above the ***END OF DESCRIPTION*** marker.
1062 The first line of this file will be the patch name.
1063 
1064 
1065 This patch contains the following changes:
1066 
1067 M ./docs/stats.txt -2 +2
1068] 
1069[doc_reformat_performance.txt
1070freestorm77@gmail.com**20100424114444
1071 Ignore-this: 55295ff5cd8a5b67034eb661a5b0699d
1072 
1073    - Added heading format begining and ending by "=="
1074    - Added Index
1075    - Added Title
1076         
1077    Note: No change are made in paragraphs content
1078 
1079 
1080] 
1081[doc_refomat_logging.txt
1082freestorm77@gmail.com**20100424114316
1083 Ignore-this: 593f0f9914516bf1924dfa6eee74e35f
1084 
1085    - Added heading format begining and ending by "=="
1086    - Added Index
1087    - Added Title
1088         
1089    Note: No change are made in paragraphs content
1090 
1091] 
1092[doc_reformat_known_issues.txt
1093freestorm77@gmail.com**20100424114118
1094 Ignore-this: 9577c3965d77b7ac18698988cfa06049
1095 
1096     - Added heading format begining and ending by "=="
1097     - Added Index
1098     - Added Title
1099           
1100     Note: No change are made in paragraphs content
1101   
1102 
1103] 
1104[doc_reformat_helper.txt
1105freestorm77@gmail.com**20100424120649
1106 Ignore-this: de2080d6152ae813b20514b9908e37fb
1107 
1108 
1109    - Added heading format begining and ending by "=="
1110    - Added Index
1111    - Added Title
1112             
1113    Note: No change are made in paragraphs content
1114 
1115] 
1116[doc_reformat_garbage-collection.txt
1117freestorm77@gmail.com**20100424120830
1118 Ignore-this: aad3e4c99670871b66467062483c977d
1119 
1120 
1121    - Added heading format begining and ending by "=="
1122    - Added Index
1123    - Added Title
1124             
1125    Note: No change are made in paragraphs content
1126 
1127] 
1128[doc_reformat_FTP-and-SFTP.txt
1129freestorm77@gmail.com**20100424121334
1130 Ignore-this: 3736b3d8f9a542a3521fbb566d44c7cf
1131 
1132 
1133    - Added heading format begining and ending by "=="
1134    - Added Index
1135    - Added Title
1136           
1137    Note: No change are made in paragraphs content
1138 
1139] 
1140[doc_reformat_debian.txt
1141freestorm77@gmail.com**20100424120537
1142 Ignore-this: 45fe4355bb869e55e683405070f47eff
1143 
1144 
1145    - Added heading format begining and ending by "=="
1146    - Added Index
1147    - Added Title
1148             
1149    Note: No change are made in paragraphs content
1150 
1151] 
1152[doc_reformat_configuration.txt
1153freestorm77@gmail.com**20100424104903
1154 Ignore-this: 4fbabc51b8122fec69ce5ad1672e79f2
1155 
1156 
1157 - Added heading format begining and ending by "=="
1158 - Added Index
1159 - Added Title
1160 
1161 Note: No change are made in paragraphs content
1162 
1163] 
1164[doc_reformat_CLI.txt
1165freestorm77@gmail.com**20100424121512
1166 Ignore-this: 2d3a59326810adcb20ea232cea405645
1167 
1168      - Added heading format begining and ending by "=="
1169      - Added Index
1170      - Added Title
1171           
1172      Note: No change are made in paragraphs content
1173 
1174] 
1175[doc_reformat_backupdb.txt
1176freestorm77@gmail.com**20100424120416
1177 Ignore-this: fed696530e9d2215b6f5058acbedc3ab
1178 
1179 
1180    - Added heading format begining and ending by "=="
1181    - Added Index
1182    - Added Title
1183             
1184    Note: No change are made in paragraphs content
1185 
1186] 
1187[doc_reformat_architecture.txt
1188freestorm77@gmail.com**20100424120133
1189 Ignore-this: 6e2cab4635080369f2b8cadf7b2f58e
1190 
1191 
1192     - Added heading format begining and ending by "=="
1193     - Added Index
1194     - Added Title
1195             
1196     Note: No change are made in paragraphs content
1197 
1198 
1199] 
1200[Correct harmless indentation errors found by pylint
1201david-sarah@jacaranda.org**20100226052151
1202 Ignore-this: 41335bce830700b18b80b6e00b45aef5
1203] 
1204[Change relative imports to absolute
1205david-sarah@jacaranda.org**20100226071433
1206 Ignore-this: 32e6ce1a86e2ffaaba1a37d9a1a5de0e
1207] 
1208[Document reason for the trialcoverage version requirement being 0.3.3.
1209david-sarah@jacaranda.org**20100525004444
1210 Ignore-this: 2f9f1df6882838b000c063068f258aec
1211] 
1212[Downgrade version requirement for trialcoverage to 0.3.3 (from 0.3.10), to avoid needing to compile coveragepy on Windows.
1213david-sarah@jacaranda.org**20100524233707
1214 Ignore-this: 9c397a374c8b8017e2244b8a686432a8
1215] 
1216[Suppress deprecation warning for twisted.web.error.NoResource when using Twisted >= 9.0.0.
1217david-sarah@jacaranda.org**20100516205625
1218 Ignore-this: 2361a3023cd3db86bde5e1af759ed01
1219] 
1220[docs: CREDITS for Jeremy Visser
1221zooko@zooko.com**20100524081829
1222 Ignore-this: d7c1465fd8d4e25b8d46d38a1793465b
1223] 
1224[test: show stdout and stderr in case of non-zero exit code from "tahoe" command
1225zooko@zooko.com**20100524073348
1226 Ignore-this: 695e81cd6683f4520229d108846cd551
1227] 
1228[setup: upgrade bundled zetuptoolz to zetuptoolz-0.6c15dev and make it unpacked and directly loaded by setup.py
1229zooko@zooko.com**20100523205228
1230 Ignore-this: 24fb32aaee3904115a93d1762f132c7
1231 Also fix the relevant "make clean" target behavior.
1232] 
1233[setup: remove bundled zipfile egg of setuptools
1234zooko@zooko.com**20100523205120
1235 Ignore-this: c68b5f2635bb93d1c1fa7b613a026f9e
1236 We're about to replace it with bundled unpacked source code of setuptools, which is much nicer for debugging and evolving under revision control.
1237] 
1238[setup: remove bundled copy of setuptools_trial-0.5.2.tar
1239zooko@zooko.com**20100522221539
1240 Ignore-this: 140f90eb8fb751a509029c4b24afe647
1241 Hopefully it will get installed automatically as needed and we won't bundle it anymore.
1242] 
1243[setup: remove bundled setuptools_darcs-1.2.8.tar
1244zooko@zooko.com**20100522015333
1245 Ignore-this: 378b1964b513ae7fe22bae2d3478285d
1246 This version of setuptools_darcs had a bug when used on Windows which has been fixed in setuptools_darcs-1.2.9. Hopefully we will not need to bundle a copy of setuptools_darcs-1.2.9 in with Tahoe-LAFS and can instead rely on it to be downloaded from PyPI or bundled in the "tahoe deps" separate tarball.
1247] 
1248[tests: fix pyflakes warnings in bench_dirnode.py
1249zooko@zooko.com**20100521202511
1250 Ignore-this: f23d55b4ed05e52865032c65a15753c4
1251] 
1252[setup: if the string '--reporter=bwverbose-coverage' appears on sys.argv then you need trialcoverage
1253zooko@zooko.com**20100521122226
1254 Ignore-this: e760c45dcfb5a43c1dc1e8a27346bdc2
1255] 
1256[tests: don't let bench_dirnode.py do stuff and have side-effects at import time (unless __name__ == '__main__')
1257zooko@zooko.com**20100521122052
1258 Ignore-this: 96144a412250d9bbb5fccbf83b8753b8
1259] 
1260[tests: increase timeout to give François's ARM buildslave a chance to complete the tests
1261zooko@zooko.com**20100520134526
1262 Ignore-this: 3dd399fdc8b91149c82b52f955b50833
1263] 
1264[run_trial.darcspath
1265freestorm77@gmail.com**20100510232829
1266 Ignore-this: 5ebb4df74e9ea8a4bdb22b65373d1ff2
1267] 
1268[docs: line-wrap README.txt
1269zooko@zooko.com**20100518174240
1270 Ignore-this: 670a02d360df7de51ebdcf4fae752577
1271] 
1272[Hush pyflakes warnings
1273Kevan Carstensen <kevan@isnotajoke.com>**20100515184344
1274 Ignore-this: fd602c3bba115057770715c36a87b400
1275] 
1276[setup: new improved misc/show-tool-versions.py
1277zooko@zooko.com**20100516050122
1278 Ignore-this: ce9b1de1b35b07d733e6cf823b66335a
1279] 
1280[Improve code coverage of the Tahoe2PeerSelector tests.
1281Kevan Carstensen <kevan@isnotajoke.com>**20100515032913
1282 Ignore-this: 793151b63ffa65fdae6915db22d9924a
1283] 
1284[Remove a comment that no longer makes sense.
1285Kevan Carstensen <kevan@isnotajoke.com>**20100514203516
1286 Ignore-this: 956983c7e7c7e4477215494dfce8f058
1287] 
1288[docs: update docs/architecture.txt to more fully and correctly explain the upload procedure
1289zooko@zooko.com**20100514043458
1290 Ignore-this: 538b6ea256a49fed837500342092efa3
1291] 
1292[Fix up the behavior of #778, per reviewers' comments
1293Kevan Carstensen <kevan@isnotajoke.com>**20100514004917
1294 Ignore-this: 9c20b60716125278b5456e8feb396bff
1295 
1296   - Make some important utility functions clearer and more thoroughly
1297     documented.
1298   - Assert in upload.servers_of_happiness that the buckets attributes
1299     of PeerTrackers passed to it are mutually disjoint.
1300   - Get rid of some silly non-Pythonisms that I didn't see when I first
1301     wrote these patches.
1302   - Make sure that should_add_server returns true when queried about a
1303     shnum that it doesn't know about yet.
1304   - Change Tahoe2PeerSelector.preexisting_shares to map a shareid to a set
1305     of peerids, alter dependencies to deal with that.
1306   - Remove upload.should_add_servers, because it is no longer necessary
1307   - Move upload.shares_of_happiness and upload.shares_by_server to a utility
1308     file.
1309   - Change some points in Tahoe2PeerSelector.
1310   - Compute servers_of_happiness using a bipartite matching algorithm that
1311     we know is optimal instead of an ad-hoc greedy algorithm that isn't.
1312   - Change servers_of_happiness to just take a sharemap as an argument,
1313     change its callers to merge existing_shares and used_peers before
1314     calling it.
1315   - Change an error message in the encoder to be more appropriate for
1316     servers of happiness.
1317   - Clarify the wording of an error message in immutable/upload.py
1318   - Refactor a happiness failure message to happinessutil.py, and make
1319     immutable/upload.py and immutable/encode.py use it.
1320   - Move the word "only" as far to the right as possible in failure
1321     messages.
1322   - Use a better definition of progress during peer selection.
1323   - Do read-only peer share detection queries in parallel, not sequentially.
1324   - Clean up logging semantics; print the query statistics whenever an
1325     upload is unsuccessful, not just in one case.
1326 
1327] 
1328[Alter the error message when an upload fails, per some comments in #778.
1329Kevan Carstensen <kevan@isnotajoke.com>**20091230210344
1330 Ignore-this: ba97422b2f9737c46abeb828727beb1
1331 
1332 When I first implemented #778, I just altered the error messages to refer to
1333 servers where they referred to shares. The resulting error messages weren't
1334 very good. These are a bit better.
1335] 
1336[Change "UploadHappinessError" to "UploadUnhappinessError"
1337Kevan Carstensen <kevan@isnotajoke.com>**20091205043037
1338 Ignore-this: 236b64ab19836854af4993bb5c1b221a
1339] 
1340[Alter the error message returned when peer selection fails
1341Kevan Carstensen <kevan@isnotajoke.com>**20091123002405
1342 Ignore-this: b2a7dc163edcab8d9613bfd6907e5166
1343 
1344 The Tahoe2PeerSelector returned either NoSharesError or NotEnoughSharesError
1345 for a variety of error conditions that weren't informatively described by them.
1346 This patch creates a new error, UploadHappinessError, replaces uses of
1347 NoSharesError and NotEnoughSharesError with it, and alters the error message
1348 raised with the errors to be more in line with the new servers_of_happiness
1349 behavior. See ticket #834 for more information.
1350] 
1351[Eliminate overcounting iof servers_of_happiness in Tahoe2PeerSelector; also reorganize some things.
1352Kevan Carstensen <kevan@isnotajoke.com>**20091118014542
1353 Ignore-this: a6cb032cbff74f4f9d4238faebd99868
1354] 
1355[Change stray "shares_of_happiness" to "servers_of_happiness"
1356Kevan Carstensen <kevan@isnotajoke.com>**20091116212459
1357 Ignore-this: 1c971ba8c3c4d2e7ba9f020577b28b73
1358] 
1359[Alter Tahoe2PeerSelector to make sure that it recognizes existing shares on readonly servers, fixing an issue in #778
1360Kevan Carstensen <kevan@isnotajoke.com>**20091116192805
1361 Ignore-this: 15289f4d709e03851ed0587b286fd955
1362] 
1363[Alter 'immutable/encode.py' and 'immutable/upload.py' to use servers_of_happiness instead of shares_of_happiness.
1364Kevan Carstensen <kevan@isnotajoke.com>**20091104111222
1365 Ignore-this: abb3283314820a8bbf9b5d0cbfbb57c8
1366] 
1367[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.
1368Kevan Carstensen <kevan@isnotajoke.com>**20091104033241
1369 Ignore-this: b3a6649a8ac66431beca1026a31fed94
1370] 
1371[Alter CiphertextDownloader to work with servers_of_happiness
1372Kevan Carstensen <kevan@isnotajoke.com>**20090924041932
1373 Ignore-this: e81edccf0308c2d3bedbc4cf217da197
1374] 
1375[Revisions of the #778 tests, per reviewers' comments
1376Kevan Carstensen <kevan@isnotajoke.com>**20100514012542
1377 Ignore-this: 735bbc7f663dce633caeb3b66a53cf6e
1378 
1379 - Fix comments and confusing naming.
1380 - Add tests for the new error messages suggested by David-Sarah
1381   and Zooko.
1382 - Alter existing tests for new error messages.
1383 - Make sure that the tests continue to work with the trunk.
1384 - Add a test for a mutual disjointedness assertion that I added to
1385   upload.servers_of_happiness.
1386 - Fix the comments to correctly reflect read-onlyness
1387 - Add a test for an edge case in should_add_server
1388 - Add an assertion to make sure that share redistribution works as it
1389   should
1390 - Alter tests to work with revised servers_of_happiness semantics
1391 - Remove tests for should_add_server, since that function no longer exists.
1392 - Alter tests to know about merge_peers, and to use it before calling
1393   servers_of_happiness.
1394 - Add tests for merge_peers.
1395 - Add Zooko's puzzles to the tests.
1396 - Edit encoding tests to expect the new kind of failure message.
1397 - Edit tests to expect error messages with the word "only" moved as far
1398   to the right as possible.
1399 - Extended and cleaned up some helper functions.
1400 - Changed some tests to call more appropriate helper functions.
1401 - Added a test for the failing redistribution algorithm
1402 - Added a test for the progress message
1403 - Added a test for the upper bound on readonly peer share discovery.
1404 
1405] 
1406[Alter various unit tests to work with the new happy behavior
1407Kevan Carstensen <kevan@isnotajoke.com>**20100107181325
1408 Ignore-this: 132032bbf865e63a079f869b663be34a
1409] 
1410[Replace "UploadHappinessError" with "UploadUnhappinessError" in tests.
1411Kevan Carstensen <kevan@isnotajoke.com>**20091205043453
1412 Ignore-this: 83f4bc50c697d21b5f4e2a4cd91862ca
1413] 
1414[Add tests for the behavior described in #834.
1415Kevan Carstensen <kevan@isnotajoke.com>**20091123012008
1416 Ignore-this: d8e0aa0f3f7965ce9b5cea843c6d6f9f
1417] 
1418[Re-work 'test_upload.py' to be more readable; add more tests for #778
1419Kevan Carstensen <kevan@isnotajoke.com>**20091116192334
1420 Ignore-this: 7e8565f92fe51dece5ae28daf442d659
1421] 
1422[Test Tahoe2PeerSelector to make sure that it recognizeses existing shares on readonly servers
1423Kevan Carstensen <kevan@isnotajoke.com>**20091109003735
1424 Ignore-this: 12f9b4cff5752fca7ed32a6ebcff6446
1425] 
1426[Add more tests for comment:53 in ticket #778
1427Kevan Carstensen <kevan@isnotajoke.com>**20091104112849
1428 Ignore-this: 3bb2edd299a944cc9586e14d5d83ec8c
1429] 
1430[Add a test for upload.shares_by_server
1431Kevan Carstensen <kevan@isnotajoke.com>**20091104111324
1432 Ignore-this: f9802e82d6982a93e00f92e0b276f018
1433] 
1434[Minor tweak to an existing test -- make the first server read-write, instead of read-only
1435Kevan Carstensen <kevan@isnotajoke.com>**20091104034232
1436 Ignore-this: a951a46c93f7f58dd44d93d8623b2aee
1437] 
1438[Alter tests to use the new form of set_shareholders
1439Kevan Carstensen <kevan@isnotajoke.com>**20091104033602
1440 Ignore-this: 3deac11fc831618d11441317463ef830
1441] 
1442[Refactor some behavior into a mixin, and add tests for the behavior described in #778
1443"Kevan Carstensen" <kevan@isnotajoke.com>**20091030091908
1444 Ignore-this: a6f9797057ca135579b249af3b2b66ac
1445] 
1446[Alter NoNetworkGrid to allow the creation of readonly servers for testing purposes.
1447Kevan Carstensen <kevan@isnotajoke.com>**20091018013013
1448 Ignore-this: e12cd7c4ddeb65305c5a7e08df57c754
1449] 
1450[Update 'docs/architecture.txt' to reflect readonly share discovery
1451kevan@isnotajoke.com**20100514003852
1452 Ignore-this: 7ead71b34df3b1ecfdcfd3cb2882e4f9
1453] 
1454[Alter the wording in docs/architecture.txt to more accurately describe the servers_of_happiness behavior.
1455Kevan Carstensen <kevan@isnotajoke.com>**20100428002455
1456 Ignore-this: 6eff7fa756858a1c6f73728d989544cc
1457] 
1458[Alter wording in 'interfaces.py' to be correct wrt #778
1459"Kevan Carstensen" <kevan@isnotajoke.com>**20091205034005
1460 Ignore-this: c9913c700ac14e7a63569458b06980e0
1461] 
1462[Update 'docs/configuration.txt' to reflect the servers_of_happiness behavior.
1463Kevan Carstensen <kevan@isnotajoke.com>**20091205033813
1464 Ignore-this: 5e1cb171f8239bfb5b565d73c75ac2b8
1465] 
1466[Clarify quickstart instructions for installing pywin32
1467david-sarah@jacaranda.org**20100511180300
1468 Ignore-this: d4668359673600d2acbc7cd8dd44b93c
1469] 
1470[web: add a simple test that you can load directory.xhtml
1471zooko@zooko.com**20100510063729
1472 Ignore-this: e49b25fa3c67b3c7a56c8b1ae01bb463
1473] 
1474[setup: fix typos in misc/show-tool-versions.py
1475zooko@zooko.com**20100510063615
1476 Ignore-this: 2181b1303a0e288e7a9ebd4c4855628
1477] 
1478[setup: show code-coverage tool versions in show-tools-versions.py
1479zooko@zooko.com**20100510062955
1480 Ignore-this: 4b4c68eb3780b762c8dbbd22b39df7cf
1481] 
1482[docs: update README, mv it to README.txt, update setup.py
1483zooko@zooko.com**20100504094340
1484 Ignore-this: 40e28ca36c299ea1fd12d3b91e5b421c
1485] 
1486[Dependency on Windmill test framework is not needed yet.
1487david-sarah@jacaranda.org**20100504161043
1488 Ignore-this: be088712bec650d4ef24766c0026ebc8
1489] 
1490[tests: pass z to tar so that BSD tar will know to ungzip
1491zooko@zooko.com**20100504090628
1492 Ignore-this: 1339e493f255e8fc0b01b70478f23a09
1493] 
1494[setup: update comments and URLs in setup.cfg
1495zooko@zooko.com**20100504061653
1496 Ignore-this: f97692807c74bcab56d33100c899f829
1497] 
1498[setup: reorder and extend the show-tool-versions script, the better to glean information about our new buildslaves
1499zooko@zooko.com**20100504045643
1500 Ignore-this: 836084b56b8d4ee8f1de1f4efb706d36
1501] 
1502[CLI: Support for https url in option --node-url
1503Francois Deppierraz <francois@ctrlaltdel.ch>**20100430185609
1504 Ignore-this: 1717176b4d27c877e6bc67a944d9bf34
1505 
1506 This patch modifies the regular expression used for verifying of '--node-url'
1507 parameter.  Support for accessing a Tahoe gateway over HTTPS was already
1508 present, thanks to Python's urllib.
1509 
1510] 
1511[backupdb.did_create_directory: use REPLACE INTO, not INSERT INTO + ignore error
1512Brian Warner <warner@lothar.com>**20100428050803
1513 Ignore-this: 1fca7b8f364a21ae413be8767161e32f
1514 
1515 This handles the case where we upload a new tahoe directory for a
1516 previously-processed local directory, possibly creating a new dircap (if the
1517 metadata had changed). Now we replace the old dirhash->dircap record. The
1518 previous behavior left the old record in place (with the old dircap and
1519 timestamps), so we'd never stop creating new directories and never converge
1520 on a null backup.
1521] 
1522["tahoe webopen": add --info flag, to get ?t=info
1523Brian Warner <warner@lothar.com>**20100424233003
1524 Ignore-this: 126b0bb6db340fabacb623d295eb45fa
1525 
1526 Also fix some trailing whitespace.
1527] 
1528[docs: install.html http-equiv refresh to quickstart.html
1529zooko@zooko.com**20100421165708
1530 Ignore-this: 52b4b619f9dde5886ae2cd7f1f3b734b
1531] 
1532[docs: install.html -> quickstart.html
1533zooko@zooko.com**20100421155757
1534 Ignore-this: 6084e203909306bed93efb09d0e6181d
1535 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".
1536] 
1537[Fix another typo in tahoe_storagespace munin plugin
1538david-sarah@jacaranda.org**20100416220935
1539 Ignore-this: ad1f7aa66b554174f91dfb2b7a3ea5f3
1540] 
1541[Add dependency on windmill >= 1.3
1542david-sarah@jacaranda.org**20100416190404
1543 Ignore-this: 4437a7a464e92d6c9012926b18676211
1544] 
1545[licensing: phrase the OpenSSL-exemption in the vocabulary of copyright instead of computer technology, and replicate the exemption from the GPL to the TGPPL
1546zooko@zooko.com**20100414232521
1547 Ignore-this: a5494b2f582a295544c6cad3f245e91
1548] 
1549[munin-tahoe_storagespace
1550freestorm77@gmail.com**20100221203626
1551 Ignore-this: 14d6d6a587afe1f8883152bf2e46b4aa
1552 
1553 Plugin configuration rename
1554 
1555] 
1556[setup: add licensing declaration for setuptools (noticed by the FSF compliance folks)
1557zooko@zooko.com**20100309184415
1558 Ignore-this: 2dfa7d812d65fec7c72ddbf0de609ccb
1559] 
1560[setup: fix error in licensing declaration from Shawn Willden, as noted by the FSF compliance division
1561zooko@zooko.com**20100309163736
1562 Ignore-this: c0623d27e469799d86cabf67921a13f8
1563] 
1564[CREDITS to Jacob Appelbaum
1565zooko@zooko.com**20100304015616
1566 Ignore-this: 70db493abbc23968fcc8db93f386ea54
1567] 
1568[desert-island-build-with-proper-versions
1569jacob@appelbaum.net**20100304013858] 
1570[docs: a few small edits to try to guide newcomers through the docs
1571zooko@zooko.com**20100303231902
1572 Ignore-this: a6aab44f5bf5ad97ea73e6976bc4042d
1573 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.
1574] 
1575[TAG allmydata-tahoe-1.6.1
1576david-sarah@jacaranda.org**20100228062314
1577 Ignore-this: eb5f03ada8ea953ee7780e7fe068539
1578] 
1579Patch bundle hash:
15800da5e9c9ae486a814ba3b0a255ce6237c682f23e