Ticket #534: stringutils.dpatch

File stringutils.dpatch, 190.3 KB (added by francois, at 2009-02-17T11:57:45Z)
Line 
1Tue Feb 17 12:54:23 CET 2009  francois@ctrlaltdel.ch
2  * stringutils.py, cli.py, common.py: Handle encoding conversion using dedicated functions
3 
4  Two new functions have been added in util/stringutils.py for encoding conversion handling.
5 
6    to_unicode(obj, encoding='utf-8')
7    from_unicode(obj, encoding='utf-8')
8 
9  Only system using UTF-8 filenames are currently supported.
10
11New patches:
12
13[stringutils.py, cli.py, common.py: Handle encoding conversion using dedicated functions
14francois@ctrlaltdel.ch**20090217115423
15 
16 Two new functions have been added in util/stringutils.py for encoding conversion handling.
17 
18   to_unicode(obj, encoding='utf-8')
19   from_unicode(obj, encoding='utf-8')
20 
21 Only system using UTF-8 filenames are currently supported.
22] {
23hunk ./src/allmydata/scripts/cli.py 5
24+from allmydata.util.stringutils import to_unicode
25hunk ./src/allmydata/scripts/cli.py 89
26-        self.from_file = arg1
27-        self.to_file = arg2
28+        self.from_file = to_unicode(arg1)
29+        self.to_file = to_unicode(arg2)
30hunk ./src/allmydata/scripts/cli.py 168
31-        self.sources = args[:-1]
32-        self.destination = args[-1]
33+        self.sources = map(to_unicode, args[:-1])
34+        self.destination = to_unicode(args[-1])
35hunk ./src/allmydata/scripts/common.py 4
36-
37+from allmydata.util.stringutils import from_unicode
38hunk ./src/allmydata/scripts/common.py 149
39-    return "/".join([urllib.quote(s) for s in segments])
40+    return "/".join([urllib.quote(from_unicode(s)) for s in segments])
41hunk ./src/allmydata/scripts/tahoe_mkdir.py 5
42+from allmydata.util.stringutils import from_unicode
43hunk ./src/allmydata/scripts/tahoe_mkdir.py 35
44-                                           urllib.quote(path))
45+                                           urllib.quote(from_unicode(path)))
46hunk ./src/allmydata/test/test_cli.py 3
47+import sys
48hunk ./src/allmydata/test/test_cli.py 578
49+        if sys.getfilesystemencoding() != 'UTF-8':
50+            raise unittest.SkipTest("Filesystem does not support UTF-8")
51+
52hunk ./src/allmydata/test/test_cli.py 651
53+        if sys.getfilesystemencoding() != 'UTF-8':
54+            raise unittest.SkipTest("Filesystem does not support UTF-8")
55+
56hunk ./src/allmydata/test/test_cli.py 657
57-        fn1 = os.path.join(self.basedir, "Ärtonwall")
58+        # Use unicode strings when calling os functions
59+        fn1 = os.path.join(self.basedir, u"Ärtonwall")
60hunk ./src/allmydata/test/test_cli.py 662
61-        fn2 = os.path.join(self.basedir, "Metallica")
62+        fn2 = os.path.join(self.basedir, u"Metallica")
63hunk ./src/allmydata/test/test_cli.py 680
64-    test_unicode_filename.todo = "This behavior is not yet supported, although it does happen to work (for reasons that are ill-understood) on many platforms.  See issue ticket #534."
65hunk ./src/allmydata/test/test_cli.py 698
66+class Mkdir(GridTestMixin, CLITestMixin, unittest.TestCase):
67+    def test_unicode_mkdir(self):
68+        if sys.getfilesystemencoding() != 'UTF-8':
69+            raise unittest.SkipTest("Filesystem does not support UTF-8")
70+
71+        self.basedir = os.path.dirname(self.mktemp())
72+        self.set_up_grid()
73+
74+        d = self.do_cli("create-alias", "tahoe")
75+        d.addCallback(lambda res: self.do_cli("mkdir", "tahoe:Motörhead"))
76+
77+        return d
78+
79+
80hunk ./src/allmydata/uri.py 9
81+from allmydata.util.stringutils import from_unicode
82hunk ./src/allmydata/uri.py 223
83-        return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2)))
84+        return cls(base32.a2b(from_unicode(mo.group(1))), base32.a2b(from_unicode(mo.group(2))))
85addfile ./src/allmydata/util/stringutils.py
86hunk ./src/allmydata/util/stringutils.py 1
87+def to_unicode(obj, encoding='utf-8'):
88+    if isinstance(obj, basestring):
89+        if not isinstance(obj, unicode):
90+            obj = unicode(obj, encoding)
91+    return obj
92+
93+def from_unicode(obj, encoding='utf-8'):
94+    if isinstance(obj, basestring):
95+        if isinstance(obj, unicode):
96+            obj = obj.encode(encoding)
97+    return obj
98}
99
100Context:
101
102[webapi #590: add streaming deep-check. Still need a CLI tool to use it.
103warner@lothar.com**20090217053553
104 Ignore-this: a0edd3d2a531c48a64d8397f7e4b208c
105] 
106[test_web.Grid: change the CHECK() function to make it easier to test t= values with hyphens in them
107warner@lothar.com**20090217050034
108 Ignore-this: 410c08735347c2057df52f6716520228
109] 
110[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
111warner@lothar.com**20090217041242
112 Ignore-this: fe54bb66a9ae073c002a7af51cd1e18
113] 
114[web: fix handling of reliability page when Numeric is not available
115warner@lothar.com**20090217015658
116 Ignore-this: 9d329182f1b2e5f812e5e7eb5f4cf2ed
117] 
118[test/no_network: update comments with setup timing: no_network takes 50ms, SystemTestMixin takes 2s (on my laptop)
119warner@lothar.com**20090217000643
120 Ignore-this: cc778fa3219775b25057bfc9491f8f34
121] 
122[test_upload: rewrite in terms of no-network GridTestMixin, improve no_network.py as necessary
123warner@lothar.com**20090216234457
124 Ignore-this: 80a341d5aa3036d24de98e267499d70d
125] 
126[test_download: rewrite in terms of no-network GridTestMixin, improve no_network.py as necessary
127warner@lothar.com**20090216233658
128 Ignore-this: ec2febafd2403830519120fb3f3ca04e
129] 
130[test_dirnode.py: convert Deleter to new no-network gridtest
131warner@lothar.com**20090216232348
132 Ignore-this: 8041739442ec4db726675e48f9775ae9
133] 
134[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
135warner@lothar.com**20090216232005
136 Ignore-this: ec6d010c9182aa72049d1fb894cf890e
137] 
138[tests: fix no_network framework to work with upload/download and checker
139warner@lothar.com**20090216231947
140 Ignore-this: 74b4dbd66b8384ae7c7544969fe4f744
141] 
142[client.py: improve docstring
143warner@lothar.com**20090216231532
144 Ignore-this: bbaa9e3f63fdb0048e3125c4681b2d1f
145] 
146[test_cli: add test coverage for help strings
147warner@lothar.com**20090216210833
148 Ignore-this: d2020849107f687448e159a19d0e5dab
149] 
150[test/no_network: new test harness, like system-test but doesn't use the network so it's faster
151warner@lothar.com**20090216205844
152 Ignore-this: 31678f7bdef30b0216fd657fc6145534
153] 
154[interfaces.py: minor docstring edit
155warner@lothar.com**20090216205816
156 Ignore-this: cec3855070197f7920b370f95e8b07bd
157] 
158[setup: if you sdist_dsc (to produce the input files for dpkg-buildpackage) then run darcsver first
159zooko@zooko.com**20090216201558
160 Ignore-this: b85be51b3d4a9a19a3366e690f1063e2
161] 
162[doc: a few edits to docs made after the 1.3.0 release
163zooko@zooko.com**20090216201539
164 Ignore-this: dbff3b929d88134d862f1dffd1ef068a
165] 
166[test_cli: improve test coverage slightly
167warner@lothar.com**20090216030451
168 Ignore-this: e01ccc6a6fb44aaa4fb14fe8669e2065
169] 
170[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
171warner@lothar.com**20090216023210
172 Ignore-this: dc1f0c6d8c003c0ade38bc8f8516b04d
173] 
174[provisioning/reliability: add tests, hush pyflakes, remove dead code, fix web links
175warner@lothar.com**20090215222451
176 Ignore-this: 7854df3e0130d9388f06efd4c797262f
177] 
178[util/statistics: add tests, fix mean_repair_cost
179warner@lothar.com**20090215222326
180 Ignore-this: c576eabc74c23b170702018fc3c122d9
181] 
182[test_repairer: hush pyflakes
183warner@lothar.com**20090215222310
184 Ignore-this: 875eb52e86077cda77efd02da77f8cfa
185] 
186[lossmodel.lyx: move draft paper into docs/proposed/, since it's unfinished
187warner@lothar.com**20090215221905
188 Ignore-this: 7f7ee204e47fd66932759c94deefe68
189] 
190[build a 'reliability' web page, with a simulation of file decay and repair over time
191warner@lothar.com**20090213234234
192 Ignore-this: 9e9623eaac7b0637bbd0071f082bd345
193] 
194[More lossmodel work, on repair.
195Shawn Willden <shawn-tahoe@willden.org>**20090116025648] 
196[Loss model work (temp1)
197Shawn Willden <shawn@willden.org>**20090115030058] 
198[Statistics module
199Shawn Willden <shawn-tahoe@willden.org>**20090114021235
200 
201 Added a statistics module for calculating various facets of
202 share survival statistics.
203] 
204[docs: relnotes-short.txt
205zooko@zooko.com**20090215163510
206 Ignore-this: 683649bb13499bbe0e5cea2e1716ff59
207 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.
208] 
209[TAG allmydata-tahoe-1.3.0
210zooko@zooko.com**20090214000556
211 Ignore-this: aa6c9a31a14a58ad2298cb7b08d3ea70
212] 
213[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)
214zooko@zooko.com**20090214000500
215 Ignore-this: 879c9b10f0e5b9ed0031236e0714ddfa
216] 
217[setup: remove attempt to automatically satisfy dependency on pywin32
218zooko@zooko.com**20090213234939
219 Ignore-this: ac02d54a956f7cc58bd3c0802764005f
220] 
221[NEWS: mention #625 (deep-repair breaks when it tries to repair a read-only directory)
222warner@lothar.com**20090213225534
223 Ignore-this: a3b6b3dd483f8a4a459dfc064760326f
224] 
225[test_dirnode: #625 run deep-check on a readonly dirnode too
226warner@lothar.com**20090213205337
227 Ignore-this: 2a18d33a7cc99c9959b7182e37b35077
228] 
229[docs: CREDITS
230zooko@zooko.com**20090213201245
231 Ignore-this: 5d3101e680739e6cdacb4351b518ae33
232] 
233[figleaf_htmlizer: fix order of summary counters
234warner@lothar.com**20090213155753
235 Ignore-this: aa6f0cd37e79857482967496252088da
236] 
237[Makefile: minor, add .PHONY declarations
238warner@lothar.com**20090213072341
239 Ignore-this: 7666385dc250014198454707ee82cd1c
240] 
241[figleaf_htmlizer: oops, re-ignore files that aren't under root, like code in auto-built eggs
242warner@lothar.com**20090213060022
243 Ignore-this: b4e67d5e025198d01e373728d1a74b11
244] 
245[setup: relnotes.txt mention the iPhone app and CIFS/SMB (tahoe-w32-client)
246zooko@zooko.com**20090213044121
247 Ignore-this: 2c9b8720579c4c146e4416c5a02c77a5
248] 
249[setup: make the "full version string" be "allmydata-tahoe/1.3.0" instead of "allmydata-tahoe-1.3.0" and the UserAgent string of the cli be "allmydata-tahoe/1.3.0 (tahoe-client)"
250zooko@zooko.com**20090213043738
251 Ignore-this: f41a0472abc9910ad180831963d740e8
252 This is webbish.  Thanks to kpreid for suggesting it.
253] 
254[docs: relnotes.txt final (!?) update for 1.3.0!
255zooko@zooko.com**20090213042814
256 Ignore-this: 7a959eba00115474ff048cd84ecab495
257] 
258[docs: known_issues.txt: my version of #615, remove "issue numbers", edits, move tahoe-1.1.0 issues to historical
259zooko@zooko.com**20090213041621
260 Ignore-this: 58dee952a3139791ba0fe03f03fcf8bb
261] 
262[docs: CREDITS
263zooko@zooko.com**20090213034228
264 Ignore-this: d6bb651d657ed8967ca1dfb23afbd00e
265] 
266[Makefile: add figleaf-delta-output, to render figleaf coverage differences with a previous run
267warner@lothar.com**20090212211829
268 Ignore-this: 9c78861c4abed3d6c2d013ff40d9b4fb
269] 
270[figleaf_htmlizer: emit stats to stdout, so buildbot can see it
271warner@lothar.com**20090212211020
272 Ignore-this: bf5b503717580561c2fdb6c619159c9
273] 
274[figleaf_htmlizer: render changes in coverage relative to a previous test run using --old-coverage
275warner@lothar.com**20090212210412
276 Ignore-this: 6c2bfc21a0671f1a07e19d3f9fd17157
277] 
278[immutable repairer: fix DownUpConnector so that it satisfies short reads the were requested after the last write and before the close
279zooko@zooko.com**20090212230447
280 Ignore-this: 2856bb9582d9c38a82fd9aad7fd10b57
281 This is probably the cause of the very rare "loss of progress" bug.  This is tested by unit tests.  A recent patch changed this to errback instead of losing progress, and now this patch is changing it again to return a short read instead of errbacking.  Returning a short read is what the uploader (in encode.py) is expecting, when it is reading the last block of the ciphertext, which might be shorter than the other blocks.
282] 
283[immutable repairer: add an assertion that a certain value in this tricky function is always what I think it is
284zooko@zooko.com**20090212223132
285 Ignore-this: 65b6920d67d7289f0dfc38c8e42f7c82
286] 
287[immutable repairer: add tests of how it handles short reads
288zooko@zooko.com**20090212224853
289 Ignore-this: bca74cfa2b1f27d733540fccd1c29839
290] 
291[nodeadmin: node stops itself if a hotline file hasn't been touched in 60 seconds now, instead of in 40 seconds
292zooko@zooko.com**20090212212131
293 Ignore-this: a6f44b9dfd9f405d4fe9ef66a6d293da
294 A test failed on draco (MacPPC) because it took 49 seconds to get around to running the test, and the node had already stopped itself when the hotline file was 40 seconds old.
295] 
296[immutable repairer: errback any pending readers of DownUpConnectorwhen it runs out of bytes, and test that fact
297zooko@zooko.com**20090212021129
298 Ignore-this: efd1fac753dad541fe5a0f232bcbf161
299] 
300[figleaf_htmlizer: more rearranging, behavior should still be unchanged
301warner@allmydata.com**20090212020515
302 Ignore-this: 8fb7dd723b2d26bdcf1d57685b113bb8
303] 
304[figleaf_htmlizer: break it up into subfunctions, behavior should still be unchanged
305warner@allmydata.com**20090212015607
306 Ignore-this: 9644ec95b0f9950722c13ad3c9654e22
307] 
308[figleaf_htmlizer: rewrite in class form, behavior should be the same as before
309warner@allmydata.com**20090212014050
310 Ignore-this: d00b838c0af1ea2d71be246bbcf36c53
311] 
312[figleaf_htmlizer: rewrite with twisted.python.usage, remove logging: should behave the same as before
313warner@allmydata.com**20090212011643
314 Ignore-this: 86f961e369625e9ab5188e817b083fe4
315] 
316[figleaf_htmlizer: expand tabs, fix to 4-space indents. No functional changes.
317warner@allmydata.com**20090212010542
318 Ignore-this: 5c9aa3704eacf1b42a985ade8e43dd1f
319] 
320[Makefile: include the figleaf pickle in the uploaded coverage data, for later differential analysis
321warner@allmydata.com**20090212000913
322 Ignore-this: e31002f4a7d55d8a2ca1131a1066c066
323] 
324[Makefile: fix test-clean, by ignoring _appname.py and removing src/allmydata_tahoe.egg-info
325warner@allmydata.com**20090212000434
326 Ignore-this: 17e4513eb0c844f434b863d40319dfdd
327] 
328[setup: from the perspective of darcs, src/allmydata/_appname.py is a very boring file, indeed
329zooko@zooko.com**20090211233108
330 Ignore-this: d22a1d76879744fa2a4dd6ea218511ba
331] 
332[versioning: include an "appname" in the application version string in the versioning protocol, and make that appname be controlled by setup.py
333zooko@zooko.com**20090211231816
334 Ignore-this: 6a0e62492bd271cdaaf696c4a35bc919
335 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.
336 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:
337 
338 __full_version__ = __appname + '-' + str(__version__).
339 
340 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__.
341 
342 This fixes ticket #556 at least well enough for tahoe-1.3.0 release.
343 
344] 
345[setup: add new darcsver-1.2.1 which includes Brian's and Nils Durner's patch to ignore non-ascii chars in XML output
346zooko@zooko.com**20090211215253
347 Ignore-this: d0319ec509f6562a45c9a555cf37d3cc
348] 
349[backupdb: cosmetic: capitalize the no-pysqlite instructions properly. Thanks to Terrell Russell for the catch.
350warner@allmydata.com**20090211212830
351 Ignore-this: a17b34a12bbe96ad5b531ef5d293471e
352] 
353[test_repairer: disable repair-from-corruption tests until other things are improved well enough to make it useful
354warner@allmydata.com**20090211210159
355 Ignore-this: bf2c780be028f0f5556f1aed04cc29b9
356] 
357[NEWS: explain limitations of the new repairer
358warner@allmydata.com**20090211204352
359 Ignore-this: 455822aeeae12b999fb28ba8a9265a51
360] 
361[setup: removed bundled darcsver-1.2.0
362zooko@zooko.com**20090211201904
363 Ignore-this: a826819eb8665e6d00e30a929f1f9831
364 (I'm about to add a new bundled darcsver-1.2.1, but I want to see what the buildbots will do when there is no bundled darcsver present.)
365] 
366[trivial: whitespace
367zooko@zooko.com**20090211171935
368 Ignore-this: 38b042422093adc2e176e448051f19f
369] 
370[docs/known_issues: mention #615 javascript-vs-frames, for zooko to improve/rewrite
371warner@allmydata.com**20090211201453
372 Ignore-this: b4805670c3700d90db39fb008b0f2c92
373] 
374[storage: make add-lease work, change default ownernum=1 since 0 is reserved to mean 'no lease here'
375warner@allmydata.com**20090211053938
376 Ignore-this: 9437ec1529c34351f2725df37e0859c
377] 
378[#620: storage: allow mutable shares to be deleted, with a writev where new_length=0
379warner@allmydata.com**20090211053756
380 Ignore-this: 81f79e0d72f7572bdc1c9f01bb91620
381] 
382[test_cli.Backup: insert some stalls to make sure two successive backups get distinct timestamps, avoiding intermittent failures
383warner@allmydata.com**20090211023709
384 Ignore-this: a146380e9adf94c2d301b59e4d23f02
385] 
386[#619: make 'tahoe backup' complain and refuse to run if sqlite is unavailable and --no-backupdb is not passed
387warner@allmydata.com**20090211004910
388 Ignore-this: 46ca8be19011b0ec11e7a10cb2556386
389] 
390[NEWS: point out that 'tahoe backup' requires a 1.3.0-or-later client node
391warner@allmydata.com**20090210210025
392 Ignore-this: 26e3e87dd9c762e59d6e0eb9f1acfb8d
393] 
394[tests: increase the default timeout for SystemTestMixin -based tests to 300 seconds, since our slower buildslaves sometimes take longer than the default 120s
395warner@allmydata.com**20090210204412
396 Ignore-this: 781ec7b1060fa8c75dc12401b07ee358
397] 
398[immutable: repairer: add a simple test to exercise the "leftover" code path, fix the bug (and rename the variable "leftover" to "extra")
399zooko@zooko.com**20090210181245
400 Ignore-this: 8426b3cd55ff38e390c4d1d5c0b87e9d
401] 
402[docs: not-quite-final version of relnotes.txt for tahoe-1.3.0
403zooko@zooko.com**20090210170227
404 Ignore-this: 64e11f3619d537eae28f4d33977bd7ab
405] 
406[docs: small edit to about.html
407zooko@zooko.com**20090210170219
408 Ignore-this: fa79838f4cdac17c09b6c3332e8a68b5
409] 
410[docs: NEWS: move the most exciting items to the top, break them out of less exciting categories, update a couple of stale bits, and a touch of editing
411zooko@zooko.com**20090210084843
412 Ignore-this: 181b31e3338b14b70ee9bc068ed2e4fb
413] 
414[docs: edit about.html
415zooko@zooko.com**20090210080102
416 Ignore-this: d96f9b21f88d4c7a552f9ed3db5c6af4
417] 
418[immutable: tighten preconditions -- you can write empty strings or read zero bytes, and add the first simple unit test of DownUpConnector
419zooko@zooko.com**20090210065647
420 Ignore-this: 81aad112bb240b23f92e38f06b4ae140
421] 
422[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)
423zooko@zooko.com**20090210055348
424 Ignore-this: e81c34d31fe2e3fd641a284a300352cc
425] 
426[immutable: defensive programming: assert that the encrypted readable gave you no more than the number of bytes you asked for
427zooko@zooko.com**20090210054605
428 Ignore-this: 72cac6a6ccdd9533af4bc02b64598e6d
429 (There is a bug in the current DownUpConnector which can cause it to give more bytes than you asked for on one request, and then less on the next, effectively shifting some of the bytes to an earlier request, but I think this bug never gets triggered in practice.)
430] 
431[docs: suggest Python 2.5 -- Python 2.6 is not as well tested yet
432zooko@zooko.com**20090210054421
433 Ignore-this: 3ef6988c693330d4937b4d8e1a996c39
434] 
435[immutable: tests: sigh, raise, again the limit of how many extra writes you can do and still pass this test
436zooko@zooko.com**20090210020931
437 Ignore-this: 91faf5d6919ca27f8212efc8d19b04c5
438 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.
439 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.
440 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.
441 
442] 
443[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.
444zooko@zooko.com**20090210020841
445 Ignore-this: ac803d0599f336c308fe74a2582e6aa4
446] 
447[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.
448zooko@zooko.com**20090210010149
449 Ignore-this: 43faea747e7afccaae230d50c067adc6
450 This will make the repairer tests more consistent -- less accidentally passing due to getting lucky.
451] 
452[immutable: tests: put shares back to their pristine condition in between each test of corrupting-and-repairing them
453zooko@zooko.com**20090210002956
454 Ignore-this: 45de680a6ac69b1845c0c74534913dec
455 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.
456] 
457[upload: add a think-of-the-compatibility note to UploadResults
458warner@allmydata.com**20090209205004
459 Ignore-this: 9ae325ac7281ab67ce45bccb8af672a
460] 
461[helper #609: uploading client should ignore old helper's UploadResults, which were in a different format
462warner@allmydata.com**20090209204543
463 Ignore-this: 4868a60d01fa528077d8cf6efa9db35d
464] 
465[test_runner: skip all spawnProcess-using tests on cygwin, since spawnProcess just hangs forever
466warner@lothar.com**20090209083400
467 Ignore-this: e8c2c85650b61cf084cb8a8852118b86
468] 
469[test_runner.py: revert the CreateNode section to using runner() inline, rather than spawning a process, to get more precise coverage
470warner@lothar.com**20090209082617
471 Ignore-this: e7f0ae5c9a2c2d8157289ef39fda371
472] 
473[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
474warner@lothar.com**20090209015602
475 Ignore-this: cbd07102909449da55067184a63fc0d1
476] 
477[test_upload: add test of maximum-immutable-share-size, to complete the last item of #538
478warner@lothar.com**20090209014127
479 Ignore-this: 943b9b11812ad784ec824db7a8a7aff9
480] 
481[docs/specifications: add an outline of the spec documents we'd like to have some day
482warner@lothar.com**20090208234748
483 Ignore-this: b591ad0361810e5aae37cba07fdfbd43
484] 
485[test_cli.Backup: capture stderr when sqlite is unavailable
486warner@lothar.com**20090207211440
487 Ignore-this: 4978b1a149e32bd31e66d5bc4269bc55
488] 
489[docs: add mac/README.txt to explain the first few basic facts about what the files are in this directory
490zooko@zooko.com**20090207223321
491 Ignore-this: d89a55b55cab69d2171529f62fcfbc11
492] 
493[test_repairer: wrap comments to 80cols, my laptop does not have a wide screen. No functional changes.
494warner@lothar.com**20090207200626
495 Ignore-this: f539c156f3b79cfe49c7cf0fa788994e
496] 
497[immutable/checker: wrap comments to 80cols, my laptop does not have a wide screen. No functional changes.
498warner@lothar.com**20090207200439
499 Ignore-this: ad8f03eb17b217987268f76d15fa5655
500] 
501[test/common.py: in share-layout-reading code, use '>L' consistently, since '>l' doesn't specify the signedness and the windows tests appear to be failing with an endianness-like problem (version==0x01000000). Also use binary mode when editing sharefiles
502warner@lothar.com**20090207193817
503 Ignore-this: dec2c7208b2fe7a56e74f61a8dc304f6
504] 
505[test_cli: increase timeout on test_backup, since our dapper buildslave is really slow
506warner@lothar.com**20090206081753] 
507[backupdb.py: catch OperationalError on duplicate-insert too, since pysqlite2 on dapper raises it instead of IntegrityError
508warner@lothar.com**20090206073401] 
509[test_backupdb.py: reset the check-timers after one step, otherwise a slow host can false-fail
510warner@lothar.com**20090206073305] 
511[NEWS: announce the #598 'tahoe backup' command
512warner@lothar.com**20090206054416] 
513[docs/CLI: document 'tahoe backup'
514warner@allmydata.com**20090206041445
515 Ignore-this: 60dade71212f2a65d3c0aaca7fb8ba00
516] 
517[test_cli.backup: oops, fix test to work even when sqlite is unavailable
518warner@allmydata.com**20090206041042
519 Ignore-this: 8a550049c8eb27c34ab2440263e07593
520] 
521[#598: add cli+backupdb tests, improve user display, update docs, move docs out of proposed/
522warner@allmydata.com**20090206040701
523 Ignore-this: 7a795db5573247471c6a268fb0aa23c0
524] 
525[#598: add backupdb to 'tahoe backup' command, enable it by default
526warner@allmydata.com**20090206015640
527 Ignore-this: 4e6a158d97549c55dbc49f6d69be8c44
528] 
529[add sqlite-based backupdb, for #598 and others (including 'tahoe cp'). Not enabled yet.
530warner@allmydata.com**20090206001756
531 Ignore-this: 36d9a56b257e481091fd1a105318cc25
532] 
533[setup: require new bundled setuptools-0.6c12dev
534zooko@zooko.com**20090205152923
535 Ignore-this: 516bbb2195a20493fa72a0ca11a2361c
536] 
537[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
538zooko@zooko.com**20090205152818
539 Ignore-this: da7b1587ee91180c4a1a56f217311de3
540] 
541[setup: remove old bundled setuptools-0.6c11dev (our own toothpick of setuptools)
542zooko@zooko.com**20090205152758
543 Ignore-this: 21140fb5a62bf855d9ffa8af8ff4cdac
544] 
545[setup: add a case to execute "python .../twistd.py" if "twistd" is not found
546zooko@zooko.com**20090205000620
547 Ignore-this: 6d472905042d14707bdf5d591d76248e
548] 
549[doc: specify Python >= 2.4.2
550zooko@zooko.com**20090204213840
551 Ignore-this: 108c60b69fdb1d0fcb95810703ce415a
552] 
553[setup: merge recent patches that change the set of bundled tools in misc/dependencies/
554zooko@zooko.com**20090204193222
555 Ignore-this: 4e5df8a8b5da51d122022dabb40f4b62
556] 
557[setup: bundle new setuptools_trial
558zooko@zooko.com**20090204192454
559 Ignore-this: a213fca1fd09ba2c3999dc948dafba98
560] 
561[setup: remove old bundled setuptools_trial
562zooko@zooko.com**20090204192442
563 Ignore-this: 18ed85a4dae721d3a25c67c9f5672802
564] 
565[setup: bundle new setuptools_darcs
566zooko@zooko.com**20090204192429
567 Ignore-this: 232482cdc411fb200e37f77ca8914760
568] 
569[setup: remove old bundled setuptools_darcs
570zooko@zooko.com**20090204192418
571 Ignore-this: 2af1cca4a5ed087120b5373a63600792
572] 
573[roll back the upgrade of the bundled setuptools_trial from 0.5 to 0.5.1
574zooko@zooko.com**20090204073836
575 Ignore-this: a939f9bd569b6db315dc62561edec56f
576 Upgrading setuptools trial in that way leads to a very tricky problem in setuptools's handling of recursive installation of the build-time dependencies of build-time dependencies...
577 
578 rolling back:
579 
580 Tue Feb  3 22:17:18 MST 2009  zooko@zooko.com
581   * setup: bundle new setuptools_trial-0.5.1
582 
583     A ./misc/dependencies/setuptools_trial-0.5.1.tar
584 Tue Feb  3 22:17:32 MST 2009  zooko@zooko.com
585   * setup: remove old bundled setuptools_trial
586 
587     R ./misc/dependencies/setuptools_trial-0.5.tar
588] 
589[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
590zooko@zooko.com**20090204052405
591 Ignore-this: a11bc74a5cb879db42c4fe468c375577
592 also specify that we need our latest revision (11dev) of our toothpick of setuptools
593 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.
594] 
595[setup: remove old bundled setuptools_trial
596zooko@zooko.com**20090204051732
597 Ignore-this: 3e753f59c15f5787097be1ce21985c83
598] 
599[setup: bundle new setuptools_trial-0.5.1
600zooko@zooko.com**20090204051718
601 Ignore-this: a28f2b48075a9383984da37c4f200121
602] 
603[setup: bundle new setuptools_darcs-1.2.5
604zooko@zooko.com**20090204051704
605 Ignore-this: 7f868649d64c1e4b42a56fab3e32ea13
606] 
607[setup: remove old bundled setuptools_darcs
608zooko@zooko.com**20090204051640
609 Ignore-this: f52325aca56c86573f16890c2c4fa4d7
610] 
611[setup: remove bundled darcsver in gzipped format
612zooko@zooko.com**20090204051628
613 Ignore-this: d3272f89c0c3275fca83df84f221fe45
614] 
615[setup: bundle darcsver in ungzipped format
616zooko@zooko.com**20090204051617
617 Ignore-this: a3a17bcaba2476577c9695911c630408
618] 
619[docs: mention issues using flogtool on Windows
620zooko@zooko.com**20090204033410
621 Ignore-this: 6122bcb82eea32d2a936a59d77233743
622] 
623[webapi: add verifycap (spelled 'verify_url') to the t=json output on files and directories. Closes #559.
624warner@allmydata.com**20090204012248
625 Ignore-this: 7da755304f6708b4973e4a7c1bcf8a43
626] 
627[setup: stop trying to add specific dirs to site-dirs to work-around setuptools #17
628zooko@zooko.com**20090203042352] 
629[setup: require and automatically use setuptools-0.6c11dev (our own toothpick of setuptools) which is bundled
630zooko@zooko.com**20090203042323] 
631[setup: remove old bundled setuptools-0.6c10dev (our own toothpick of setuptools)
632zooko@zooko.com**20090203042304] 
633[setup: bundle setuptools-0.6c11dev (our own toothpick of setuptools)
634zooko@zooko.com**20090203041950
635 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.
636] 
637[CLI: tahoe_check: stop escaping the JSON output when using --raw
638warner@allmydata.com**20090203031232
639 Ignore-this: c8a450a6e28731c352c0414b59861502
640] 
641[#598: first cut of 'tahoe backup' command: no backupdb, but yes shared-unchanged-directories and Archives/TIMESTAMP and Latest/
642warner@allmydata.com**20090203030902
643 Ignore-this: 650df5631523b63dd138978b8f3aa372
644] 
645[CLI: move node-url -should-end-in-slash code into a common place, so other tools can rely upon it later
646warner@allmydata.com**20090203030856
647 Ignore-this: dd94e011d74bcc371f36011a34230649
648] 
649[tahoe_ls: CLI command should return rc=0, not None
650warner@allmydata.com**20090203030720
651 Ignore-this: 18993c782cf84edc01e4accb6f8bf31a
652] 
653[setup: add site-dirs for Debian and for some (?) Mac OS X
654zooko@zooko.com**20090203000955
655 Ignore-this: ebd8b925dbe51bae390f8e8ddb429209
656] 
657[misc/dependencies: update setuptools_trial from 0.4 to 0.5
658warner@allmydata.com**20090202233657
659 Ignore-this: 9e338f824287552100ac92d78d19fe19
660] 
661[.darcs-boringfile: ignore bin/tahoe and bin/tahoe-script.py, since both are now generated
662warner@allmydata.com**20090202230333
663 Ignore-this: 92aa108838182076e71f0270bdba5887
664] 
665[Makefile: fix 'clean' target to remove bin/tahoe and bin/tahoe-script.py, since both are now generated
666warner@allmydata.com**20090202230307
667 Ignore-this: b01f539cd85dbcbba26616224cad0146
668] 
669[storage: disable test_large_share again: my linux laptop has less than 4 GiB free
670zooko@zooko.com**20090131041649
671 Ignore-this: da931a572a88699371057f932106b375
672] 
673[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
674warner@allmydata.com**20090131013205
675 Ignore-this: a1f21f81e6dbf88e591085efd1a57740
676] 
677[uri: add abbrev_si() method, which returns the abbreviated storage index
678warner@allmydata.com**20090131013110
679 Ignore-this: bb3d9483570dbe0dc9ecdc1f31d8d79f
680] 
681[setup: make sure you use darcsver whenever you are going to run trial
682zooko@zooko.com**20090130203819
683 Ignore-this: 2bd632d7540020c0dd893d337163d396
684 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.
685] 
686[setup: require setuptools_trial >= 0.5, and delegate to it the job of deciding which Twisted reactor to use for the current platform
687zooko@zooko.com**20090130043133
688 Ignore-this: 9e354184d6c989ddf16c7e16a3295ef2
689] 
690[Makefile: use 'setup.py test' for test/quicktest targets (instead of
691Brian Warner <warner@allmydata.com>**20090130102536
692 Ignore-this: da07fae8417bc54a610786bc57959c5e
693 'setup.py trial'). 'setup.py trial' clobbers the tahoe .egg's PKG-INFO
694 "Version:" field (resetting it to 0.0.0), possibly because it isn't invoking
695 the darcsver subcommand that 'setup.py test' does before it runs the 'trial'
696 subcommand.
697 
698 This slows down quicktest by another couple of seconds (see #591) and adds
699 more noise to its output, but without this change, 'make test' and 'make
700 quicktest' fail on test_runner (which spawns bin/tahoe as a subprocess, and
701 with a mangled Version:, the setuptools-based entry point script refuses to
702 recognize our source tree as a usable version of Tahoe).
703] 
704[Makefile: remove the obsolete stats-gatherer-run target
705warner@allmydata.com**20090130010131
706 Ignore-this: c6f278f8f8fafcd23fb942aa681c842e
707] 
708[setup: remove the "build three times in a row" kludge now that #229 is fixed, and spell build "build" instead of "build_tahoe"
709zooko@zooko.com**20090129195952
710 Ignore-this: e50ec860284fbc13d37cdc50bc09390a
711] 
712[setup: require darcsver >= 1.2.0 and rely exclusively on darcsver to set the version string
713zooko@zooko.com**20090129185640
714 Ignore-this: b7ed63526015c0769812f3c6f2342b8c
715] 
716[setup: add new bundled darcsver-1.2.0
717zooko@zooko.com**20090129185115
718 Ignore-this: 2e58040639d589205ad79d96d95c076f
719] 
720[setup: remove old bundled darcsver-1.1.8
721zooko@zooko.com**20090129185102
722 Ignore-this: f4c735ebb71ec4bf9e4a10bcbe959573
723] 
724[setup: add doc explaining why we set zip_safe=False
725zooko@zooko.com**20090129174802
726 Ignore-this: 7dd345f33bd10b9a362980bfb904ca60
727] 
728[setup: setup.cfg aliases get expanded only once, so put everything you want to happen during the "test" step in the alias
729zooko@zooko.com**20090129165815
730 Ignore-this: fcf87cf9592410a7b9a5150f2ccd3a13
731] 
732[setup: invoke darcsver whenever doing an sdist
733zooko@zooko.com**20090129165125
734 Ignore-this: 88b9bf4fae0303250ada810d351b566
735] 
736[setup: more verbose assertion failure in test_runner
737zooko@zooko.com**20090129164906
738 Ignore-this: 2d657efb77e1bc562e628e51c8fb6236
739] 
740[setup: subclass setuptools.Command instead of distutils Command
741zooko@zooko.com**20090129130058
742 Ignore-this: 8ef3cbf8cd11a5f3451854aa3298c826
743 There's almost no difference between them, but let's be consistent try to use the setuptools API as it was intended.
744] 
745[setup: temporarily comment-out the horrible kludge to work-around setuptools #17, while I figure out how to solve it better
746zooko@zooko.com**20090129130000
747 Ignore-this: 9e42491cfa8042c90a6a96081c00a053
748] 
749[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
750zooko@zooko.com**20090129045608
751 Ignore-this: d3740cd285f1d30a111536863a8e8457
752 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.
753] 
754[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
755zooko@zooko.com**20090129045534
756 Ignore-this: 38645dfadf3ba7b42370e795b7c90214
757 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.
758] 
759[setup: add metadata indicating compatibility with python 2.6
760zooko@zooko.com**20090129002628
761 Ignore-this: ca9af281354ed62f654d6b15267c8d6b
762] 
763[setup: a new improved way to create tahoe executables
764zooko@zooko.com**20090129000716
765 Ignore-this: d1b038ab8efb949125d7592ebcceccba
766 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.
767] 
768[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
769zooko@zooko.com**20090128223312
770 Ignore-this: 1b08b73b8f9ec4b5f629b734c556f2ed
771] 
772[setup: bundle darcsver-1.1.8
773zooko@zooko.com**20090128200326
774 Ignore-this: e2923c03860a45f4a49d79bd51acba77
775] 
776[setup: remove old bundled dependency darcsver-1.1.5
777zooko@zooko.com**20090128182012
778 Ignore-this: db20eeded096231e9d1da397d595c39d
779] 
780[CLI: fix examples in tahoe put --help
781warner@allmydata.com**20090127213909
782 Ignore-this: 1fe319f70c3791482bb381c06d4a066b
783] 
784[trivial: remove unused imports noticed by pyflakes
785zooko@zooko.com**20090127211148
786 Ignore-this: aee8bae8aa6f641fe15c5fe947d92f77
787] 
788[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)
789zooko@zooko.com**20090127203717
790 Ignore-this: e8795f2d3c70e871839d893bdfec0186
791] 
792[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.  :-()
793zooko@zooko.com**20090127203505
794 Ignore-this: d323b364d7cafb4c5847c0cc8346702e
795] 
796[setup: fix test_runner.RunNode.test_baddir -- it was left incomplete and broken by a recent patch
797zooko@zooko.com**20090127203245
798 Ignore-this: fee5c807945f45bce4919106771914f3
799] 
800[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.
801zooko@zooko.com**20090127044046
802 Ignore-this: 38c5afd730024cca63bc84f8ab7100f4
803] 
804[setup: go ahead and check for noise in test_client_no_noise
805zooko@zooko.com**20090126234616
806 Ignore-this: dff1a3511fdfad1a61fe73e4277c8981
807] 
808[setup: always run "build" before running "test"
809zooko@zooko.com**20090126233240
810 Ignore-this: 8cf76347ba24f02023f1690a470569df
811] 
812[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
813zooko@zooko.com**20090126233046
814 Ignore-this: 6b1554ed9268988fd65b8e8aac75ed4e
815] 
816[setup: always run build_tahoe before running tests
817zooko@zooko.com**20090126233024
818 Ignore-this: da31145fa86a61a307dc5dcc4debc0bb
819] 
820[diskwatcher: cache growth results (which take 30s to generate) for 3 minutes, to help munin, which invokes it 6 times in a row every 5 minutes
821warner@lothar.com**20090125230639] 
822[make streaming-manifest stop doing work after the HTTP connection is dropped
823warner@allmydata.com**20090124013908] 
824[setup: sys.exit() raises a SystemExit exception on Python 2.4 on Solaris -- fix it so that bin/tahoe doesn't interpret this as its brother having been non-executable
825zooko@zooko.com**20090124004911
826 Ignore-this: 117db7036306bbe8b5008d18ba23cb9b
827] 
828[setup: find a "bin/tahoe" executable to test based on allmydata.__file__ instead of based on the CWD
829zooko@zooko.com**20090124003437
830 Ignore-this: 25282068ce695c12a2b1f23c6fd2b205
831 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__))).
832 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.
833] 
834[rollback the #591 fix, since it breaks quicktest entirely
835warner@allmydata.com**20090123232812] 
836[#509: remove non-streaming 'tahoe manifest' CLI form
837warner@allmydata.com**20090123230002] 
838[CLI.txt: improve docs on 'tahoe manifest' to cover --verify-cap, --repair-cap, and streaming JSON
839warner@allmydata.com**20090123225939] 
840[#509 CLI: add 'tahoe manifest --stream'
841warner@allmydata.com**20090123223321] 
842[#509: test_system.py: add test for streamed-manifest
843warner@allmydata.com**20090123223247] 
844[test_system: rearrange DeepCheckWebGood to make it easier to add CLI tests
845warner@allmydata.com**20090123221306] 
846[setup: use "trial" executable instead of the setuptools_trial plugin for "make quicktest"
847zooko@zooko.com**20090123225830
848 Ignore-this: f70fb8873e0ac94f0c55e57f0f826334
849 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.
850] 
851[CLI: remove the '-v' alias for --version-and-path, to free up '-v' for more traditional uses (like --verbose)
852warner@allmydata.com**20090123212150] 
853[#590: add webish t=stream-manifest
854warner@allmydata.com**20090123040136] 
855[dirnode: add get_repair_cap()
856warner@allmydata.com**20090123034449] 
857[dirnode.deep_traverse: fix docstring to describe the correct return value
858warner@allmydata.com**20090123033950] 
859[filenode: add get_repair_cap(), which uses the read-write filecap for immutable files, and the verifycap for immutable files
860warner@allmydata.com**20090123033836] 
861[setup: make the bin/tahoe executable exit with the appropriate exit code
862zooko@zooko.com**20090122215405
863 Ignore-this: 98fc14e578be45b7c1b527fc7ace73b1
864] 
865[setup: add test that the tests are testing the right source code
866zooko@zooko.com**20090122215240
867 Ignore-this: f56c1bc525924154042fefa5d30b04f6
868 This is a test of #145, and I think that now the code passes this test.
869] 
870[trivial: removed unused imports noticed by pyflakes
871zooko@zooko.com**20090122215213
872 Ignore-this: a83aa1f27b31a72aed07caa866abfafe
873] 
874[setup: change test_runner to invoke "bin/tahoe" in a subprocess instead of executing runner.runner()
875zooko@zooko.com**20090122213818
876 Ignore-this: f7ef67adf1b9508617c9a7d305191627
877 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.
878] 
879[setup: fix "tahoe start" to work on Windows even when a Tahoe base dir hasn't been configured in the Windows registry
880zooko@zooko.com**20090121184720
881 Ignore-this: ba147a8f75e8aa9cdc3ee0a56dbf7413
882] 
883[docs: trivial naming change
884zooko@zooko.com**20090121025042
885 Ignore-this: a9c2fe6119c43683c6f88662e60de306
886] 
887[rollback the feature of making "ambient upload authority" configurable
888zooko@zooko.com**20090121024735
889 Ignore-this: 3fcea1b8179e6278adc360414b527b8b
890 
891 This reverses some, but not all, of the changes that were committed in the following set of patches.
892 
893 rolling back:
894 
895 Sun Jan 18 09:54:30 MST 2009  toby.murray
896   * add 'web.ambient_upload_authority' as a paramater to tahoe.cfg
897 
898     M ./src/allmydata/client.py -1 +3
899     M ./src/allmydata/test/common.py -7 +9
900     A ./src/allmydata/test/test_ambient_upload_authority.py
901     M ./src/allmydata/web/root.py +12
902     M ./src/allmydata/webish.py -1 +4
903 Sun Jan 18 09:56:08 MST 2009  zooko@zooko.com
904   * trivial: whitespace
905   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.
906 
907     M ./src/allmydata/test/test_ambient_upload_authority.py -9 +8
908     M ./src/allmydata/web/root.py -2 +1
909     M ./src/allmydata/webish.py -2 +1
910 Mon Jan 19 14:16:19 MST 2009  zooko@zooko.com
911   * trivial: remove unused import noticed by pyflakes
912 
913     M ./src/allmydata/test/test_ambient_upload_authority.py -1
914 Mon Jan 19 21:38:35 MST 2009  toby.murray
915   * doc: describe web.ambient_upload_authority
916 
917     M ./docs/configuration.txt +14
918     M ./docs/frontends/webapi.txt +11
919 Mon Jan 19 21:38:57 MST 2009  zooko@zooko.com
920   * doc: add Toby Murray to the CREDITS
921 
922     M ./CREDITS +4
923] 
924[setup: add new bundled setuptools_trial-0.4
925zooko@zooko.com**20090120234012
926 Ignore-this: f260255f657af2792beac9314fdc9ab4
927] 
928[setup: remove old bundled setuptools_trial-0.2
929zooko@zooko.com**20090120233918
930 Ignore-this: 6fce4d5106357981871ba0b8c7fb464e
931] 
932[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
933zooko@zooko.com**20090120184229
934 Ignore-this: beecca08d9f59704be7ef1aeca6fd779
935] 
936[setup: fix test_system to require tahoe under its package==distribution name "allmydata-tahoe" instead of its module name "allmydata"
937zooko@zooko.com**20090120183809
938 Ignore-this: 51e925c03dbcb9ccf1d7ee34c91c6e72
939] 
940[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"
941zooko@zooko.com**20090120183723
942 Ignore-this: f390676787f4d521c17fbe96fb2cd2a6
943 Thanks to dpeterson for the suggestion.
944] 
945[doc: add Toby Murray to the CREDITS
946zooko@zooko.com**20090120043857
947 Ignore-this: eedb7e9d47ddee5cbe189b55251d0859
948] 
949[doc: describe web.ambient_upload_authority
950toby.murray**20090120043835
951 Ignore-this: cc1920b2c5d4d587af84c4d251ad0e4b
952] 
953[trivial: remove unused import noticed by pyflakes
954zooko@zooko.com**20090119211619
955 Ignore-this: 4999f513a5c8d73ed8f79c2b012fea6b
956] 
957[setup: simplify install.html a tad
958zooko@zooko.com**20090119210447
959 Ignore-this: 529b2f225b3d98ed3bc99a4962e781ee
960] 
961[setup: refactor versions-and-paths and use pkg_resources to find them
962zooko@zooko.com**20090119210435
963 Ignore-this: b368d8ede7531f1d79ee3c2c1a2cc116
964 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.
965 This code falls back to the old way -- looking at the __version__ attributes and __file__ attributes -- if the pkg_resources way doesn't answer.
966 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".
967] 
968[setup: undo (for the second time) the use of the --multi-version feature
969zooko@zooko.com**20090119205352
970 Ignore-this: 80bdbb488c3e4fb042bcd968a9bc120a
971 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.
972 
973] 
974[trivial: whitespace
975zooko@zooko.com**20090118165815
976 Ignore-this: 6f97042f221da3ad931c6b545edc6a30
977 Ran "M-x whitespace-cleanup" on files that Toby's recent patch touched, even though they didn't have trailing whitespace.
978] 
979[trivial: whitespace
980zooko@zooko.com**20090118165608
981 Ignore-this: 8539e7e73e43f459f7b82e84dface95c
982 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.
983] 
984[trivial: whitespace
985zooko@zooko.com**20090118165458
986 Ignore-this: dedfb44829ea73f0e39f582f16112506
987] 
988[add 'web.ambient_upload_authority' as a paramater to tahoe.cfg
989toby.murray**20090118165430
990 Ignore-this: 2c6ed484009c03fe9db1bb6eb67500ff
991] 
992[doc: add Larry Hosken to CREDITS
993zooko@zooko.com**20090117164943
994 Ignore-this: f2433a296ab2485872d22538bd0f64b2
995] 
996[run build_tahoe command with trial commmand
997cgalvan@mail.utexas.edu**20090117000047] 
998[adding multi-version support
999cgalvan@mail.utexas.edu**20090116230326] 
1000[setup: addition of setuptools_trial egg to the base dir is boring from the point of view of revision control
1001zooko@zooko.com**20090116200554
1002 Ignore-this: 63dd48c06356f638ca85c5e4a25457b1
1003] 
1004[prevent --site-dirs from being passed to the 'install' command
1005cgalvan@mail.utexas.edu**20090116195732] 
1006[add option to show version and path to the tahoe executable
1007cgalvan@mail.utexas.edu**20090116184751] 
1008[setup: put back configuration of the PYTHONPATH which is necessary to build the Windows packages
1009zooko@zooko.com**20090115023751
1010 Ignore-this: 936b4d58babb84d1766695ad8c61ced7
1011] 
1012[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
1013warner@allmydata.com**20090115020015] 
1014[web/operations: undo the disable-ophandle-expiration change that inadvertently got included in zooko's recent 'rename wapi.txt to webapi.txt' patch, causing test failures
1015warner@allmydata.com**20090115011459] 
1016[cli: tests: skip symlink test if there is no os.symlink
1017zooko@zooko.com**20090115001010
1018 Ignore-this: 4987fea4fe070c2dd5ff75401fbf89e1
1019] 
1020[webapi.txt: explain POST /uri/?t=upload, thanks to Toby Murray for the catch
1021warner@allmydata.com**20090115000803] 
1022[mutable: move recent operation history management code (MutableWatcher) into history.py, have History provide stats
1023warner@allmydata.com**20090114233620] 
1024[download: tiny cleanup of history code
1025warner@allmydata.com**20090114224151] 
1026[upload: move upload history into History object
1027warner@allmydata.com**20090114224106] 
1028[immutable/download.py move recent-downloads history out of Downloader and into a separate class. upload/etc will follow soon.
1029warner@allmydata.com**20090114221424] 
1030[docs: rename wapi.txt to webapi.txt
1031zooko@zooko.com**20090114195348
1032 Ignore-this: 419685f2807714bab4069fbaa3a02c1c
1033 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.
1034] 
1035[setup: configure setup.cfg to point setuptools at the index.html page instead of straight at the tahoe directory listing
1036zooko@zooko.com**20090114185023
1037 Ignore-this: 71e06cbbd91397f3e12109e48d3f8a81
1038 This is necessary, because if setuptools looks at the directory listing, then it follows the link named "More Info" in attempt to download the file, and this fails.
1039] 
1040[setup: fix previous patch to set reactor to poll reactor on linux or cygwin
1041zooko@zooko.com**20090114164022
1042 Ignore-this: 9e37242ca3cfd47c6f69ee2438ec743b
1043] 
1044[setup: use poll reactor for trial if on linux2 or cygwin
1045zooko@zooko.com**20090114151546
1046 Ignore-this: f6c4b45745527811c9f72448d74649f5
1047] 
1048[docs: rename frontends/webapi.txt to frontends/wapi.txt
1049zooko@zooko.com**20090114025143
1050 Ignore-this: c35acd8dc7c1106ca31104b6db43e5ad
1051 rename CLI.txt to frontends/CLI.txt
1052 change a few mentions of "webapi" to "wapi"
1053 fixes #582
1054] 
1055[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.
1056warner@allmydata.com**20090113021442] 
1057[deep-check-and-repair: improve results and their HTML representation
1058warner@allmydata.com**20090113005619] 
1059[test_repairer.py: hush pyflakes: remove duplicate/shadowed function name, by using the earlier definition (which is identical)
1060warner@allmydata.com**20090112214509] 
1061[hush pyflakes by removing unused imports
1062warner@allmydata.com**20090112214120] 
1063[immutable repairer
1064zooko@zooko.com**20090112170022
1065 Ignore-this: f17cb07b15a554b31fc5203cf4f64d81
1066 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.
1067 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.
1068 It requires only a verifycap, not a readcap.  That is: it doesn't need or use the decryption key, only the integrity check codes.
1069 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.
1070] 
1071[util: dictutil: add DictOfSets.union(key, values) and DictOfSets.update(otherdictofsets)
1072zooko@zooko.com**20090112165539
1073 Ignore-this: 84fb8a2793238b077a7a71aa03ae9d2
1074] 
1075[setup: update doc in setup.cfg
1076zooko@zooko.com**20090111151319
1077 Ignore-this: 296bfa1b9dbdac876f2d2c8e4e2b1294
1078] 
1079[setup: Point setuptools at a directory on the allmydata.org test grid to find dependencies.
1080zooko@zooko.com**20090111151126
1081 Ignore-this: f5b6a8f5ce3ba08fea2573b5c582aba8
1082 Don't include an unrouteable IP address in find_links (fixes #574).
1083] 
1084[immutable: separate tests of immutable upload/download from tests of immutable checking/repair
1085zooko@zooko.com**20090110210739
1086 Ignore-this: 9e668609d797ec86a618ed52602c111d
1087] 
1088[trivial: minor changes to in-line comments -- mark plaintext-hash-tree as obsolete
1089zooko@zooko.com**20090110205601
1090 Ignore-this: df286154e1acde469f28e9bd00bb1068
1091] 
1092[immutable: make the web display of upload results more human-friendly, like they were before my recent change to the meaning of the "sharemap"
1093zooko@zooko.com**20090110200209
1094 Ignore-this: 527d067334f982cb2d3e185f72272f60
1095] 
1096[immutable: fix edit-o in interfaces.py documentation introduced in recent patch
1097zooko@zooko.com**20090110185408
1098 Ignore-this: f255d09aa96907c402583fc182379391
1099] 
1100[immutable: redefine the "sharemap" member of the upload results to be a map from shnum to set of serverids
1101zooko@zooko.com**20090110174623
1102 Ignore-this: 10300a2333605bc26c4ee9c7ab7dae10
1103 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.
1104] 
1105[naming: finish renaming "CheckerResults" to "CheckResults"
1106zooko@zooko.com**20090110000052
1107 Ignore-this: b01bd1d066d56eff3a6322e0c3a9fbdc
1108] 
1109[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
1110warner@allmydata.com**20090110015222] 
1111[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)
1112warner@allmydata.com**20090110013736] 
1113[set bin/tahoe executable permissions and leave build_tahoe in sys.argv
1114cgalvan@mail.utexas.edu**20090109210640] 
1115[setup: merge relaxation of the version of setuptools that we require at runtime with an indentation change
1116zooko@zooko.com**20090109190949
1117 Ignore-this: eb396c71563b9917c8a485efc5bebb36
1118] 
1119[setup: remove custom Trial class inside our setup.py and use the setuptools_trial plugin
1120zooko@zooko.com**20081205232207
1121 Ignore-this: e0f68169e8ac1b5a54b796e8905c7b80
1122] 
1123[setup: we require pywin32 if building on Windows (plus some formatting and comment fixes)
1124zooko@zooko.com**20081205231911
1125 Ignore-this: c1d1966cfe458a6380bfd5dce09010ff
1126] 
1127[fix bin/tahoe executable for Windows
1128cgalvan@mail.utexas.edu**20090109184222] 
1129[use subprocess.call instead of os.execve in bin/tahoe
1130cgalvan@mail.utexas.edu**20090109180300] 
1131[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
1132zooko@zooko.com**20081205233054
1133 Ignore-this: 843e7514870d7a4e708646acaa7c9699
1134] 
1135[setup: integrate the bundled setuptools_trial plugin with Chris Galvan's patch to use that plugin
1136zooko@zooko.com**20081201174804
1137 Ignore-this: 5d03e936cf45f67a39f993704024788c
1138] 
1139[use_setuptools_trial.patch
1140cgalvan@mail.utexas.edu**20081121205759] 
1141[setup: bundle setuptools_trial in misc/dependencies/
1142zooko@zooko.com**20081201174438
1143 Ignore-this: f13a4a1af648f9ab9b3b3438cf94053f
1144] 
1145[test_helper: hush pyflakes by avoiding use of 'uri' as a variable, since it shadows an import of the same name
1146warner@allmydata.com**20090109025941] 
1147[immutable/checker: include a summary (with 'Healthy' or 'Not Healthy' and a count of shares) in the checker results
1148warner@allmydata.com**20090109020145] 
1149[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
1150warner@allmydata.com**20090109015932] 
1151[dirnode deep-traversal: remove use of Limiter, stick with strict depth-first-traversal, to reduce memory usage during very large (300k+ dirnode) traversals
1152warner@allmydata.com**20090109014116] 
1153[immutable: add a monitor API to CiphertextDownloader with which to tell it to stop its work
1154zooko@zooko.com**20090108204215
1155 Ignore-this: f96fc150fa68fc2cec46c943171a5d48
1156] 
1157[naming: Rename a few things which I touched or changed in the recent patch to download-without-decrypting.
1158zooko@zooko.com**20090108181307
1159 Ignore-this: 495ce8d8854c5db5a09b35b856809fba
1160 Rename "downloadable" to "target".
1161 Rename "u" to "v" in FileDownloader.__init__().
1162 Rename "_uri" to "_verifycap" in FileDownloader.
1163 Rename "_downloadable" to "_target" in FileDownloader.
1164 Rename "FileDownloader" to "CiphertextDownloader".
1165] 
1166[immutable: refactor download to do only download-and-decode, not decryption
1167zooko@zooko.com**20090108175349
1168 Ignore-this: 1e4f26f6390a67aa5714650017c4dca1
1169 FileDownloader takes a verify cap and produces ciphertext, instead of taking a read cap and producing plaintext.
1170 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.
1171 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.
1172 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).
1173 This patch also changes some logging code to use the new logging mixin class.
1174 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).
1175 Refactor FileDownloader so that processing of segments and of tail-segment share as much code is possible.
1176 FileDownloader and FileNode take caps as instances of URI (Python objects), not as strings.
1177] 
1178[trivial: tiny changes to test code
1179zooko@zooko.com**20090108172048
1180 Ignore-this: b1a434cd40a87c3d027fef4ce609d25c
1181] 
1182[immutable: Make more parts of download use logging mixins and know what their "parent msg id" is.
1183zooko@zooko.com**20090108172530
1184 Ignore-this: a4296b5f9b75933d644fd222e1fba079
1185] 
1186[trivial: M-x whitespace-cleanup on src/immutable/download.py
1187zooko@zooko.com**20090108164901
1188 Ignore-this: bb62daf511e41a69860be657cde8df04
1189] 
1190[immutable: ValidatedExtendedURIProxy computes and stores the tail data size as a convenience to its caller.
1191zooko@zooko.com**20090108164139
1192 Ignore-this: 75c561d73b17418775faafa60fbbd45b
1193 The "tail data size" is how many of the bytes of the tail segment are data (as opposed to padding).
1194] 
1195[immutable: define a new interface IImmutableFileURI and declare that CHKFileURI and LiteralFileURI provide it
1196zooko@zooko.com**20090107182451
1197 Ignore-this: 12c256a0d20655cd73739d45fff0d4d8
1198] 
1199[util: log: allow empty msgs (because downloader is using the "format" alternative with no "msg" argument)
1200zooko@zooko.com**20090107175411
1201 Ignore-this: 832c333bf027a30a2fcf96e462297ac5
1202] 
1203['tahoe cp -r', upon encountering a dangling symlink, would assert out.
1204Larry Hosken <tahoe at lahosken.san-francisco.ca.us>**20090108055114
1205 Ignore-this: 46e75845339faa69ffb3addb7ce74f28
1206 This was somewhat sad; the assertion didn't say what path caused the
1207 error, what went wrong.  So... silently skip over things that are
1208 neither dirs nor files.
1209] 
1210[immutable: fix error in validation of ciphertext hash tree and add test for that code
1211zooko@zooko.com**20090108054012
1212 Ignore-this: 3241ce66373ebc514ae6e6f086f6daa2
1213 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.
1214] 
1215[immutable: do not catch arbitrary exceptions/failures from the attempt to get a crypttext hash tree -- catch only ServerFailure, IntegrityCheckReject, LayoutInvalid, ShareVersionIncompatible, and DeadReferenceError
1216zooko@zooko.com**20090108042551
1217 Ignore-this: 35f208af1b9f8603df25ed69047360d1
1218 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.
1219] 
1220[download: make sure you really get all the crypttext hashes
1221zooko@zooko.com**20090108022638
1222 Ignore-this: c1d5ebb048e81f706b9098e26876e040
1223 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.)
1224 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.
1225] 
1226[util: deferredutil: undo my recent patch to use our own implementation of gatherResults
1227zooko@zooko.com**20090107170005
1228 Ignore-this: c8c5421b47ab5a83c7ced8b08add80e8
1229 It seems to cause lots of failures on some builders.
1230] 
1231[util: deferredutil: implement our own gatherResults instead of using Twisted's
1232zooko@zooko.com**20090107163207
1233 Ignore-this: aa676b2b6cfb73bbca15827cb7c0a43e
1234 Because we want to maintain backwards compatibility to Twisted 2.4.0.
1235] 
1236[trivial: M-x whitespace-cleanup
1237zooko@zooko.com**20090107162528
1238 Ignore-this: 69bef4518477ca875785f0e0b8ab0000
1239] 
1240[util: deferredutil: add basic test for deferredutil.gatherResults
1241zooko@zooko.com**20090107141342
1242 Ignore-this: ad457053c8ee3a04921fdcdb639c03d
1243 Also I checked and Twisted 2.4.0 supports .subFailure and the other parts of the API that we require.
1244] 
1245[trivial: fix redefinition of name "log" in imports (pyflakes)
1246zooko@zooko.com**20090107040829
1247 Ignore-this: cdcf7ff84082323ebc022b186127e678
1248] 
1249[immutable: refactor uploader to do just encoding-and-uploading, not encryption
1250zooko@zooko.com**20090107034822
1251 Ignore-this: 681f3ad6827a93f1431d6e3f818840a9
1252 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.
1253 This will facilitate hooking together an Uploader and a Downloader to make a Repairer.
1254 Also move offloaded.py into src/allmydata/immutable/.
1255] 
1256[trivial: whitespace and docstring tidyups
1257zooko@zooko.com**20090107034104
1258 Ignore-this: 34db3eec599efbb2088a87333abfb797
1259] 
1260[storage.py: explain what this large and hard-to-recognize 4294967295 number is
1261warner@allmydata.com**20090106195721] 
1262[rename "checker results" to "check results", because it is more parallel to "check-and-repair results"
1263zooko@zooko.com**20090106193703
1264 Ignore-this: d310e3d7f42a76df68536650c996aa49
1265] 
1266[immutable: tests: verifier doesn't always catch corrupted share hashes
1267zooko@zooko.com**20090106190449
1268 Ignore-this: a9be83b8e2350ae9af808476015fe0e4
1269 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.
1270] 
1271[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
1272zooko@zooko.com**20090106182404
1273 Ignore-this: 7d6025aba05fe8140bb712e71e89f1ba
1274 Brian noticed that the constant was wrong, and in fixing that I noticed that we should be saturating instead of modding.
1275 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.
1276 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.
1277 
1278] 
1279[trivial: whitespace cleanup
1280zooko@zooko.com**20090106172058
1281 Ignore-this: 50ee40d42cc8d8f39d2f8ed15f6790d4
1282] 
1283[util: base32: require str-not-unicode inputs -- effectively rolls back [3306] and [3307]
1284zooko@zooko.com**20090106164122
1285 Ignore-this: 1030c2d37e636d194c99ec99707ae86f
1286] 
1287[trivial: fix a bunch of pyflakes complaints
1288zooko@zooko.com**20090106140054
1289 Ignore-this: 9a515a237248a148bcf8db68f70566d4
1290] 
1291[cli: make startstop_node wait 40 seconds instead of 20 for a process to go away after we signalled it to go away, before emitting a warning
1292zooko@zooko.com**20090106135106
1293 Ignore-this: 2da4b794b6a7e2e2ad6904cce61b0f10
1294 Because the unit tests on the VirtualZooko? buildslave failed when it took 31 seconds for a process to go away.
1295 Perhaps getting warning message after only 5 seconds instead of 40 seconds is desirable, and we should change the unit tests and set this back to 5, but I don't know exactly how to change the unit tests. Perhaps match this particular warning message about the shutdown taking a while and allow the code under test to pass if the only stderr that it emits is this warning.
1296] 
1297[immutable: new checker and verifier
1298zooko@zooko.com**20090106002818
1299 Ignore-this: 65441f8fdf0db8bcedeeb3fcbbd07d12
1300 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.
1301 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.
1302 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.  :-)
1303 
1304] 
1305[trivial: fix inline comment in test code
1306zooko@zooko.com**20090105235342
1307 Ignore-this: b3d79b9644052e6402b2f7d0125f678a
1308] 
1309[immutable: handle another form of share corruption with LayoutInvalid exception instead of AssertionError
1310zooko@zooko.com**20090105234645
1311 Ignore-this: fee5f6572efca5435ef54ed32552ca9d
1312] 
1313[trivial: remove unused import (pyflakes)
1314zooko@zooko.com**20090105233120
1315 Ignore-this: 47b6989ffa5b3a5733e45e8feb507959
1316] 
1317[immutable: skip the test of large files, because that is too hard on the host if it doesn't efficiently handle sparse files
1318zooko@zooko.com**20090105230727
1319 Ignore-this: 7d35a6cdb1ea6be2adf0e6dacefe01a7
1320] 
1321[immutable: raise a LayoutInvalid exception instead of an AssertionError if the share is corrupted so that the sharehashtree is the wrong size
1322zooko@zooko.com**20090105200114
1323 Ignore-this: b63d028c44dcd04ef424d6460b46e349
1324] 
1325[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
1326zooko@zooko.com**20090105194057
1327 Ignore-this: 365e1f199235a55c0354ba6cb2b05a04
1328] 
1329[immutable: tidy up the notification of waiters for ReadBucketProxy
1330zooko@zooko.com**20090105193522
1331 Ignore-this: 6b93478dae3d627b9d3cbdd254afbe7e
1332] 
1333[immutable: refactor downloader to be more reusable for checker/verifier/repairer (and better)
1334zooko@zooko.com**20090105155145
1335 Ignore-this: 29a22b1eb4cb530d4b69c12aa0d00740
1336 
1337 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.
1338   
1339 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.
1340   
1341 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.
1342   
1343 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.
1344   
1345 ReadBucketProxy hides the question of whether it has "started" or not (sent a request to the server to get metadata) from its user.
1346 
1347 Download is optimized to do as few roundtrips and as few requests as possible, hopefully speeding up download a bit.
1348 
1349] 
1350[util: add gatherResults which is a deferred-list-like thing that doesn't wrap failures in a FirstError
1351zooko@zooko.com**20090104165202
1352 Ignore-this: a284fb8ab8a00a39416a67dc5d9a451e
1353] 
1354[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 ""
1355zooko@zooko.com**20090103200245
1356 Ignore-this: 8ac4d0b0399cd74e8a424ffbcf3d9eb9
1357] 
1358[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)
1359zooko@zooko.com**20090103192222
1360 Ignore-this: e533a65d74437676d5116369fd7c663b
1361] 
1362[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
1363zooko@zooko.com**20090103190003
1364 Ignore-this: 1d429912dda92d986e2ee366d73e088c
1365] 
1366[docs: update install.html to recommend Python v2 instead of Python v2.5.2
1367zooko@zooko.com**20090103183100
1368 Ignore-this: 5dbea379c59e0d9be817cdd9c8393d65
1369] 
1370[trivial: remove unused import (pyflakes)
1371zooko@zooko.com**20090103182215
1372 Ignore-this: 4a29a14fa4580460a5e61fa0aa88b9b2
1373] 
1374[merge_install.patch
1375cgalvan@mail.utexas.edu**20090102164434
1376 Ignore-this: aa6d4c05d583a0724eb218fef04c3940
1377] 
1378[setup: new install doc -- doesn't require GNU make or a C++ compiler any more!
1379zooko@zooko.com**20081201180933
1380 Ignore-this: 753e8d1e6f32e2ddcd7a082050114725
1381] 
1382[immutable: fix test for truncated reads of URI extension block size
1383zooko@zooko.com**20090103174427
1384 Ignore-this: d9ff9dfff88b4cc7aa6751ce2e9088a6
1385] 
1386[immutable: further loosen the performance-regression test to allow up to 45 reads
1387zooko@zooko.com**20090103174109
1388 Ignore-this: 614f7dba9c0d310a220e74e45441f07
1389 This does raise the question of if there is any point to this test, since I apparently don't know what the answer *should* be, and whenever one of the buildbots fails then I redefine success.
1390 
1391 But, I'm about to commit a bunch of patches to implement checker, verifier, and repairer as well as to refactor downloader, and I would really like to know if these patches *increase* the number of reads required even higher than it currently is.
1392 
1393] 
1394[trivial: another place where I accidentally committed a note-to-self about the lease fields in the server-side share file
1395zooko@zooko.com**20090103172941
1396 Ignore-this: c23c7095ffccdf5aa033ed434b50582b
1397] 
1398[immutable: fix detection of truncated shares to take into account the fieldsize -- either 4 or 8
1399zooko@zooko.com**20090103005745
1400 Ignore-this: 710184bd90f73dc18f3899d90ec6e972
1401] 
1402[immutable: raise LayoutInvalid instead of struct.error when a share is truncated
1403zooko@zooko.com**20090103004806
1404 Ignore-this: 346c779045f79725965a0f2d3eea41f9
1405 To fix this error from the Windows buildslave:
1406 
1407 [ERROR]: allmydata.test.test_immutable.Test.test_download_from_only_3_remaining_shares
1408 
1409 Traceback (most recent call last):
1410   File "C:\Documents and Settings\buildslave\windows-native-tahoe\windows\build\src\allmydata\immutable\download.py", line 135, in _bad
1411     raise NotEnoughSharesError("ran out of peers, last error was %s" % (f,))
1412 allmydata.interfaces.NotEnoughSharesError: ran out of peers, last error was [Failure instance: Traceback: <class 'struct.error'>: unpack requires a string argument of length 4
1413 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
1414 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
1415 c:\Python25\lib\site-packages\twisted\internet\defer.py:239:callback
1416 c:\Python25\lib\site-packages\twisted\internet\defer.py:304:_startRunCallbacks
1417 --- <exception caught here> ---
1418 c:\Python25\lib\site-packages\twisted\internet\defer.py:317:_runCallbacks
1419 C:\Documents and Settings\buildslave\windows-native-tahoe\windows\build\src\allmydata\immutable\layout.py:374:_got_length
1420 C:\Python25\lib\struct.py:87:unpack
1421 ]
1422 ===============================================================================
1423 
1424] 
1425[immutable: whoops, it actually takes up to 39 reads sometimes to download a corrupted file
1426zooko@zooko.com**20090102234302
1427 Ignore-this: ef009d179eb4f84a56559017b633d819
1428] 
1429[immutable: add more detailed tests of download, including testing the count of how many reads different sorts of downloads take
1430zooko@zooko.com**20090102225459
1431 Ignore-this: d248eb3982fdb05b43329142a723f5a1
1432] 
1433[trivial: a few improvements to in-line doc and code, and renaming of test/test_immutable_checker.py to test/test_immutable.py
1434zooko@zooko.com**20090102224941
1435 Ignore-this: 27b97a06c3edad1821f43876b4350f3
1436 That file currently tests checker and verifier and repairer, and will soon also test downloader.
1437] 
1438[immutable: fix name change from BadOrMissingShareHash to BadOrMissingHash
1439zooko@zooko.com**20090102192709
1440 Ignore-this: 3f22ca1ee045beabb11559512ba130f4
1441 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...
1442] 
1443[trivial: remove unused import -- thanks, pyflakes
1444zooko@zooko.com**20090102192128
1445 Ignore-this: d99c7349ba6f8db971e31cf8789883d5
1446] 
1447[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.
1448zooko@zooko.com**20090102185858
1449 Ignore-this: 377bf621bbb6e360a98fd287bb1593f1
1450] 
1451[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.
1452zooko@zooko.com**20090102181554
1453 Ignore-this: 2288262a59ee695f524859ed4b0b39d5
1454] 
1455[immutable: ValidatedExtendedURIProxy computes and stores block_size and share_size for the convenience of its users
1456zooko@zooko.com**20090102174317
1457 Ignore-this: 2bab64048fffc05dc6592d617aeb412f
1458] 
1459[remove_sumo_install.patch
1460cgalvan@mail.utexas.edu**20090102162347
1461 Ignore-this: f328570b1da1ccfbaebc770d40748046
1462] 
1463[doc: remove notes to self that I accidentally included in a recent patch
1464zooko@zooko.com**20090102041457
1465 Ignore-this: d0039512dbde09811fdec48a2e00dc4
1466] 
1467[docs: remove caveat about Nevow incompatibility with Python 2.6 since the latest version of Nevow has fixed it
1468zooko@zooko.com**20090102034135
1469 Ignore-this: 4cb2ceb41f53e07dab0f623e01044edc
1470] 
1471[immutable: make the test of large files more likely to work by requesting to allocate space for only one huge share, not three
1472zooko@zooko.com**20081231215942
1473 Ignore-this: d7073de4764506550e184f8fdc670962
1474] 
1475[trivial: "M-x whitespace-cleanup", and also remove an unused variable
1476zooko@zooko.com**20081231214233
1477 Ignore-this: 54c33c205aa88de8655e4232d07f083e
1478] 
1479[immutable: storage servers accept any size shares now
1480zooko@zooko.com**20081231214226
1481 Ignore-this: 28669d591dddaff69088cba4483da61a
1482 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.
1483 
1484 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.
1485 
1486 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).
1487 
1488 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.
1489 
1490 This patch also refactors the creation of new sharefiles so that only a single fopen() is used.
1491 
1492 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.  :-)
1493 
1494] 
1495[trivial: "M-x whitespace-cleanup" on immutable/layout.py
1496zooko@zooko.com**20081231210702
1497 Ignore-this: 8be47d01cf40d1f81aeb0011a0a0caa
1498] 
1499[trivial: remove unused import -- thanks, pyflakes
1500zooko@zooko.com**20081231212556
1501 Ignore-this: a70cd39a7d633bde2bb5275dfd4d3781
1502] 
1503[rrefutil: generically wrap any errback from callRemote() in a ServerFailure instance
1504zooko@zooko.com**20081231202830
1505 Ignore-this: c949eaf8589ed4c3c232f17808fdce6a
1506 This facilitates client code to easily catch ServerFailures without also catching exceptions arising from client-side code.
1507 See also:
1508 http://foolscap.lothar.com/trac/ticket/105 # make it easy to distinguish server-side failures/exceptions from client-side
1509] 
1510[immutable: more detailed tests for checker/verifier/repairer
1511zooko@zooko.com**20081231201838
1512 Ignore-this: dd16beef604b0917f4493bc4ef35ab74
1513 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.
1514] 
1515[docs: add note about non-ascii chars in cli to NEWS
1516zooko@zooko.com**20081230081728
1517 Ignore-this: c6f45a1d944af3c77942a4bf740ee24c
1518] 
1519[cli: make startstop_node wait 20 seconds instead of 5 for a process to go away after we signalled it to go away
1520zooko@zooko.com**20081230072022
1521 Ignore-this: 3b0d47649e32b01ff55a506245c674c6
1522 Because the unit tests on the VirtualZooko buildslave failed when it took 16 seconds for a process to go away.
1523 Perhaps getting notification after only 5 seconds instead of 20 seconds is desirable, and we should change the unit tests and set this back to 5, but I don't know exactly how to change the unit tests.  Perhaps match this particular warning message about the shutdown taking a while and allow the code under test to pass if the only stderr that it emits is this warning.
1524] 
1525[docs: editing changes and updated news in known_issues.txt
1526zooko@zooko.com**20081230070116
1527 Ignore-this: e5dddc4446e3335a6c4eee7472e0670e
1528] 
1529[docs: split historical/historical_known_issues.txt out of known_issues.txt
1530zooko@zooko.com**20081230065226
1531 Ignore-this: 9b6d0d679294110deeb0ea18b4ad7ac8
1532 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.
1533] 
1534[doc: sundry amendments to docs and in-line code comments
1535zooko@zooko.com**20081228225954
1536 Ignore-this: a38057b9bf0f00afeea1c468b2237c36
1537] 
1538[doc: add mention of "tahoe create-alias" in the security-warning section of CLI.txt
1539zooko@zooko.com**20081224211646
1540 Ignore-this: 6bb0ab3af59a79e05ebccb800d9a12b0
1541] 
1542[doc: trivial: remove trailing whitespace
1543zooko@zooko.com**20081224211634
1544 Ignore-this: 6ff234bc7632c3ae4d4f2be2198bb97d
1545] 
1546[doc: warn that unicode might not work, in CLI.txt
1547zooko@zooko.com**20081224211618
1548 Ignore-this: 89355b53aab40af1d45a3746bb90ed10
1549] 
1550[doc: use the term "filesystem" rather than "virtual drive" in CLI.txt
1551zooko@zooko.com**20081224211614
1552 Ignore-this: c9541955201671c1a3a8c6ca7be4e7d
1553] 
1554[cli: mark unicode filenames as unsupported -- see #534 for details
1555zooko@zooko.com**20081224192802
1556 Ignore-this: b209ccbd838f633ec201e2e97156847c
1557] 
1558[cli: undo the effects of [http://allmydata.org/trac/tahoe/changeset/20081222235453-92b7f-f841e18afb94e1fd95e6dafb799a3d876dd85c69]
1559zooko@zooko.com**20081224155317
1560 Ignore-this: d34ee20d89221357e32872d721d7685f
1561 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.  :-)
1562 
1563] 
1564[test: extend timeout on the hotline file that prevents the client from stopping itself
1565zooko@zooko.com**20081222030629
1566 Ignore-this: 391f48caef9d6ad558e540ded56a8075
1567 The 20-second timeout was apparently tripped on my Powerbook G4 "draco".
1568] 
1569[cli: decode all cli arguments, assuming that they are utf-8 encoded
1570zooko@zooko.com**20081222235453
1571 Ignore-this: d92b4d146e1dc9848c6a4b6aaaa3d1e9
1572 Also encode all args to urllib as utf-8 because urllib doesn't handle unicode objects.
1573 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?
1574 This patch is mostly due to François Deppierraz.
1575 
1576] 
1577[util/base32: the identity trans table needn't have any contents -- we are using string.translate solely to delete known chars
1578zooko@zooko.com**20081222234808
1579 Ignore-this: 8fe03ec6571726f44425fc5905387b78
1580] 
1581[util/base32: allow unicode inputs to a2b() or could_be_base32_encoded(), and encode them with utf-8 before processing them
1582zooko@zooko.com**20081222234713
1583 Ignore-this: e1eb4caed2f78b2fef0df4bbf8bb26f7
1584] 
1585[util/base32: loosen the precondition forbidding unicode and requiring str -- now it requires either unicode or str
1586zooko@zooko.com**20081222222237
1587 Ignore-this: 3481d644bdc5345facbc199d33653f37
1588 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.
1589] 
1590[immutable: don't catch all exception when downloading, catch only DeadReferenceError and IntegrityCheckReject
1591zooko@zooko.com**20081221234135
1592 Ignore-this: 1abe05c3a5910378abc3920961f19aee
1593] 
1594[immutable: invent download.BadOrMissingHashError which is raised if either hashtree.BadHashError, hashtree.NotEnoughHashesError, and which is a subclass of IntegrityCheckReject
1595zooko@zooko.com**20081221234130
1596 Ignore-this: 1b04d7e9402ebfb2cd4c7648eb16af84
1597] 
1598[dirnode: don't check MAC on entries in dirnodes
1599zooko@zooko.com**20081221233518
1600 Ignore-this: efacb56d18259219c910cf5c84b17340
1601 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.
1602 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.
1603 
1604] 
1605[immutable, checker, and tests: improve docstrings, assertions, tests
1606zooko@zooko.com**20081221210752
1607 Ignore-this: 403ed5ca120d085d582cd5695d8371f
1608 No functional changes, but remove unused code, improve or fix docstrings, etc.
1609] 
1610[cli: if response code from wapi server is not 200 then stop instead of proceeding
1611zooko@zooko.com**20081220134918
1612 Ignore-this: 907481c941fc5696630b9c118137fb52
1613 Also, include the data that failed to json parse in an exception raised by the json parser.
1614] 
1615[immutable: when downloading an immutable file, use primary shares if they are available
1616zooko@zooko.com**20081220131456
1617 Ignore-this: f7b8b76fd7df032673ab072384eaa989
1618 Primary shares require no erasure decoding so the more primary shares you have, the less CPU is used.
1619] 
1620[trivial: remove unused import (thanks, pyflakes)
1621zooko@zooko.com**20081219194629
1622 Ignore-this: 96e15d6de43dd1204a8933171f194189
1623] 
1624[try to tidy up uri-as-string vs. uri-as-object
1625zooko@zooko.com**20081219143924
1626 Ignore-this: 4280727007c29f5b3e9273a34519893f
1627 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.
1628 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.
1629] 
1630[immutable: remove the last bits of code (only test code or unused code) which did something with plaintext hashes or plaintext hash trees
1631zooko@zooko.com**20081219141807
1632 Ignore-this: d10d26b279794383f27fa59ec4a50219
1633] 
1634[immutable: use new logging mixins to simplify logging
1635zooko@zooko.com**20081217000450
1636 Ignore-this: 7d942905d1ea8f34753dbb997e1857f3
1637] 
1638[immutable: refactor ReadBucketProxy a little
1639zooko@zooko.com**20081216235325
1640 Ignore-this: b3733257769eff3b3e9625bd04643fd6
1641] 
1642[debug: pass empty optional arguments to ReadBucketProxy
1643zooko@zooko.com**20081216235145
1644 Ignore-this: 7132cdc6a52767fbbcca03b242a16982
1645 because those arguments are about to become non-optional (for other code than test/debug code)
1646] 
1647[uri: generalize regexp that recognizes tahoe URLs to work for any host and port
1648zooko@zooko.com**20081216234930
1649 Ignore-this: 4a7716b8034c8e5ed9698a99f1ec5cb4
1650] 
1651[util: logging: refactor some common logging behavior into mixins
1652zooko@zooko.com**20081216233807
1653 Ignore-this: d91408bc984d1cf1fae30134f6cddb13
1654] 
1655[pyutil: assertutil: copy in simplified assertutil from pyutil
1656zooko@zooko.com**20081216233745
1657 Ignore-this: cd4a33186c8c134104f07018ab448583
1658] 
1659[pyutil: assertutil: simplify handling of exception during formatting of precondition message, and reduce dependency to just the Python Standard Library's logging module
1660zooko@zooko.com**20081210131057
1661 Ignore-this: 4a7f1aa5b9f7ac60067347db9cdf5f28
1662] 
1663[client: add get_servers()
1664zooko@zooko.com**20081208230400
1665 Ignore-this: 1b9b3ff483849563342f467c39fdd15d
1666] 
1667[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.
1668warner@allmydata.com**20081210044449] 
1669[NEWS: updated to most recent user-visible changes, including the 8123-to-3456 change
1670warner@allmydata.com**20081209231146] 
1671[immutable: remove unused code to produce plaintext hashes
1672zooko@zooko.com**20081209224546
1673 Ignore-this: 1ff9b6fa48e0617fea809998a0e3b6e
1674] 
1675[finish renaming 'subshare' to 'block' in immutable/encode.py and in docs/
1676zooko@zooko.com**20081209223318
1677 Ignore-this: 3d1b519f740c3d1030cb733f76fdae61
1678] 
1679[introducer: fix bug in recent simplification caught by Brian's sharp code-reviewing eye
1680zooko@zooko.com**20081208231634
1681 Ignore-this: 29854954577018d658be49142177edf2
1682] 
1683[introducer: simplify get_permuted_peers() implementation and add get_peers()
1684zooko@zooko.com**20081208225725
1685 Ignore-this: 8299c0dc187521f34187e54c72e57dc9
1686] 
1687[webapi.txt: minor edits
1688warner@allmydata.com**20081208213256] 
1689[rename "get_verifier()" to "get_verify_cap()"
1690zooko@zooko.com**20081208184411
1691 Ignore-this: 3ea4d7a78c802b23f628a37cc643c11a
1692] 
1693[setup: try depending on setuptools >= 0.6c6 instead of >= 0.6c7 at run-time, to be able to use the setuptools that came with Ubuntu Gutsy
1694zooko@zooko.com**20081208174725
1695 Ignore-this: 1cfefa8891f627c7ed46f1ff127eeee9
1696] 
1697[setup: loosen requirement on simplejson to >= 1.4
1698zooko@zooko.com**20081208143537
1699 Ignore-this: 2e4bec12f047f3f525caa6f234b58784
1700 That's the version of simplejson that comes with ubuntu feisty, and the one that we've required for most of our history.  Currently the Ubuntu dapper buildslave fails (see issue #534), and setting the simplejson requirement to be >= 2.0 would fix that failure, but I don't understand why.
1701] 
1702[setup: require simplejson >= 1.7.1
1703zooko@zooko.com**20081208043412
1704 Ignore-this: ab0e8ba82f0d10bc650bc80732bf3d0e
1705 That's the version that comes with gutsy, and we don't really understand why increasing the required version number helped with issue #553.
1706] 
1707[mutable: merge renaming with test patches
1708zooko@zooko.com**20081207144519
1709 Ignore-this: a922a8b231090fb35b9ef84d99e9dba3
1710] 
1711[mutable: rename mutable/node.py to mutable/filenode.py and mutable/repair.py to mutable/repairer.py
1712zooko@zooko.com**20081207142008
1713 Ignore-this: ecee635b01a21e6f866a11bb349712a3
1714 To be more consistent with the immutable layout that I am working on.
1715] 
1716[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.
1717warner@allmydata.com**20081206051412] 
1718[filenode.py: Fix partial HTTP Range header handling according to RFC2616
1719francois@ctrlaltdel.ch**20081118134135
1720 
1721 Tahoe webapi was failing on HTTP request containing a partial Range header.
1722 This change allows movies players like mplayer to seek in movie files stored in
1723 tahoe.
1724 
1725 Associated tests for GET and HEAD methods are also included
1726] 
1727[mutable.modify(): after UCWE, publish even if the second invocation of the modifier didn't modify anything. For #551.
1728warner@allmydata.com**20081206044923] 
1729[dirnode.py: dirnode.delete which hits UCWE should not fail with NoSuchChildError. Fixes #550.
1730warner@allmydata.com**20081206040837] 
1731[MutableFileNode.modify: pass first_time= and servermap= to the modifier callback
1732warner@allmydata.com**20081206040710] 
1733[misc/cpu-watcher.tac: tolerate disk-full errors when writing the pickle, and pickle corruption from earlier disk-full errors
1734warner@allmydata.com**20081205215412] 
1735[web: fix more info links again
1736zooko@zooko.com**20081205213939
1737 Ignore-this: d51cf2c6393b5799dc615952680cd079
1738 Really, *really* closes #553.
1739] 
1740[web: fix moreinfo link
1741zooko@zooko.com**20081205212939
1742 Ignore-this: 89913601a159437a2c151dd3652e6a94
1743] 
1744[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
1745zooko@zooko.com**20081205210502
1746 Ignore-this: 5017754e11749b376c7fa66d1acb2a58
1747 It's a subtle but real difference.
1748 Fixes #553 -- "More Info" link should point to a file/dir, not a dir+childname .
1749] 
1750[minor: fix unused imports -- thanks, pyflakes
1751zooko@zooko.com**20081205190723
1752 Ignore-this: 799f6a16360ac1aee8f6e0eb35a28a88
1753] 
1754[download: refactor handling of URI Extension Block and crypttext hash tree, simplify things
1755zooko@zooko.com**20081205141754
1756 Ignore-this: 51b9952ea2406b0eea60e8d72654fd99
1757 
1758 Refactor into a class the logic of asking each server in turn until one of them gives an answer
1759 that validates.  It is called ValidatedThingObtainer.
1760 
1761 Refactor the downloading and verification of the URI Extension Block into a class named
1762 ValidatedExtendedURIProxy.
1763 
1764 The new logic of validating UEBs is minimalist: it doesn't require the UEB to contain any
1765 unncessary information, but of course it still accepts such information for backwards
1766 compatibility (so that this new download code is able to download files uploaded with old, and
1767 for that matter with current, upload code).
1768 
1769 The new logic of validating UEBs follows the practice of doing all validation up front.  This
1770 practice advises one to isolate the validation of incoming data into one place, so that all of
1771 the rest of the code can assume only valid data.
1772 
1773 If any redundant information is present in the UEB+URI, the new code cross-checks and asserts
1774 that it is all fully consistent.  This closes some issues where the uploader could have
1775 uploaded inconsistent redundant data, which would probably have caused the old downloader to
1776 simply reject that download after getting a Python exception, but perhaps could have caused
1777 greater harm to the old downloader.
1778 
1779 I removed the notion of selecting an erasure codec from codec.py based on the string that was
1780 passed in the UEB.  Currently "crs" is the only such string that works, so
1781 "_assert(codec_name == 'crs')" is simpler and more explicit.  This is also in keeping with the
1782 "validate up front" strategy -- now if someone sets a different string than "crs" in their UEB,
1783 the downloader will reject the download in the "validate this UEB" function instead of in a
1784 separate "select the codec instance" function.
1785 
1786 I removed the code to check plaintext hashes and plaintext Merkle Trees.  Uploaders do not
1787 produce this information any more (since it potentially exposes confidential information about
1788 the file), and the unit tests for it were disabled.  The downloader before this patch would
1789 check that plaintext hash or plaintext merkle tree if they were present, but not complain if
1790 they were absent.  The new downloader in this patch complains if they are present and doesn't
1791 check them.  (We might in the future re-introduce such hashes over the plaintext, but encrypt
1792 the hashes which are stored in the UEB to preserve confidentiality.  This would be a double-
1793 check on the correctness of our own source code -- the current Merkle Tree over the ciphertext
1794 is already sufficient to guarantee the integrity of the download unless there is a bug in our
1795 Merkle Tree or AES implementation.)
1796 
1797 This patch increases the lines-of-code count by 8 (from 17,770 to 17,778), and reduces the
1798 uncovered-by-tests lines-of-code count by 24 (from 1408 to 1384).  Those numbers would be more
1799 meaningful if we omitted src/allmydata/util/ from the test-coverage statistics.
1800 
1801] 
1802[test_web: add get_permuted_peers, to unbreak recent checker_results change
1803warner@allmydata.com**20081205081210] 
1804[web checker_results: include a table of servers in permuted order, so you can see the places where new servers have been inserted
1805warner@allmydata.com**20081205080309] 
1806[test_system.py: assert less about the stats we get, since shares (and thus allocate() calls) are distributed randomly
1807warner@allmydata.com**20081204232704] 
1808[stats: don't return booleans: it violates the schema. Add a test.
1809warner@lothar.com**20081204210124] 
1810[test_system.py: don't ask the stats-gatherer to poll: it tolerates failures, so it isn't really giving us enough test coverage. Removing the call will make it more clear that we need to improve the tests later
1811warner@lothar.com**20081204210053] 
1812[confwiz.py - removing hardcoded version number
1813secorp@allmydata.com**20081203023831] 
1814[CLI: check for pre-existing aliases in 'tahoe create-alias' and 'tahoe add-alias'
1815warner@lothar.com**20081203022022] 
1816[test_cli: pass rc out of do_cli() too
1817warner@lothar.com**20081203020828] 
1818[setup: one more address to send release announcements to
1819zooko@zooko.com**20081203015040
1820 Ignore-this: 87cb7a9c3a1810ff0c87908548027ac5
1821] 
1822[setup: another note about the process of making a tahoe release: mail to duplicity-talk@nongnu.org
1823zooko@zooko.com**20081203014414
1824 Ignore-this: 77ffd6f7412cdc3283c1450cfde9fdf1
1825] 
1826[test_storage.py: more windows-vs-readonly-storage fixes
1827warner@lothar.com**20081203014102] 
1828[docs/webapi.txt: update helper section to discuss tahoe.cfg
1829warner@lothar.com**20081203010726] 
1830[docs/webapi.txt: update to discuss tahoe.cfg, not BASEDIR/webport
1831warner@lothar.com**20081203010612] 
1832[storage.py: oops, fix windows again, readonly_storage wasn't getting picked up properly
1833warner@lothar.com**20081203010317] 
1834[test_download.py: remove extra base32 import
1835warner@lothar.com**20081203003126] 
1836[test_download: test both mutable and immutable pre-generated shares
1837warner@lothar.com**20081203003007] 
1838[test_download.py: added 'known-answer-tests', to make sure current code can download a file that was created by earlier code
1839warner@lothar.com**20081203002208] 
1840[docs/configuration.txt: fix minor typo
1841warner@lothar.com**20081202215101] 
1842[storage.py: unbreak readonly_storage=True on windows
1843warner@allmydata.com**20081202014946] 
1844[#542 'tahoe create-key-generator': fix the .tac file this creates to be compatible with modern code, add a test
1845warner@allmydata.com**20081201234721] 
1846[storage.py: fix minor typo in comment
1847warner@lothar.com**20081201232540] 
1848[storage: replace sizelimit with reserved_space, make the stats 'disk_avail' number incorporate this reservation
1849warner@lothar.com**20081201232421] 
1850[util/abbreviate: add abbreviated-size parser
1851warner@lothar.com**20081201232412] 
1852[wui/wapi: change the default port number from 8123 to 3456 to avoid conflict with TorButton
1853zooko@zooko.com**20081125235737
1854 Ignore-this: 47ea30bafd5917a7e1dbc88aa0190f8e
1855 See ticket #536 for details.
1856] 
1857[setup: move the requirement on simplejson from setup.py to _auto_deps.py, and loosen it from >= 2.0.5 to > 1.8.1
1858zooko@zooko.com**20081125203751
1859 Ignore-this: 4403781ef878547ee09e7e010eb5b49a
1860 We'll see if this fixes the tests on all of our current buildslaves, and if it does then I'll be happy to leave it at "> 1.8.1" for now, even though I don't know exactly what versions of simplejson changed exactly what behavior that interacts with exactly what environment.  See http://allmydata.org/trac/tahoe/ticket/534 for uncertainties.
1861 
1862] 
1863[setup.py: Require simplejson version >= 2.0.5
1864francois@ctrlaltdel.ch**20081125171727] 
1865[mutable publish: reinstate the foolscap-reference-token-bug workaround, both for the original reasons and because of an apparent new foolscap bug that's triggered by reference tokens. See #541 for details.
1866warner@allmydata.com**20081125202735] 
1867[setup: fix missing import -- thanks, pyflakes
1868zooko@zooko.com**20081125155528
1869 Ignore-this: 1fc042da2882b7b2f71cde93eb234a47
1870] 
1871[setup: correctly detect Arch Linux in platform description
1872zooko@zooko.com**20081125155118
1873 Ignore-this: 37a7648f190679d3e973270a73133189
1874] 
1875[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.
1876warner@allmydata.com**20081124204046] 
1877[control.py: use get_buckets() instead of get_version() to measure ping time, because the latter changed recently
1878warner@lothar.com**20081123051323] 
1879[upload: when using a Helper, insist that it provide protocols/helper/v1 . Related to #538.
1880warner@allmydata.com**20081122022932] 
1881[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.
1882warner@allmydata.com**20081122022812] 
1883[#538: fetch version and attach to the rref. Make IntroducerClient demand v1 support.
1884warner@allmydata.com**20081122020727] 
1885[#538: add remote_get_version() to four main Referenceable objects: Introducer Service, Storage Server, Helper, CHK Upload Helper. Remove unused storage-server get_versions().
1886warner@allmydata.com**20081121234352] 
1887[setup: turn off --multi-version until I can figure out why it breaks test_runner
1888zooko@zooko.com**20081121043645
1889 Ignore-this: 36bf5db4122e6bc4e12588d9717a1e32
1890] 
1891[setup: require setuptools >= 0.6c7 to run
1892zooko@zooko.com**20081121043611
1893 Ignore-this: e92e07c7e8edbaadcd44db7e8f4a028
1894] 
1895[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
1896zooko@zooko.com**20081120201545
1897 Ignore-this: 898f21fc1b16ae39c292fdd1ef42c446
1898] 
1899[setup: we require setuptools > 0.6a9 in order to parse requirements that have a dot in them such as "zope.interface"
1900zooko@zooko.com**20081120151503
1901 Ignore-this: a6304de8f1f44defc50438d72a13e58f
1902 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.
1903] 
1904[test_dirnode: add an explainError call
1905warner@allmydata.com**20081119220212] 
1906[manifest: add storage-index strings to the json results
1907warner@allmydata.com**20081119220027] 
1908[manifest: include stats in results. webapi is unchanged.
1909warner@allmydata.com**20081119210347] 
1910[misc/spacetime/diskwatcher.tac: remove dead code
1911warner@allmydata.com**20081119200552] 
1912[mutable: respect the new tahoe.cfg 'shares.needed' and 'shares.total' settings
1913warner@allmydata.com**20081119200501] 
1914[oops, update tests to match 'tahoe stats' change
1915warner@allmydata.com**20081119023259] 
1916[cli: tahoe stats: abbreviate total sizes too
1917warner@allmydata.com**20081119022816] 
1918[cli: 'tahoe stats': add abbreviated size to the histogram. Not sure this actually improves things.
1919warner@allmydata.com**20081119021736] 
1920[util/abbreviate: little utility to abbreviate seconds and bytes
1921warner@allmydata.com**20081119021142] 
1922[cli: add 'tahoe check' and 'tahoe deep-check' commands, with primitive reporting code
1923warner@allmydata.com**20081119011210] 
1924[cli: factor out slow-http-operation to a separate module
1925warner@allmydata.com**20081119011113] 
1926[cli: tahoe stats/manifest: change --verbose to --raw, since I want -v for --verify for check/deep-check/repair
1927warner@allmydata.com**20081119003608] 
1928[test_system: make 'where' strings more helpful, to track down test failures better
1929warner@allmydata.com**20081119002950] 
1930[webapi: add 'summary' string to checker results JSON
1931warner@allmydata.com**20081119002826] 
1932[munin/tahoe_disktotal: add a 'disk used' line, since it will always be less than disktotal
1933warner@allmydata.com**20081118214431] 
1934[munin/tahoe_introstats: add line for distinct-storage-hosts (which counts machines instead of nodes)
1935warner@allmydata.com**20081118213238] 
1936[webapi: introducer stats: add 'announcement_distinct_hosts' to the t=json form, to show how many distinct hosts are providing e.g. storage services
1937warner@allmydata.com**20081118213015] 
1938['tahoe create-key-generator': fix help text
1939warner@allmydata.com**20081118074758] 
1940[#330: convert stats-gatherer into a .tac file service, add 'tahoe create-stats-gatherer'
1941warner@allmydata.com**20081118074620] 
1942[munin/tahoe_diskused: new plugin to show total disk space used across the grid
1943warner@allmydata.com**20081118072525] 
1944[munin/tahoe_disktotal: new plugin to show total disk space (used and unused) in the grid
1945warner@allmydata.com**20081118065101] 
1946[tahoe.cfg: add controls for k and N (and shares-of-happiness)
1947warner@allmydata.com**20081118062944] 
1948[cli: add tests for 'tahoe stats --verbose'
1949warner@allmydata.com**20081118041114] 
1950[cli: add --verbose to 'tahoe manifest', to show the raw JSON data
1951warner@allmydata.com**20081118040219] 
1952[diskwatcher: record total-space (the size of the disk as reported by df) in the db, report it to HTTP clients. This will involve a 50-item-per-second upgrade process when it is first used on old data
1953warner@allmydata.com**20081118034516] 
1954[dirnode manifest/stats: process more than one LIT file per tree; we were accidentally ignoring all but the first
1955warner@allmydata.com**20081115045049] 
1956[limiter.py: fix stack blowout by inserting an eventual-send between _done and maybe_start_task. This was causing failures during a 'tahoe manifest' of a large set of directories
1957warner@allmydata.com**20081115031144] 
1958[New credit file entry
1959francois@ctrlaltdel.ch**20081114140548] 
1960[test_cli.py: Ensure that we can read our uploaded files back
1961francois@ctrlaltdel.ch**20081114134458] 
1962[test_cli.py: use str objects instead of unicode ones
1963francois@ctrlaltdel.ch**20081114134137
1964 
1965 This will hopefully fix failing tests with LC_ALL=C
1966] 
1967[CLI: add 'tahoe stats', to run start-deep-stats and print the results
1968warner@allmydata.com**20081114014350] 
1969[test_system.py: fix new 'tahoe manifest' tests to not break on windows, by providing --node-directory instead of --node-url
1970warner@allmydata.com**20081113212748] 
1971[test for bug #534, unicode filenames
1972francois@ctrlaltdel.ch**20081113111951
1973 
1974 This test assure that uploading a file whose name contains unicode character
1975 doesn't prevent further uploads in the same directory.
1976] 
1977[Fix an filename encoding issue with "tahoe cp"
1978francois@ctrlaltdel.ch**20081111200803] 
1979[web/info.py: use 128-bit ophandles instead of 64-bit
1980warner@allmydata.com**20081113021842] 
1981[CLI: add 'tahoe manifest', which takes a directory and returns a list of things you can reach from it
1982warner@allmydata.com**20081113021725] 
1983[create_node.py: also remove now-unused import of pkg_resources
1984warner@allmydata.com**20081113004716] 
1985[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).
1986warner@allmydata.com**20081113004458] 
1987[setup: remove pkg_resources.require() from create_node.py and add it to runner.py
1988zooko@zooko.com**20081112212503
1989 Ignore-this: 763324202456a59b833b14eb4027171
1990 Brian correctly points out that the latter is an entry point.
1991] 
1992[docs: fix cutnpasto in source:docs/logging.txt
1993zooko@zooko.com**19700105140422
1994 Ignore-this: de0f9ceb8e0ca4c158492ad2f9a6ba6f
1995] 
1996[tests: fix comment
1997zooko@zooko.com**19700105101055
1998 Ignore-this: fabedea917895568b1fca75a480111b9
1999] 
2000[tests: add tahoe_cp to the list of scripts that we don't actually have tests for yet
2001zooko@zooko.com**19700105100058
2002 Ignore-this: ac89583992fb1b48d9a4680344569d91
2003] 
2004[setup: the .tac files created by create_node.py call pkg_resources.require() so that they can load tahoe and twisted packages which were installed with setuptools multi-version mode
2005zooko@zooko.com**19700101235005
2006 Ignore-this: e1db03f86e0407a91087d8ada6b477fd
2007 Also the create_node.py script itself uses pkg_resources.require() for the same reason.
2008] 
2009[web/info: don't let an unrecoverable file break the page (show ? instead of a size)
2010warner@allmydata.com**20081107045117] 
2011[checker: add is_recoverable() to checker results, make our stub immutable-verifier not throw an exception on unrecoverable files, add tests
2012warner@allmydata.com**20081107043547] 
2013[monitor: update interface definition: get_status() can return a Failure
2014warner@allmydata.com**20081107035452] 
2015[web/operations.py: if the operation failed, render the Failure
2016warner@allmydata.com**20081107035309] 
2017[undoing test change for native_client.php
2018secorp@allmydata.com**20081106220310] 
2019[NEWS: more minor edits
2020warner@allmydata.com**20081106223517] 
2021[NEWS: minor edits
2022warner@allmydata.com**20081106223356] 
2023[NEWS: mention SFTP server
2024warner@allmydata.com**20081106014153] 
2025[client.py: oops, update FTP/SFTP config names to match current docs
2026warner@allmydata.com**20081106013442] 
2027[remove duplicate+old docs/NEWS. The top-level NEWS file is the canonical one.
2028warner@allmydata.com**20081106013224] 
2029[SFTP/FTP: merge user/account code, merge docs
2030warner@allmydata.com**20081106012558] 
2031[docs: move webapi/ftp/sftp into a new frontends/ directory
2032warner@allmydata.com**20081105233050] 
2033[ftp/sftp: move to a new frontends/ directory in preparation for factoring out password-auth component
2034warner@allmydata.com**20081105200733] 
2035[sftpd: minor debug-logging tweak
2036warner@allmydata.com**20081105194511] 
2037[confwiz.py - trying out a new configuration site
2038secorp@allmydata.com**20081105011830] 
2039[ftpd: include an (unused) avatar logout callback
2040warner@allmydata.com**20081105000104] 
2041[#531: implement an SFTP frontend. Mostly works, still lots of debug messages. Still needs tests and auth-by-pubkey in accounts.file
2042warner@allmydata.com**20081105000022] 
2043[docs/ftp.txt: correct Twisted dependency: we don't need VFS, we can use a release, as long as you apply the patch
2044warner@allmydata.com**20081104235840] 
2045[shebang: replace "/usr/bin/python" with "/usr/bin/env python"
2046zooko@zooko.com**20081105000306
2047 Ignore-this: 8ae33a8a7828fa7423422e252f2cfd74
2048] 
2049[misc/fixshebangs.py
2050zooko@zooko.com**20081105000130
2051 Ignore-this: 13b03ea2d2ed8982f8346a827b46bd2e
2052] 
2053[util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile
2054zooko@zooko.com**20081104234715
2055 Ignore-this: f1131e9b8f249b5f10be4cba2aeb6118
2056] 
2057[immutable: tolerate filenode.read() with a size= that's too big, rather than hanging
2058warner@allmydata.com**20081104212919] 
2059[util: copy in nummedobj from pyutil
2060zooko@zooko.com**20081104195550] 
2061[util: copy in dictutil from pyutil
2062zooko@zooko.com**20081104195327] 
2063[rollback change... move allmydatacontextmenu registration to installer.tmpl in tahoe-w32-client\installer
2064booker@allmydata.com**20081103213647] 
2065[register the AllmydataContextMenu.dll for the context menu handler file sharing shell extension
2066booker@allmydata.com**20081103200027] 
2067[debug catalog-shares: tolerate even more errors on bad files/directories
2068warner@allmydata.com**20081030215447] 
2069[NEWS: update with all user-visible changes since the last update
2070warner@allmydata.com**20081030213604] 
2071[#527: expire the cached files that are used to support Range: headers, every hour, when the file is unused and older than an hour
2072warner@allmydata.com**20081030203909] 
2073[util/cachedir.py: add a cache-directory manager class, which expires+deletes unused files after a while
2074warner@allmydata.com**20081030200120] 
2075[test_cli: try to fix windows again
2076warner@allmydata.com**20081030193204] 
2077[debug/test_cli: fix error handling for catalog-shares, to make the test stop failing on windows
2078warner@allmydata.com**20081030190651] 
2079[web: add 'Repair' button to checker results when they indicate unhealthyness. Also add the object's uri to the CheckerResults instance.
2080warner@allmydata.com**20081030010917] 
2081[create_node.py: add 'web.static = public_html' to the initial tahoe.cfg
2082warner@allmydata.com**20081030001336] 
2083[webapi: serve the /static URL tree from /public_html (configurable)
2084warner@allmydata.com**20081029223431] 
2085[catalog-shares command: tolerate errors, log them to stderr, handle v2-immutable shares
2086warner@allmydata.com**20081029221010] 
2087[test_web.py: one more line of test coverage
2088warner@allmydata.com**20081029050015] 
2089[test_web: improve test coverage of PUT DIRURL t=uri replace=false
2090warner@allmydata.com**20081029045744] 
2091[web: test (and fix) PUT DIRURL t=uri, which replaces a directory in-place with some other cap
2092warner@allmydata.com**20081029045446] 
2093[web/directory.py: slight shuffle to improve test coverage
2094warner@allmydata.com**20081029045406] 
2095[test_client.py: improve test coverage a bit
2096warner@allmydata.com**20081029044335] 
2097[node.py: remove unused old_log() function
2098warner@allmydata.com**20081029043558] 
2099[node.py: remove support for the old BASEDIR/authorized_keys.PORT file
2100warner@allmydata.com**20081029043420] 
2101[move testutil into test/common_util.py, since it doesn't count as 'code under test' for our pyflakes numbers
2102warner@allmydata.com**20081029042831] 
2103[util: move PollMixin to a separate file (pollmixin.py), so testutil can be moved into test/
2104warner@allmydata.com**20081029041548] 
2105[control.py: removed unused testutil.PollMixin
2106warner@allmydata.com**20081029040359] 
2107[web/filenode: oops, fix test failures, not everything has a storage index
2108warner@allmydata.com**20081029011720] 
2109[web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
2110warner@allmydata.com**20081029010103] 
2111[#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.
2112warner@allmydata.com**20081029005618] 
2113[#527: support HTTP 'Range:' requests, using a cachefile. Adds filenode.read(consumer, offset, size) method. Still needs: cache expiration, reduced alacrity.
2114warner@lothar.com**20081028204104] 
2115[iputil.py: avoid a DNS lookup at startup (which may timeout tests when run on a partially-offline host) by using 198.41.0.4 instead of A.ROOT-SERVERS.NET
2116warner@lothar.com**20081028203646] 
2117[interfaces.py: promote immutable.encode.NotEnoughSharesError.. it isn't just for immutable files any more
2118warner@lothar.com**20081027203449] 
2119[interfaces.IMutableFileNode.download_best_version(): fix return value
2120warner@lothar.com**20081027202046] 
2121[dirnode lookup: use distinct NoSuchChildError instead of the generic KeyError when a child can't be found
2122warner@lothar.com**20081027201525] 
2123[storage: don't use colons in the corruption-advisory filename, since windows can't tolerate them
2124warner@lothar.com**20081026024633] 
2125[mutable: call remove_advise_corrupt_share when we see share corruption in mapupdate/download/check, tolerate servers that do not implement it
2126warner@lothar.com**20081024202128] 
2127[storage: add remote_advise_corrupt_share, for clients to tell storage servers about share corruption that they've discovered. The server logs the report.
2128warner@lothar.com**20081024185248] 
2129[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
2130warner@lothar.com**20081024040024] 
2131[test_web.test_POST_DIRURL_deepcheck: confirm that /operations/HANDLE/ works with or without the slash
2132warner@lothar.com**20081024021759] 
2133[web/checker_results.py: remove dead code
2134warner@lothar.com**20081024001717] 
2135[test_web: more test coverage
2136warner@lothar.com**20081024001118] 
2137[webapi: fix t=rename from==to, it used to delete the file
2138warner@lothar.com**20081023233236] 
2139[test_system: update test to match web checker results
2140warner@lothar.com**20081023233202] 
2141[webapi deep-check: show the root as <root>, rather than an empty path string
2142warner@lothar.com**20081023230359] 
2143[mutable/checker: announce the mapupdate op on the 'recent uploads+downloads' page
2144warner@lothar.com**20081023230319] 
2145[scripts/create_node.py: remove empty-string defaults for --introducer= and --nickname=
2146warner@lothar.com**20081023230235] 
2147[deep-check: add webapi links to detailed per-file/dir results
2148warner@lothar.com**20081023230031] 
2149[interface.py: fix typo
2150warner@lothar.com**20081023225936] 
2151[webapi: make the /operations/ 't=status' qualifier optional, remove it from examples
2152warner@lothar.com**20081023225658] 
2153[setup: require the latest version of the setuptools bootstrap egg
2154zooko@zooko.com**20081025152858
2155 Ignore-this: c0c9923ba3008f410d5cc56f2236edb9
2156] 
2157[setup: include _pkgutil.py in setuptools bootstrap egg so that it will work on Python 2.4
2158zooko@zooko.com**20081025152839
2159 Ignore-this: 38d81a037c1a3413d69d580ccb13fd67
2160] 
2161[setup: pretend the tahoe requires twisted to set up, so that twisted will be there for nevow
2162zooko@zooko.com**20081025135042
2163 Ignore-this: 4e6c7e580f7e30df571e2e63be663734
2164] 
2165[setup: require the SVN snapshot of setuptools to build
2166zooko@zooko.com**20081025134959
2167 Ignore-this: f68077dd10d85a71a1e06678365e6753
2168] 
2169[setup: remove old bundled setuptools-0.6c9
2170zooko@zooko.com**20081025134947
2171 Ignore-this: 3a95dd72346a60b39ffd6ddfadd1b3a8
2172] 
2173[setup: bundle an SVN snapshot of setuptools instead of the most recent stable release of setuptools
2174zooko@zooko.com**20081025134837
2175 Ignore-this: 9a0c9a34b186b972650cf9455edb0d28
2176 This SVN snapshot fixes a problem that prevents the setting up of nevow:
2177 http://bugs.python.org/setuptools/issue20
2178] 
2179[setup: reorder dependencies to be sort of increasing order of how much they depend on other stuff
2180zooko@zooko.com**20081025134739
2181 Ignore-this: 6d636aaf5deb37cbf18172824b0bbf87
2182 Not that the order makes any different to how it gets installed, as far as I can tell.
2183] 
2184[docs: add a note that when you make a new tahoe release, you should send the announcement to fuse-devel@lists.sourceforge.net
2185zooko@zooko.com**20081023213658] 
2186[web/info.py: fix 'Check This Object' link, for files it was checking the parent directory by mistake
2187warner@lothar.com**20081022171056] 
2188[#514: add meta-refresh=60 tag to t=status page for incomplete operations
2189warner@lothar.com**20081022164842] 
2190[test_dirnode.py: oops, missed a Monitor(), unbreak tests
2191warner@lothar.com**20081022085054] 
2192[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
2193warner@lothar.com**20081022084237] 
2194[more #514: pass a Monitor to all checker operations, make mutable-checker honor the cancel flag
2195warner@lothar.com**20081022083818] 
2196[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.
2197warner@lothar.com**20081022075552] 
2198[more #514 log-webop status/cancel: add handle-expiration, test coverage
2199warner@lothar.com**20081022051354] 
2200[webapi.txt: improve t=deep-size output docs
2201warner@lothar.com**20081022005331] 
2202[#514: improve test coverage
2203warner@lothar.com**20081022005256] 
2204[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.
2205warner@lothar.com**20081022000307] 
2206[setup: change ez_setup.py to install setuptools-0.6c9
2207zooko@zooko.com**20080930200502] 
2208[setup: bundle setuptools-0.6c9
2209zooko@zooko.com**20080930200448] 
2210[setup: remove bundled setuptools-0.6c8
2211zooko@zooko.com**20080930200336] 
2212[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)
2213zooko@zooko.com**20081021163200
2214 add classifiers showing with which versions of Python it is known to work.
2215] 
2216[* fuse/runtests: added --catch-up-pause option
2217robk-tahoe@allmydata.com**20081021002902
2218 
2219 On linux, write tests are failing because data written to fuse isn't showing
2220 up in tahoe by the time it's checked.  it's not clear where this is originating,
2221 since the fuse implementation [should be] waiting for completion of tahoe
2222 operations before returning from its calls.  This adds an option to control the
2223 duration of a pause between the fuse write and the check of tahoe, which is by
2224 default set to 2s on linux, which - somewhat inexplicably - seems to 'fix' the
2225 problem, in as far as it allows tests to complete.
2226 
2227] 
2228[fuse/runtests: include length in drepr() output
2229robk-tahoe@allmydata.com**20081021000159] 
2230[fuse/runtests: make exceptions in 'read_in_random_order' into TestFailures
2231robk-tahoe@allmydata.com**20081020235235] 
2232[fuse/blackmatch: added asynchronous (background) file download
2233robk-tahoe@allmydata.com**20081020233333
2234 
2235 previously, upon opening a file for reading, the open() call would block
2236 while the entire file was retrieved from tahoe into the cache directory.
2237 This change adds a DownloaderWithReadQueue class, and associated plumbing,
2238 such that an open() will return promptly with the download initiated 'in
2239 the background'.  Subsequent read() operations will block until enough
2240 data has been downloaded to satisfy that request.  This provides a behaviour
2241 similar to streaming, i.e. the client application will be able to read
2242 data from the fuse interface while the remainder of the file is still being
2243 downloaded.
2244 
2245] 
2246[fuse/runtests: added 'read_in_random_order' test
2247robk-tahoe@allmydata.com**20081020232427
2248 
2249 this test uploads a test file to tahoe, and then reads the file from fuse,
2250 but reads the blocks of the file in a random order; this is designed to
2251 exercise the asynchronous download feature of blackmatch - where the file
2252 is downloaded from tahoe asynchronously, and rather than blocking open()
2253 for the entirety of the download, instead individual read() calls are
2254 blocked until enough of the file has been downloaded to satisfy them
2255] 
2256[fuse/runtests: added a --no-cleanup option
2257robk-tahoe@allmydata.com**20081020155120
2258 
2259 the code had a 'fullcleanup' flag internally which controlled whether
2260 working directories were cleaned up.  this promotes that to a command
2261 line option (negated) '--no-cleanup' defaulting to False, i.e. do cleanup
2262] 
2263[fuse/runtests: truncate expected file contents in reported error message
2264robk-tahoe@allmydata.com**20081020144523
2265 
2266 this avoids dumping the repr of 1Mb of random data to stdout in the event
2267 of a test failure, but rather just dumps the start/end of the errant strings
2268 if the amount of data is > 200 chars repr'd
2269] 
2270[fuse/blackmatch: fix platform specific problems in repr_flags
2271robk-tahoe@allmydata.com**20081020143052
2272 
2273 the repr_flags debug/logging function had a list of fields from the os
2274 module that might be passed into an open() call, but it included at
2275 least one which was available on the mac but not on linux. symmetrically
2276 linux has numerous flags which are not present on the mac. the repr_flags
2277 function is now tolerant of flags not being present, and has an expanded
2278 list of flags
2279] 
2280[makefile: added 'fuse-test' target to makefile, to run 'runtests'
2281robk-tahoe@allmydata.com**20081019132518] 
2282[fuse/runtests: added a 'todo' flag, surpressing failure for implementations not expected to pass
2283robk-tahoe@allmydata.com**20081019131600
2284 
2285 since the current tests assume that the implementation responds to changes made
2286 to tahoe after mount, and impl_b prefetches and cached directory data, impl_b
2287 fails the current 'read' test suite.
2288 
2289 rather than reflect that problem in the overall failure of the runtests exit
2290 code, this adds a 'todo' flag to the implementations table, and sets the todo
2291 flag for impl_b.  Thus errors will therein be reported in output, but not cause
2292 a failing exit code.
2293] 
2294[fuse/runtests: made runtests exit code depend on success
2295robk-tahoe@allmydata.com**20081017180058
2296 
2297 return an exit code of 0 only if no tests failed, and 1 in the case of
2298 linkage error, test setup failure, or individual test case failure
2299 
2300] 
2301[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
2302warner@lothar.com**20081020172208] 
2303[NEWS: update to summarize all changes since the last update
2304warner@lothar.com**20081020164047] 
2305[fuse/runtest: make removal of webport file soft
2306robk-tahoe@allmydata.com**20081017030154
2307 
2308 previously the runtests suite removed the webport file created by
2309 tahoe create-client in all but the first node.  now that the node config
2310 is in tahoe.cfg by default this file might not exist.
2311] 
2312[fuse/blackmatch: update json handling to support simplejson v2
2313robk-tahoe@allmydata.com**20081017025931
2314 
2315 simplejson v2 returns strings as either unicode or str, depending upon its
2316 mood.  thus the interpretation of the node's json repr of a directory, and
2317 the serialisation of strings in the json based rpc both exploded when built
2318 against simplejson v2.  this makes both of these places liberal in their
2319 acceptance of either str or unicode.
2320] 
2321[fuse/blackmatch: log exception in server startup
2322robk-tahoe@allmydata.com**20081017014650
2323 
2324 humphf.  my build runs the fuse stuff fine, but the build from the buildslave
2325 doesn't seem to start up properly.  hopefully this will elicit some useful info
2326] 
2327[fuse/blackmatch: add readability to some logging, fix a permissions problem
2328robk-tahoe@allmydata.com**20081017004421
2329 
2330 adds a couple of functions to unpack 'mode' and 'flags' for open() calls, to
2331 facilitate debugging.
2332 
2333 adds a fix to ensure that all tmp files created for writing are opened with
2334 permissions 0600 - one problem I had with testing with the Finder was that
2335 files were being opened write only (0200) and were then failing to upload
2336 to tahoe due to internal permission denied errors.
2337 
2338 there remain a variety of problems with finder access which I'm unable to
2339 comprehend at this time.  sometimes copies to tahoe will work fine, sometimes
2340 they yield "the finder cannot complete the operation because some data ...
2341 could not be read or written. (Error code -36)" sometimes "You may need to
2342 enter the name and password for an administrator on this computer to change
2343 the item" sometimes "The operation cannot be completed because an item with
2344 the name ... already exists." and sometimes "The operation cannot be completed
2345 because the item ... is locked."  What seems to be absent is rhyme or reason.
2346 
2347 unix operations (cp, mv) work fine, rsync works fine.
2348 
2349] 
2350[fuse/blackmatch: fix linkage problems with daemonize
2351robk-tahoe@allmydata.com**20081016163637
2352 
2353 the daemonize() function imported from twisted was causing problems when
2354 run from a frozen (py2app) build.  I simply copied the daemonize function
2355 into this file, and that fixes the problem.
2356 
2357 also removed a couple of lines of debugging spam that slipped through.
2358 
2359] 
2360[gui/macapp: minor bugfixes
2361robk-tahoe@allmydata.com**20081016163052
2362 
2363 though it seemed to work before the 'fstype' passed to fuse of 'allmydata' was
2364 today throwing errors that len(fstype) must be at most 7.
2365 
2366 fixed a typo in changes to 'mount_filesystem()' args
2367 
2368 bumped the delay between mounting a filesystem and 'open'ing it in Finder to
2369 4s, as it seems to take a little longer to mount now the client and server
2370 fuse processes need to coordinate.
2371] 
2372[fuse/blackmatch: split into client/server (twisted server)
2373robk-tahoe@allmydata.com**20081016150846
2374 
2375 This implements a client/server split for blackmatch, where the client
2376 implements the fuse_main bindings and a simple blocking rpc client mechanism.
2377 The server implements the other half of that rpc mechanism, and contains all
2378 the actual logic for interpreting fuse requests in the context of the on disk
2379 cache and requests to the tahoe node.  The server is based on a twisted reactor.
2380 
2381 The rpc mechanism implements a simple method dispatch including marshalling,
2382 using json, of basic inert data types, in a flat namespace (no objects).
2383 The client side is written in a blocking idiom, to interface with the threading
2384 model used by the fuse_main bindings, whereas the server side is written for a
2385 twisted reactor-based environment, intended to facilitate implementing more
2386 sophisticated logic in that paradigm.  The two communicate over a unix domain
2387 socket, allocated within the nodedir.
2388 
2389 Command line usage is unchanged; the server is launched automatically by the
2390 client. The server daemonizes itself, to avoid preventing the original parent
2391 process (e.g. 'runtests') from waiting upon the server exiting.
2392 
2393 The client keeps open a 'keepalive' connection to the server; upon loss thereof
2394 the server will exit. This addresses the fact that the python-fuse bindings
2395 provide no notification of exit of the client process upon unmount.
2396 
2397 The client thus provides a relatively thin 'shim' proxying requests from the
2398 fuse_main bindings across the rpc to the server process, which handles the
2399 logic behind each request. 
2400 
2401 For the time being, a '--no-split' option is provided to surpress the splitting
2402 into client/server, yielding the prior behaviour.  Once the server logic gets
2403 more complex and more entrenched in a twisted idiom, this might be removed.
2404 The 'runtests' test harness currently tests both modes, as 'impl_c' and
2405 'impl_c_no_split'
2406 
2407] 
2408[fuse/blackmatch: 'flatten' the fuse api implementation
2409robk-tahoe@allmydata.com**20081016143547
2410 
2411 the previous revision of blackmatch used a file_class to delegate all fuse
2412 api operations on files to a specific per-file class, which is an option
2413 given by the python-fuse bindings.
2414 
2415 this is a pre-cursor to the 'split' client/server version, which uses a
2416 simple, moreover flat, rpc mechanism to broker access to methods.
2417] 
2418[fuse/runtests: disable impl_a/impl_b on mac, as they don't actually work.
2419robk-tahoe@allmydata.com**20081016143232] 
2420[fuse/runtests: added write_partial_overwrite test
2421robk-tahoe@allmydata.com**20081016142926
2422 
2423 this tests opening a file for update, overwriting a small part of it, and
2424 ensuring that the end result constitutes an overwrite of the original file.
2425 This tests, e.g. the implementation doesn' open a 'fresh' file but does in
2426 fact initialise the file to be uploaded with the contents of any extant
2427 file before applying updates
2428 
2429] 
2430[fuse/runtests: added --tests, renamed --suites
2431robk-tahoe@allmydata.com**20081016142836
2432 
2433 changed the --tests option to be --suites, as it takes a prefix, e.g. 'read'
2434 'write' (or 'all', the default) and runs those suites which are applicable to
2435 each implementation being tested.
2436 
2437 added a --tests option, which takes a list of tests, e.g. 'read_file_contents'
2438 'write_overlapping_large_writes' and runs all tests specified without regard
2439 to whether the implementation(s) under test are declared to support them.
2440 
2441 this is basically to allow a specific test or two to be run, saving time
2442 during development and debugging by not running the entire suite
2443] 
2444[fuse/runtests: added 'random scatter' write test
2445robk-tahoe@allmydata.com**20081003233436
2446 
2447 this writes the test file in a randomised order, with randomly sized writes.
2448 also for each 'slice' of the file written, a randomly chosen overlapping
2449 write is also made to the file.  this ensures that the file will be written
2450 in its entirety in a thoroughly random order, with many overlapping writes.
2451] 
2452[fuse/runtests: add overlapping write tests
2453robk-tahoe@allmydata.com**20081003224833
2454 
2455 using both small and large blocksizes for writes, write a 1Mb file to fuse
2456 where every write overlaps another.
2457 
2458 This serves a useful purpose - in manual testing of blackmatch some time ago
2459 most operations e.g. bulk copies, worked fine, but using rsync caused data
2460 corruption on most files.  it turned out to be that rsync writes in 64K blocks,
2461 but rather than making the last block short, the last block instead overlaps
2462 the preceding (already written) block.  This revealed a problem where cache
2463 files were being opened 'append' rather than 'write' and hence the overlapping
2464 write to the fuse layer caused the overlapping portion of the file to be
2465 duplicated in cache, leading to oversized and corrupt files being uploaded.
2466] 
2467[fuse/runtests: remove write small file test, as it's subsumed by the tiny_file test
2468robk-tahoe@allmydata.com**20081003223944] 
2469[fuse/runtests: added linear write tests for various block sizes
2470robk-tahoe@allmydata.com**20081003223550
2471 
2472 unit tests to test writing contiguous blocks linearly through the file,
2473 for a variety of block sizes;  'tiny_file' is an entire file fitting within
2474 a single io block / write operation.  'linear_{small,large}_writes' test
2475 a 1Mb file written with each write operation containing significantly less
2476 or more, respecitvely, data than fuse will pass into the implementation as
2477 a single operation (which on the mac at least is 64Kib)
2478] 
2479[fuse/runtests: add a very simple 'write' test
2480robk-tahoe@allmydata.com**20081003172044
2481 
2482 this performs a very simple write through the fuse layer and confirms that
2483 the file is stored correctly into the tahoe mesh.  ('simple' in the sense
2484 that the entire file body fits trivially in a single write() operation,
2485 disk block etc)
2486] 
2487[fuse/runtests: added a --web-open option
2488robk-tahoe@allmydata.com**20081003172026
2489 
2490 similar to the --debug-wait option which causes the test harness to
2491 pause at various stages of the process to facilitate debugging, this
2492 option simplifies that debugging by automatically opening a web browser
2493 to the root dir of that implementation's tests when tests are commenced.
2494 
2495 in addition, if --web-open is specfied but --debug-wait is not, the
2496 harness will still pause after running tests but before tearing down
2497 the tahoe grid - this allows all tests to run to completion, but
2498 provide a debugging hook to investigate the end state of the grid's
2499 contents thereafter.
2500] 
2501[fuse/impl_a: fix a suspected bug in caching
2502robk-tahoe@allmydata.com**20081003171309
2503 
2504 from my examination of the tahoe_fuse ('impl_a') code, it looks like
2505 the intention is to cache the file contents in memory while it's open,
2506 since it does in fact do that.  however it looks like it also ignored
2507 that cache entirely, and made an individual tahoe webapi GET request
2508 for each and every read() operation regardless of the relative size of
2509 the read block and the file in question.
2510 
2511 this changes that to make read() use the data in memory rather than
2512 fetch the data over again.   if there's something more subtle going
2513 on, please let me know.
2514] 
2515[gui/macapp: slew of code cleanup; unmount filesystems on quit
2516robk-tahoe@allmydata.com**20080925233235
2517 
2518 a handful of code cleanup, renaming and refactoring.  basically consolidating
2519 'application logic' (mount/unmount fs) into the 'MacGuiApp' class (the wx.App)
2520 and cleaning up various scoping things around that.  renamed all references to
2521 'app' to refer more clearly to the 'AppContainer' or to the guiapp.
2522 
2523 globally renamed basedir -> nodedir
2524 
2525 also made the guiapp keep a note of each filesystem it mounts, and unmount
2526 them upon 'quit' so as to cleanup the user's environment before the tahoe node
2527 vanishes from out underneath the orphaned tahoe fuse processes
2528 
2529] 
2530[gui/macapp: make submenu of aliases for 'webopen'
2531robk-tahoe@allmydata.com**20080925163919
2532 
2533 this changes the 'open webroot' menu item to be a submenu listing all aliases
2534 defined in ~/.tahoe.  Note that the dock menu does not support submenus, so it
2535 only offers a single 'open webroot' option for the default tahoe: alias.
2536 
2537 I had trouble with this at first and concluded that the submenus didn't work,
2538 and made it a distinct 'WebUI' menu in it's own right.  on further inspection,
2539 there are still problems but they seem to be something like once the dock menu
2540 has been used, sometimes the app's main menubar menus will cease to function,
2541 and this happens regardless of whether submenus or plain simple menus are used.
2542 I have no idea what the peoblem is, but it's not submenu specific.
2543] 
2544[repairer: fix flaw in testutil.flip_one_bit() that Brian pointed out
2545zooko@zooko.com**20081016194848] 
2546[misc/incident-gatherer: add classify_tahoe.py: a foolscap incident-gatherer classification plugin
2547warner@allmydata.com**20081015220940] 
2548[repairer: test all different kinds of corruption that can happen to share files on disk
2549zooko@zooko.com**20081014230920] 
2550[util/time_format.py: accept space separator, add unit tests
2551warner@allmydata.com**20081013225258] 
2552[test_storage: use different filenames, poor stupid windows
2553warner@allmydata.com**20081010021139] 
2554[scripts/debug.py: emit the immutable-share version number, tolerate v2
2555warner@allmydata.com**20081010013422] 
2556[storage.py: improve some precondition() error messages
2557warner@allmydata.com**20081010011425] 
2558[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.
2559warner@allmydata.com**20081010011327] 
2560[debug.py: oops, add missing import for ReadBucketProxy
2561warner@allmydata.com**20081010002922] 
2562[storage: split WriteBucketProxy and ReadBucketProxy out into immutable/layout.py . No behavioral changes.
2563warner@allmydata.com**20081010000800] 
2564[interfaces: loosen a few max-size constraints which would limit us to a mere 1.09 TB maximum file size
2565zooko@zooko.com**20081009191357
2566 
2567 These constraints were originally intended to protect against attacks on the
2568 storage server protocol layer which exhaust memory in the peer.  However,
2569 defending against that sort of DoS is hard -- probably it isn't completely
2570 achieved -- and it costs development time to think about it, and it sometimes
2571 imposes limits on legitimate users which we don't necessarily want to impose.
2572 So, for now we forget about limiting the amount of RAM that a foolscap peer can
2573 cause you to start using.
2574 
2575] 
2576[util/limiter: add a repr
2577warner@allmydata.com**20081007201945] 
2578[dirnode.build_manifest: include node.list in the limiter, that's the most important thing to slow down
2579warner@allmydata.com**20081007201929] 
2580[web/directory: t=manifest output=html: make the caps into clickable hrefs
2581warner@allmydata.com**20081007201845] 
2582[web/directory: factor out the get_root function
2583warner@allmydata.com**20081007201742] 
2584[web/directory.py: remove unused imports
2585warner@allmydata.com**20081007194820] 
2586[test_web: deep-size is more variable than I thought, so assert less
2587warner@allmydata.com**20081007051147] 
2588[web: change t=manifest to return a list of (path,read/writecap) tuples, instead of a list of verifycaps. Add output=html,text,json.
2589warner@allmydata.com**20081007043618] 
2590[web: rewrite t=deep-size in terms of deep-stats, update test to match inclusion of directory sizes
2591warner@allmydata.com**20081007043539] 
2592[ftpd: hush pyflakes
2593warner@allmydata.com**20081007014513] 
2594[ftpd: make sure we're using a patched/fixed Twisted, to avoid confusion later
2595warner@allmydata.com**20081007011411] 
2596[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
2597warner@allmydata.com**20081007010605] 
2598[ftpd: remove debug messages
2599warner@allmydata.com**20081006231620] 
2600[ftpd: add native_client.php -based HTTP authentication scheme
2601warner@allmydata.com**20081006231511] 
2602[ftpd: add ftp.accounts checker, remove InMemoryPasswordChecker
2603warner@allmydata.com**20081006225124] 
2604[test_system: add test coverage for immutable download.ConsumerAdapter, remove debug messages
2605warner@allmydata.com**20081006225037] 
2606[ftp server: initial implementation. Still needs unit tests, custom Twisted patches. For #512
2607warner@allmydata.com**20081006195236] 
2608[test_cli.py: remove unused imports
2609warner@allmydata.com**20081007004204] 
2610[CLI: remove 'tahoe admin generate-keypair', since the pycryptopp ecdsa API is about to change incompatibly. We'll undo this once pycryptopp is updated
2611warner@allmydata.com**20081007002320] 
2612[docs: update architecture.txt 's section on the vdrive a.k.a. filesystem layer
2613zooko@zooko.com**20081006210500
2614 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.
2615] 
2616[dirnode: fix my remarkably-consistent 'metdadata' typo
2617warner@allmydata.com**20081003010845] 
2618[interfaces: fix minor typo
2619warner@allmydata.com**20081003005249] 
2620[dirnode: add get_child_and_metadata_at_path
2621warner@allmydata.com**20081003005203] 
2622[stop using 'as' as an identifier: as with 'with', 'as' has become a reserved word in python 2.6
2623warner@allmydata.com**20081003002749] 
2624[scripts/admin: split up generate_keypair code so that unit tests can use it more easily
2625warner@allmydata.com**20081001235238] 
2626[docs: add some notes about things to do for a Tahoe release on pypi, freshmeat, and launchpad
2627zooko@zooko.com**20081001210703] 
2628[misc/cpu-watcher.tac: use writeaside-and-rename for the history.pickle file
2629warner@allmydata.com**20081001003053] 
2630[misc/spacetime: use async polling so we can add a 60-second timeout, add an index to the 'url' Axiom column for 2x speedup
2631warner@allmydata.com**20080930233448] 
2632[#518: replace various BASEDIR/* config files with a single BASEDIR/tahoe.cfg, with backwards-compatibility of course
2633warner@allmydata.com**20080930232149] 
2634[tolerate simplejson-2.0.0 and newer, which frequently return bytestrings instead of unicode objects. Closes #523
2635warner@allmydata.com**20080930222106] 
2636[munin/tahoe_doomsday: oops, tolerate 'null' in the timeleft results, to unbreak the 2wk/4wk graphs
2637warner@allmydata.com**20080930202051] 
2638[test_node: improve coverage of advertised_ip_addresses a bit
2639warner@allmydata.com**20080930060816] 
2640[testutil.PollMixin: set default timeout (to 100s), emit a more helpful error when the timeout is hit
2641warner@allmydata.com**20080930052309] 
2642[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)
2643zooko@zooko.com**20080926224913] 
2644[repairer: assert that the test code isn't accidentally allowing the repairer code which is being tested to do impossible things
2645zooko@zooko.com**20080926222353] 
2646[repairer: enhance the repairer tests
2647zooko@zooko.com**20080926174719
2648 Make sure the file can actually be downloaded afterward, that it used one of the
2649 deleted and then repaired shares to do so, and that it repairs from multiple
2650 deletions at once (without using more than a reasonable amount of calls to
2651 storage server allocate).
2652] 
2653[netstring: add required_trailer= argument
2654warner@allmydata.com**20080926165754] 
2655[test_netstring.py: move netstring tests to a separate file
2656warner@allmydata.com**20080926165526] 
2657[move netstring() and split_netstring() into a separate util.netstring module
2658warner@allmydata.com**20080926043824] 
2659[repairer: remove a test that doesn't apply to the repair-from-corruption case
2660zooko@zooko.com**20080925220954] 
2661[repairer: add a test that repairer fixes corrupted shares (in addition to the test that it fixes deleted shares)
2662zooko@zooko.com**20080925220712] 
2663[docs: proposed mutable file crypto design with ECDSA, 96-bit private keys, and semi-private keys (from http://allmydata.org/~zooko/lafs.pdf )
2664zooko@zooko.com**20080925213457] 
2665[docs: mutable file crypto design (from http://allmydata.org/~zooko/lafs.pdf )
2666zooko@zooko.com**20080925213433] 
2667[repairer: fix swapped docstrings; thanks Brian
2668zooko@zooko.com**20080925182436] 
2669[trivial: remove unused imports; thanks, pyflakes
2670zooko@zooko.com**20080925180422] 
2671[trivial: remove unused imports -- thanks, pyflakes
2672zooko@zooko.com**20080925173453] 
2673[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
2674zooko@zooko.com**20080925171653
2675 Hm...  "Checker" ought to be renamed to "CheckerRepairer" or "Repairer" at some point...
2676] 
2677[setup: remove a few minimal unit tests from test_filenode which have been obviated by much better tests in test_mutable and test_system
2678zooko@zooko.com**20080925161544] 
2679[gui/macapp: rough cut of ui tweaks; configurability, auto-mount
2680robk-tahoe@allmydata.com**20080925141224
2681 
2682 chatting with peter, two things the mac gui needed were the ability to mount
2683 the 'allmydata drive' automatically upon launching the app, and open the
2684 Finder to reveal it.  (also a request to hide the debug 'open webroot' stuff)
2685 
2686 this (somewhat rough) patch implements all the above as default behaviour
2687 
2688 it also contains a quick configuration mechanism for the gui - rather than a
2689 preferences gui, running with a more 'tahoe' styled mechanism, the contents
2690 of a few optional files can modify the default behaviour, specifically file
2691 in ~/.tahoe/gui.conf control behaviour as follows:
2692 
2693 auto-mount (bool): if set (the default) then the mac app will, upon launch
2694 automatically mount the 'tahoe:' alias with the display name 'Allmydata'
2695 using a mountpoint of ~/.tahoe/mnt/__auto__
2696 
2697 auto-open (bool): if set (the default) then upon mounting a file system
2698 (including the auto-mount if set) finder will be opened to the mountpoint
2699 of the filesystem, which essentially reveals the newly mounted drive in a
2700 Finder window
2701 
2702 show-webopen (bool): if set (false by default) then the 'open webroot'
2703 action will be made available in both the dock and file menus of the app
2704 
2705 daemon-timout (int): sets the daemon-timeout option passed into tahoe fuse
2706 when a filesystem is mounted. this defaults to 5 min
2707 
2708 files of type (int) much, naturally contain a parsable int representation.
2709 files of type (bool) are considered true if their (case-insensitive) contents
2710 are any of ['y', 'yes', 'true', 'on', '1'] and considered false otherwise.
2711 
2712] 
2713[gui/macapp: improve 'about' box
2714robk-tahoe@allmydata.com**20080925135415
2715 
2716 adds exactly 1 metric dollop of professionalism to the previously
2717 rather amateurish looking about box.
2718] 
2719[fuse/impl_c: UNDO --auto-fsid option
2720robk-tahoe@allmydata.com**20080925134730
2721 
2722 rolling back:
2723 
2724 Thu Sep 25 14:42:23 BST 2008  robk-tahoe@allmydata.com
2725   * fuse/impl_c: add --auto-fsid option
2726   
2727   this was inspired by reading the fuse docs and discovering the 'fsid' option
2728   to fuse_main, and was _intended_ to support a sort of 'stability' to the
2729   filesystem (specifically derived from the root-uri mounted, whether directly
2730   or via an alias) to support mac aliases across unmount/remount etc.
2731   
2732   some experimentation shows that that doesn't actually work, and that, at
2733   least for mac aliases in my testing, they're tied to path-to-mountpoint and
2734   not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
2735   is causing weirdness therein.
2736   
2737   at any rate, I'm recording it simply for posterity, in case it turns out to
2738   be useful after all somewhere down the road.
2739   
2740 
2741     M ./contrib/fuse/impl_c/blackmatch.py +13
2742] 
2743[fuse/impl_c: add --auto-fsid option
2744robk-tahoe@allmydata.com**20080925134223
2745 
2746 this was inspired by reading the fuse docs and discovering the 'fsid' option
2747 to fuse_main, and was _intended_ to support a sort of 'stability' to the
2748 filesystem (specifically derived from the root-uri mounted, whether directly
2749 or via an alias) to support mac aliases across unmount/remount etc.
2750 
2751 some experimentation shows that that doesn't actually work, and that, at
2752 least for mac aliases in my testing, they're tied to path-to-mountpoint and
2753 not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
2754 is causing weirdness therein.
2755 
2756 at any rate, I'm recording it simply for posterity, in case it turns out to
2757 be useful after all somewhere down the road.
2758 
2759] 
2760[manhole: be more tolerant of authorized_keys. files in .tahoe
2761robk-tahoe@allmydata.com**20080925031149
2762 
2763 both peter and I independently tried to do the same thing to eliminate the
2764 authorized_keys file which was causing problems with the broken mac build
2765 (c.f. #522) namely mv authorized_keys.8223{,.bak}  but the node is, ahem,
2766 let's say 'intolerant' of the trailing .bak - rather than disable the
2767 manhole as one might expect, it instead causes the node to explode on
2768 startup.  this patch makes it skip over anything that doesn't pass the
2769 'parse this trailing stuff as an int' test.
2770] 
2771[fuse/impl_c: move mac tahoefuse impl out into contrib/fuse
2772robk-tahoe@allmydata.com**20080925014214
2773 
2774 For a variety of reasons, high amongst them the fact that many people
2775 interested in fuse support for tahoe seem to have missed its existence,
2776 the existing fuse implementation for tahoe, previously 'mac/tahoefuse.py'
2777 has been renamed and moved.
2778 
2779 It was suggested that, even though the mac build depends upon it, that
2780 the mac/tahoefuse implementation be moved into contrib/fuse along with
2781 the other fuse implementations.  The fact that it's not as extensively
2782 covered by unit tests as mainline tahoe was given as corroboration.
2783 
2784 In a bid to try and stem the confusion inherent in having tahoe_fuse,
2785 tfuse and tahoefuse jumbled together (not necessarily helped by
2786 referring to them as impl_a, b and c respectively) I'm hereby renaming
2787 tahoefuse as 'blackmatch'  (black match is, per wikipedia "a type of
2788 crude fuse" hey, I'm a punny guy)  Maybe one day it'll be promoted to
2789 be 'quickmatch' instead...
2790 
2791 Anyway, this patch moves mac/tahoefuse.py out to contrib/fuse/impl_c/
2792 as blackmatch.py, and makes appropriate changes to the mac build process
2793 to transclude blackmatch therein.  this leaves the extant fuse.py and
2794 fuseparts business in mac/ as-is and doesn't attempt to address such
2795 issues in contrib/fuse/impl_c.
2796 
2797 it is left as an exercise to the reader (or the reader of a message
2798 to follow) as to how to deal with the 'fuse' python module on the mac.
2799 
2800 as of this time, blackmatch should work on both mac and linux, and
2801 passes the four extant tests in runtests.  (fwiw neither impl_a nor
2802 impl_b have I managed to get working on the mac yet)
2803 
2804 since blackmatch supports a read-write and caching fuse interface to
2805 tahoe, some write tests obviously need to be added to runtests.
2806 
2807] 
2808[macapp: changes to support aliases, updated tahoefuse command line options
2809robk-tahoe@allmydata.com**20080925010128
2810 
2811 the tahoefuse command line options changed to support the runtests harness,
2812 and as part of that gained support for named aliases via --alias
2813 
2814 this changes the mac app's invocation of tahoefuse to match that, and also
2815 changes the gui to present the list of defined aliases as valid mounts
2816 
2817 this replaces the previous logic which examined the ~/.tahoe/private directory
2818 looking for files ending in '.cap' - an ad-hoc alias mechanism.
2819 
2820 if a file is found matching ~/.tahoe/private/ALIASNAME.icns then that will still
2821 be passed to tahoefuse as the icon to display for that filesystem. if no such
2822 file is found, the allmydata icon will be used by default.
2823 
2824 the '-olocal' option is passed to tahoefuse.  this is potentially contentious.
2825 specifically this is telling the OS that this is a 'local' filesystem, which is
2826 intended to be used to locally attached devices.  however leopard (OSX 10.5)
2827 will only display non-local filesystems in the Finder's side bar if they are of
2828 fs types specifically known by Finder to be network file systems (nfs, cifs,
2829 webdav, afp)  hence the -olocal flag is the only way on leopard to cause finder
2830 to display the mounted filesystem in the sidebar, but it displays as a 'device'.
2831 there is a potential (i.e. the fuse docs carry warnings) that this may cause
2832 vague and unspecified undesirable behaviour.
2833 (c.f. http://code.google.com/p/macfuse/wiki/FAQ specifically Q4.3 and Q4.1)
2834 
2835 
2836] 
2837[fuse/impl_c: reworking of mac/tahoefuse, command line options, test integration
2838robk-tahoe@allmydata.com**20080925001535
2839 
2840 a handful of changes to the tahoefuse implementation used by the mac build, to
2841 make command line option parsing more flexible and robust, and moreover to
2842 facilitate integration of this implementation with the 'runtests' test harness
2843 used to test the other two implementations.
2844 
2845 this patch includes;
2846 - improvements to command line option parsing [ see below ]
2847 - support for 'aliases' akin to other tahoe tools
2848 - tweaks to support linux (ubuntu hardy)
2849 
2850 the linux support tweaks are, or at least seem to be, a result of the fact that
2851 hardy ships with fuse 0.2pre3, as opposed to the fuse0.2 that macfuse is based
2852 upon.  at least the versions I was working with have discrepencies in their
2853 interfaces, but on reflection this is probably a 'python-fuse' version issue
2854 rather than fuse per se.  At any rate, the fixes to handling the Stat objects
2855 should be safe against either version, it's just that the bindings on hardy
2856 lacked code that was in the 'fuse' python module on the mac...
2857 
2858 command line options:
2859 
2860 the need for more flexible invocation in support of the runtests harness led
2861 me to rework the argument parsing from some simple positional hacks with a
2862 pass-through of the remainder to the fuse binding's 'fuse_main' to a system
2863 using twisted.usage to parse arguments, and having just one option '-o' being
2864 explicitly a pass-through for -o options to fuse_main. the options are now:
2865 
2866 --node-directory NODEDIR : this is used to look up the node-url to connect
2867 to if that's not specified concretely on the command line, and also used to
2868 determine the location of the cache directory used by the implementation,
2869 specifically '_cache' within the nodedir.  default value: ~/.tahoe
2870 
2871 --node-url NODEURL : specify a node-url taking precendence over that found
2872 in the node.url file within the nodedir
2873 
2874 --alias ALIAS : specifies the named alias should be mounted. a lookup is
2875 performed in the alias table within 'nodedir' to find the root dir cap
2876 the named alias must exist in the alias table of the specified nodedir
2877 
2878 --root-uri ROOTURI : specifies that the given directory uri should be mounted
2879 
2880 at least one of --alias and --root-uri must be given (which directory to mount
2881 must be specified somehow)  if both are given --alias takes precedence.
2882 
2883 --cache-timeout TIMEOUTSECS : specifies the number of seconds that cached
2884 directory data should be considered valid for.  this tahoefuse implementation
2885 implements directory caching for a limited time; largely because the mac (i.e.
2886 the Finder in particular) tends to make a large number of requests in quick
2887 successsion when browsing the filesystem.  on the flip side, the 'runtests'
2888 unit tests fail in the face of such caching because the changes made to the
2889 underlying tahoe directories are not reflected in the fuse presentation.  by
2890 specifying a cache-timeout of 0 seconds, runtests can force the fuse layer
2891 into refetching directory data upon each request.
2892 
2893 any number of -oname=value options may be specified on the command line,
2894 and they will all be passed into the underlying fuse_main call.
2895 
2896 a single non-optional argument, the mountpoint, must also be given.
2897 
2898 
2899 
2900] 
2901[fuse/tests: slew of changes to fuse 'runtests'
2902robk-tahoe@allmydata.com**20080924183601
2903 
2904 This patch makes a significant number of changes to the fuse 'runtests' script
2905 which stem from my efforts to integrate the third fuse implementation into this
2906 framework.  Perhaps not all were necessary to that end, and I beg nejucomo's
2907 forebearance if I got too carried away.
2908 
2909 - cleaned up the blank lines; imho blank lines should be empty
2910 
2911 - made the unmount command switch based on platform, since macfuse just uses
2912 'umount' not the 'fusermount' command (which doesn't exist)
2913 
2914 - made the expected working dir for runtests the contrib/fuse dir, not the
2915 top-level tahoe source tree - see also discussion of --path-to-tahoe below
2916 
2917 - significantly reworked the ImplProcManager class.  rather than subclassing
2918 for each fuse implementation to be tested, the new version is based on
2919 instantiating objects and providing relevant config info to the constructor.
2920 this was motivated by a desire to eliminate the duplication of similar but
2921 subtly different code between instances, framed by consideration of increasing
2922 the number of platforms and implementations involved. each implementation to
2923 test is thus reduced to the pertinent import and an entry in the
2924 'implementations' table defining how to handle that implementation. this also
2925 provides a way to specify which sets of tests to run for each implementation,
2926 more on that below.
2927 
2928 
2929 - significantly reworked the command line options parsing, using twisted.usage;
2930 
2931 what used to be a single optional argument is now represented by the
2932 --test-type option which allows one to choose between running unittests, the
2933 system tests, or both.
2934 
2935 the --implementations option allows for a specific (comma-separated) list of
2936 implemenations to be tested, or the default 'all'
2937 
2938 the --tests option allows for a specific (comma-separated) list of tests sets
2939 to be run, or the default 'all'.  note that only the intersection of tests
2940 requested on the command line and tests relevant to each implementation will
2941 be run. see below for more on tests sets.
2942 
2943 the --path-to-tahoe open allows for the path to the 'tahoe' executable to be
2944 specified. it defaults to '../../bin/tahoe' which is the location of the tahoe
2945 script in the source tree relative to the contrib/fuse dir by default.
2946 
2947 the --tmp-dir option controls where temporary directories (and hence
2948 mountpoints) are created during the test.  this defaults to /tmp - a change
2949 from the previous behaviour of using the system default dir for calls to
2950 tempfile.mkdtemp(), a behaviour which can be obtained by providing an empty
2951 value, e.g. "--tmp-dir="
2952 
2953 the --debug-wait flag causes the test runner to pause waiting upon user
2954 input at various stages through the testing, which facilitates debugging e.g.
2955 by allowing the user to open a browser and explore or modify the contents of
2956 the ephemeral grid after it has been instantiated but before tests are run,
2957 or make environmental adjustments before actually triggering fuse mounts etc.
2958 note that the webapi url for the first client node is printed out upon its
2959 startup to facilitate this sort of debugging also.
2960 
2961 
2962 - the default tmp dir was changed, and made configurable. previously the
2963 default behaviour of tempfile.mkdtemp() was used.  it turns out that, at least
2964 on the mac, that led to temporary directories to be created in a location
2965 which ultimately led to mountpoint paths longer than could be handled by
2966 macfuse - specifically mounted filesystems could not be unmounted and would
2967 'leak'. by changing the default location to be rooted at /tmp this leads to
2968 mountpoint paths short enough to be supported without problems.
2969 
2970 - tests are now grouped into 'sets' by method name prefix.  all the existing
2971 tests have been moved into the 'read' set, i.e. with method names starting
2972 'test_read_'. this is intended to facilitate the fact that some implementations
2973 are read-only, and some support write, so the applicability of tests will vary
2974 by implementation. the 'implementations' table, which governs the configuration
2975 of the ImplProcManager responsible for a given implementation, provides a list
2976 of 'test' (i.e test set names) which are applicable to that implementation.
2977 note no 'write' tests yet exist, this is merely laying the groundwork.
2978 
2979 - the 'expected output' of the tahoe command, which is checked for 'surprising'
2980 output by regex match, can be confused by spurious output from libraries.
2981 specfically, testing on the mac produced a warning message about zope interface
2982 resolution various multiple eggs.  the 'check_tahoe_output()' function now has
2983 a list of 'ignorable_lines' (each a regex) which will be discarded before the
2984 remainder of the output of the tahoe script is matched against expectation.
2985 
2986 - cleaned up a typo, and a few spurious imports caught by pyflakes
2987 
2988] 
2989[fuse/impl_{a,b}: improve node-url handling
2990robk-tahoe@allmydata.com**20080924182854
2991   
2992 specifically change the expectation of the code to be such that the node-url
2993 (self.url) always includes the trailing slash to be a correctly formed url
2994 
2995 moreover read the node-url from the 'node.url' file found in the node 'basedir'
2996 and only if that doesn't exist, then fall back to reading the 'webport' file
2997 from therein and assuming localhost.  This then supports the general tahoe
2998 pattern that tools needing only a webapi server can be pointed at a directory
2999 containing the node.url file, which can optionally point to another server,
3000 rather than requiring a complete node dir and locally running node instance.
3001 
3002] 
3003[fuse/impl_b: tweaks from testing on hardy
3004robk-tahoe@allmydata.com**20080924180738
3005 
3006 from testing on linux (specifically ubuntu hardy) the libfuse dll has a
3007 different name, specifically libfuse.so.2. this patch tries libfuse.so
3008 and then falls back to trying .2 if the former fails.
3009 
3010 it also changes the unmount behaviour, to simply return from the handler's
3011 loop_forever() loop upon being unmounted, rather than raising an EOFError,
3012 since none of the client code I looked at actually handled that exception,
3013 but did seem to expect to fall off of main() when loop_forever() returned.
3014 Additionally, from my testing unmount typically led to an OSError from the
3015 fuse fd read, rather than an empty read, as the code seemed to expect.
3016 
3017 also removed a spurious import pyflakes quibbled about.
3018] 
3019[setup: fix site-dirs to find system installed twisted on mac.
3020robk-tahoe@allmydata.com**20080924174255
3021 
3022 zooko helped me unravel a build weirdness today.  somehow the system installed
3023 twisted (/System/Library) was pulling in parts of the other twisted (/Library)
3024 which had been installed by easy_install, and exploding.
3025 
3026 getting rid of the latter helped, but it took this change to get the tahoe
3027 build to stop trying to rebuild twisted and instead use the one that was
3028 already installed. c.f. tkt #229
3029] 
3030[CLI: rework webopen, and moreover its tests w.r.t. path handling
3031robk-tahoe@allmydata.com**20080924164523
3032 
3033 in the recent reconciliation of webopen patches, I wound up adjusting
3034 webopen to 'pass through' the state of the trailing slash on the given
3035 argument to the resultant url passed to the browser.  this change
3036 removes the requirement that arguments must be directories, and allows
3037 webopen to be used with files.  it also broke the tests that assumed
3038 that webopen would always normalise the url to have a trailing slash.
3039 
3040 in fixing the tests, I realised that, IMHO, there's something deeply
3041 awry with the way tahoe handles paths; specifically in the combination
3042 of '/' being the name of the root path within an alias, but a leading
3043 slash on paths, e.g. 'alias:/path', is catagorically incorrect. i.e.
3044  'tahoe:' == 'tahoe:/' == '/'
3045 but 'tahoe:/foo' is an invalid path, and must be 'tahoe:foo'
3046 
3047 I wound up making the internals of webopen simply spot a 'path' of
3048 '/' and smash it to '', which 'fixes' webopen to match the behaviour
3049 of tahoe's path handling elsewhere, but that special case sort of
3050 points to the weirdness.
3051 
3052 (fwiw, I personally found the fact that the leading / in a path was
3053 disallowed to be weird - I'm just used to seeing paths qualified by
3054 the leading / I guess - so in a debate about normalising path handling
3055 I'd vote to include the /)
3056 
3057] 
3058[CLI: reconcile webopen changes
3059robk-tahoe@allmydata.com**20080924152002
3060 
3061 I think this is largely attributable to a cleanup patch I'd made
3062 which never got committed upstream somehow, but at any rate various
3063 conflicting changes to webopen had been made. This cleans up the
3064 conflicts therein, and hopefully brings 'tahoe webopen' in line with
3065 other cli commands.
3066] 
3067[cli: cleanup webopen command
3068robk-tahoe@allmydata.com**20080618201940
3069 
3070 moved the body of webopen out of cli.py into tahoe_webopen.py
3071 
3072 made its invocation consistent with the other cli commands, most
3073 notably replacing its 'vdrive path' with the same alias parsing,
3074 allowing usage such as 'tahoe webopen private:Pictures/xti'
3075] 
3076[macapp: changed to remove 'Tahoe' from .app name
3077robk-tahoe@allmydata.com**20080611003145
3078 
3079 Change the build product from 'Allmydata Tahoe' to 'Allmydata'
3080 more inkeeping with the branding of the Allmydata product
3081] 
3082[add --syslog argument to 'tahoe start' and 'tahoe restart', used to pass --syslog to twistd for non-Tahoe nodes (like cpu-watcher)
3083warner@allmydata.com**20080925010302] 
3084[misc/make-canary-files.py: tool to create 'canary files', explained in the docstring
3085warner@allmydata.com**20080925004716] 
3086[webapi: survive slashes in filenames better: make t=info and t=delete to work, and let t=rename fix the problem
3087warner@allmydata.com**20080924203505] 
3088[setup: when detecting platform, ask the Python Standard Library's platform.dist() before executing lsb_release, and cache the result in global (module) variables
3089zooko@zooko.com**20080924180922
3090 This should make it sufficiently fast, while still giving a better answer on Ubuntu than platform.dist() currently does, and also falling back to lsb_release if platform.dist() says that it doesn't know.
3091] 
3092[node.py: add BASEDIR/keepalive_timeout and BASEDIR/disconnect_timeout, to set/enable the foolscap timers, for #521
3093warner@allmydata.com**20080924175112] 
3094[setup: stop catching EnvironmentError when attempting to copy ./_auto_deps.py to ./src/allmydata/_auto_deps.py
3095zooko@zooko.com**20080924000402
3096 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.
3097] 
3098[immutable: remove unused imports (thanks, pyflakes)
3099zooko@zooko.com**20080923192610] 
3100[immutable: refactor immutable filenodes and comparison thereof
3101zooko@zooko.com**20080923185249
3102 * the two kinds of immutable filenode now have a common base class
3103 * they store only an instance of their URI, not both an instance and a string
3104 * they delegate comparison to that instance
3105] 
3106[setup: try parsing /etc/lsb-release first, then invoking lsb_release, because the latter takes half-a-second on my workstation, which is too long
3107zooko@zooko.com**20080923171431
3108 Also because in some cases the former will work and the latter won't.
3109 This patch also tightens the regexes so it won't match random junk.
3110] 
3111[setup: fix a cut-and-paste error in the fallback to parsing /etc/lsb-release
3112zooko@zooko.com**20080923165551] 
3113[setup: if executing lsb_release doesn't work, fall back to parsing /etc/lsb-release before falling back to platform.dist()
3114zooko@zooko.com**20080923162858
3115 An explanatio of why we do it this way is in the docstring.
3116] 
3117[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
3118zooko@zooko.com**20080923154820] 
3119[setup: fix bug in recent patch to use allmydata.get_package_versions() to tell the foolscap app-version-tracking what's what
3120zooko@zooko.com**20080923001347] 
3121[setup: when using the foolscap "what versions are here?" feature, use allmydata.get_package_versions() instead of specifically importing allmydata, pycryptopp, and zfec
3122zooko@zooko.com**20080923000351] 
3123[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
3124zooko@zooko.com**20080922235354] 
3125[misc/make_umid: change docs, make elisp code easier to grab
3126warner@lothar.com**20080920183933] 
3127[use foolscap's new app_versions API, require foolscap-0.3.1
3128warner@lothar.com**20080920183853] 
3129[BASEDIR/nickname is now UTF-8 encoded
3130warner@lothar.com**20080920183713] 
3131[various: use util.log.err instead of twisted.log.err, so we get both Incidents and trial-test-flunking
3132warner@lothar.com**20080920173545] 
3133[logging.txt: explain how to put log.err at the end of Deferred chains, explain FLOGTOTWISTED=1
3134warner@lothar.com**20080920173500] 
3135[util.log: send log.err to Twisted too, so that Trial tests are flunked
3136warner@lothar.com**20080920173427] 
3137[setup.py trial: improve --verbose suggestion a bit
3138warner@lothar.com**20080919193922] 
3139[test_cli: disable generate-keypair test on OS-X, pycryptopp still has a bug
3140warner@lothar.com**20080919193855] 
3141[NEWS: finish editing for the upcoming 1.3.0 release
3142warner@lothar.com**20080919193053] 
3143[NEWS: more edits, almost done
3144warner@lothar.com**20080919010036] 
3145[NEWS: describe all changes since the last release. Still needs editing.
3146warner@lothar.com**20080919002755] 
3147[CLI: add 'tahoe admin generate-keypair' command
3148warner@lothar.com**20080919001133] 
3149[web: add 'more info' pages for files and directories, move URI/checker-buttons/deep-size/etc off to them
3150warner@lothar.com**20080918050041] 
3151[setup.py: remove unused 'Extension' import
3152warner@lothar.com**20080917230829] 
3153[setup.py,Makefile: move the 'chmod +x bin/tahoe' into setup.py
3154warner@lothar.com**20080917230756] 
3155[docs/install.html: reference InstallDetails instead of debian-specific stuff
3156warner@lothar.com**20080917225742] 
3157[Makefile,docs: tahoe-deps.tar.gz now lives in separate source/deps/ directory on http://allmydata.org
3158warner@lothar.com**20080917204452] 
3159[docs: mention -SUMO tarballs, point users at release tarballs instead of development ones
3160warner@lothar.com**20080917203631] 
3161[setup.py,Makefile: teat sdist --sumo about tahoe-deps/, use -SUMO suffix on tarballs, add sumo to 'make tarballs' target
3162warner@lothar.com**20080917200119] 
3163[.darcs-boringfile ignore tahoe-deps and tahoe-deps.tar.gz
3164warner@lothar.com**20080917195938] 
3165[docs: add a note about the process of making a new Tahoe release
3166zooko@zooko.com**20080917170839] 
3167[Makefile: pyutil from a dependent lib causes a #455-ish problem, the workaround is to run build-once *three* times
3168warner@lothar.com**20080917053643] 
3169[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
3170warner@lothar.com**20080917052204] 
3171[misc/check-build.py: ignore the 'Downloading file:..' line that occurs for the setup_requires= -triggered handling of the setuptools egg
3172warner@lothar.com**20080917051725] 
3173[#249: add 'test-desert-island', to assert that a tahoe-deps.tar.gz -enabled build does not download anything
3174warner@lothar.com**20080917013702] 
3175[#249: get dependent libs from tahoe-deps and ../tahoe-deps
3176warner@lothar.com**20080917013627] 
3177[#249: move dependent libs out of misc/dependencies/, get them from tahoe-deps.tar.gz instead
3178warner@allmydata.com**20080917012545] 
3179[conf_wiz.py - updating version numbers in file, should really get these from a TAG or conf file
3180secorp@allmydata.com**20080917004547] 
3181[webish: add an extra newline to JSON output
3182warner@lothar.com**20080915204314] 
3183[windows/Makefile: fix dependencies: windows-installer must cause windows-exe to run
3184warner@allmydata.com**20080912052151] 
3185[Makefile: fix windows issues
3186warner@allmydata.com**20080912050919] 
3187[Makefile: use run_with_pythonpath, move windows targets into a separate Makefile
3188warner@allmydata.com**20080912044508] 
3189[setup.py: add 'setup.py run_with_pythonpath', to run other commands with PYTHONPATH set usefully
3190warner@allmydata.com**20080912044418] 
3191[Makefile: convert check-auto-deps target into 'setup.py check_auto_deps'
3192warner@allmydata.com**20080912035904] 
3193[startstop_node.py: find twistd in our supportlib if we had to build Twisted as a setuptools dependency. This is a form of cgalvan's #505 patch, simplified because now 'setup.py trial' takes care of sys.path and PYTHONPATH
3194warner@allmydata.com**20080912025138] 
3195[rewrite parts of the Makefile in setup.py. Add 'build_tahoe' and 'trial' subcommands.
3196warner@allmydata.com**20080912010321
3197 
3198 The 'make build' target now runs 'setup.py build_tahoe', which figures out
3199 where the target 'supportlib' directory should go, and invokes 'setup.py
3200 develop' with the appropriate arguments.
3201 
3202 The 'make test' target now runs 'setup.py trial', which manages sys.path and
3203 runs trial as a subroutine instead of spawning an external process. This
3204 simplifies the case where Twisted was built as a dependent library (and thus
3205 the 'trial' executable is not on PATH).
3206 
3207 setup.py now manages sys.path and PYTHONPATH for its internal subcommands, so
3208 the $(PP) prefix was removed from all Makefile targets that invoke setup.py .
3209 For the remaining ones, the 'setup.py -q show_pythonpath' subcommand was
3210 added to compute this prefix with python rather than with fragile
3211 shell/Makefile syntax.
3212 
3213 
3214] 
3215[bin/tahoe: reflow error messages
3216warner@allmydata.com**20080912010225] 
3217[mac/Makefile: remove the verbose hdiutil diagnostics now that we resolved the problem
3218warner@allmydata.com**20080912004622] 
3219[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.
3220warner@allmydata.com**20080910233432] 
3221[web: fix output=JSON, add buttons for repair/json to the 'run deep-check' form
3222warner@allmydata.com**20080910211137] 
3223[disallow deep-check on non-directories, simplifies the code a bit
3224warner@allmydata.com**20080910204458] 
3225[dirnode: refactor recursive-traversal methods, add stats to deep_check() method results and t=deep-check webapi
3226warner@lothar.com**20080910084504] 
3227[dirnode: cleanup, make get_verifier() always return a URI instance, not a string
3228warner@lothar.com**20080910083755] 
3229[test_system: check t=deep-stats too
3230warner@lothar.com**20080910065457] 
3231[test_system: add deep-check-JSON tests, fix a bug
3232warner@lothar.com**20080910061416] 
3233[test_system: oops, re-enable some tests that got bypassed
3234warner@lothar.com**20080910060245] 
3235[test_system: add deep-stats test
3236warner@lothar.com**20080910055634] 
3237[hush pyflakes
3238warner@allmydata.com**20080910025017] 
3239[checker results: add output=JSON to webapi, add tests, clean up APIs
3240warner@allmydata.com**20080910024517
3241 to make the internal ones use binary strings (nodeid, storage index) and
3242 the web/JSON ones use base32-encoded strings. The immutable verifier is
3243 still incomplete (it returns imaginary healty results).
3244] 
3245[immutable verifier: provide some dummy results so deep-check works, make the tests ignore these results until we finish it off
3246warner@allmydata.com**20080910010827] 
3247[mutable checker: even more tests. Everything in ICheckerResults should be covered now, except for immutable-verify which is incomplete
3248warner@allmydata.com**20080910005706] 
3249[checker results: more tests, update interface docs
3250warner@allmydata.com**20080910003010] 
3251[mutable checker: oops, fix redefinition of 'healthy' (numshares < N, not numshares < k, which is 'recoverable' not 'healthy')
3252warner@allmydata.com**20080910002853] 
3253[checker results: more tests, more results. immutable verifier tests are disabled until they emit more complete results
3254warner@allmydata.com**20080910001546] 
3255[checker: add tests, add stub for immutable check_and_repair
3256warner@allmydata.com**20080909233449] 
3257[interfaces.py: minor improvement to IDirectoryNode.set_node
3258warner@allmydata.com**20080909233416] 
3259[mac/Makefile: upload the .dmg file with foolscap xfer-client.py instead of scp
3260warner@allmydata.com**20080908231943] 
3261[misc/xfer-client.py: small foolscap utility to transfer a file to a waiting server
3262warner@allmydata.com**20080908231903] 
3263[setup: add excited DEVELOPER NOTE to install.html
3264zooko@zooko.com**20080908215603
3265 It should be removed before 1.3.0 release, of course...
3266] 
3267[setup: edit the text of install.html
3268zooko@zooko.com**20080908215549] 
3269[setup: add link to the DownloadDebianPackages page
3270zooko@zooko.com**20080908215451
3271 Because I want that link off of the front page of the wiki...
3272] 
3273[setup: change URL from which to get source tarballs
3274zooko@zooko.com**20080908215409
3275 So that when you look at that directory you won't see distracting other things such as darcs repositories.
3276] 
3277[test_system: make log() tolerate the format= form
3278warner@lothar.com**20080908030336] 
3279[immutable/checker: make log() tolerate the format= form
3280warner@lothar.com**20080908030308] 
3281[checker: overhaul checker results, split check/check_and_repair into separate methods, improve web displays
3282warner@allmydata.com**20080907194456] 
3283[webapi.txt: explain that t=manifest gives verifycaps
3284warner@allmydata.com**20080907192950] 
3285[introducer: add get_nickname_for_peerid
3286warner@allmydata.com**20080906050700] 
3287[docs/logging.txt: explain tahoe/foolscap logging. Addresses #239.
3288warner@allmydata.com**20080904002531] 
3289[setup: don't assert that trial is present when the Makefile is evaluated
3290zooko@zooko.com**20080903171837
3291 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.
3292 
3293 Chris Galvan is working on a much nicer fix to all these issues -- see #505.
3294 
3295] 
3296[testutil.PollMixin: use a custom exception (and convert it) to avoid the ugly 'stash' cycle
3297warner@allmydata.com**20080903033251] 
3298[mac/Makefile: more attempts to debug the buildslave failure
3299warner@allmydata.com**20080829220614] 
3300[mac: add -verbose to the hdiutil call, to figure out why it's failing on the buildslave
3301warner@allmydata.com**20080829205243] 
3302[setup: simplify parsing of python version number
3303zooko@zooko.com**20080829000045] 
3304[setup: emit the version of python in the list of versions
3305zooko@zooko.com**20080828220454] 
3306[munin: add tahoe_diskleft plugin, update spacetime/diskwatcher.tac to support it
3307warner@allmydata.com**20080828203236] 
3308[docs: how_to_make_a_tahoe_release.txt
3309zooko@zooko.com**20080828202109
3310 Just some cryptic notes to self, but if I get hit by a truck then someone else might be able to decode them.
3311] 
3312[debian: include misc/cpu-watcher.tac in the debian package
3313warner@allmydata.com**20080827223026] 
3314[munin/tahoe_doomsday: change the graph title, 'time predictor' is more accurate than 'space predictor'
3315warner@allmydata.com**20080827213013] 
3316[munin/tahoe_diskusage: clip the graph at zero, to prevent transient negative excursions (such as when a lot of old logfiles are deleted from a storage server's disk) from scaling the graph into unusability
3317warner@allmydata.com**20080827193543] 
3318[CREDITS: thanks to Chris Galvan
3319zooko@zooko.com**20080827183950] 
3320[setup: patch from Chris Galvan to build sdists with no deps in them normally, but include deps if --sumo
3321zooko@zooko.com**20080827182644] 
3322[servermap: don't log late arrivals, and don't log DeadReferenceError at log.WEIRD
3323warner@allmydata.com**20080827003729] 
3324[mutable: make mutable-repair work for non-verifier runs, add tests
3325warner@allmydata.com**20080826233454] 
3326[mutable: remove work-around for a flaw in an older version of foolscap
3327zooko@zooko.com**20080826155055
3328 We now require "foolscap[secure_connections] >= 0.3.0", per [source:_auto_deps.py].
3329] 
3330[docs: edit install.html a tad
3331zooko@zooko.com**20080826154929] 
3332[misc/make_umid: little script and elisp fragment to insert umid= arguments
3333warner@allmydata.com**20080826015918] 
3334[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
3335warner@allmydata.com**20080826015759] 
3336[logging cleanups: lower DeadReferenceError from WEIRD (which provokes Incidents) to merely UNUSUAL, don't pre-format Failures in others
3337warner@allmydata.com**20080826005155] 
3338[checker: make the log() function of SimpleCHKFileVerifier compatible with the log() function of its superclasses and subclasses
3339zooko@zooko.com**20080825214407] 
3340[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
3341zooko@zooko.com**20080822154605] 
3342[docs/filesystem-notes.txt: add notes about enabling the 'directory index' feature on ext3 filesystems for storage server lookup speed
3343warner@allmydata.com**20080821205901] 
3344[setup: doc string describing what the require_auto_deps() function is for
3345zooko@zooko.com**20080815172234] 
3346[mutable/checker: log a WEIRD-level event when we see a hash failure, to trigger an Incident
3347warner@allmydata.com**20080813035020] 
3348[immutable checker: add a status_report field
3349warner@allmydata.com**20080813033530] 
3350[mutable/servermap: lower the priority of many log messages
3351warner@allmydata.com**20080813033506] 
3352[web/deep-check: show the webapi runtime at the bottom of the page
3353warner@allmydata.com**20080813033426] 
3354[CLI: tolerate blank lines in the aliases file
3355warner@allmydata.com**20080813025050] 
3356[test_web: workaround broken HEAD behavior in twisted-2.5.0 and earlier
3357warner@allmydata.com**20080813024520] 
3358[test_web: oops, actually use HEAD (instead of GET) in the HEAD test
3359warner@allmydata.com**20080813020451] 
3360[web: use get_size_of_best_version for HEAD requests, provide correct content-type
3361warner@allmydata.com**20080813020410] 
3362[mutable: add get_size_of_best_version to the interface, to simplify the web HEAD code, and tests
3363warner@allmydata.com**20080813020252] 
3364[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
3365warner@allmydata.com**20080813000501] 
3366[IFilesystemNode: add get_storage_index(), it makes tests easier
3367warner@allmydata.com**20080812231407] 
3368[test_system: rename Checker to ImmutableChecker, to make room for a mutable one
3369warner@allmydata.com**20080812225932] 
3370['tahoe debug dump-share': add --offsets, to show section offsets
3371warner@allmydata.com**20080812214656] 
3372[test_cli: oops, fix tests after recent stdout/stderr cleanup
3373warner@allmydata.com**20080812214634] 
3374[scripts/debug: split out dump_immutable_share
3375warner@allmydata.com**20080812205517] 
3376[scripts/debug: clean up use of stdout/stderr
3377warner@allmydata.com**20080812205242] 
3378[CLI: move the 'repl' command to 'tahoe debug repl'
3379warner@allmydata.com**20080812204017] 
3380[CLI: move all debug commands (dump-share, dump-cap, find-shares, catalog-shares) into a 'debug' subcommand, and improve --help output
3381warner@allmydata.com**20080812203732] 
3382[hush a pyflakes warning
3383warner@allmydata.com**20080812042423] 
3384[web/directory: enable verify=true in t=deep-check
3385warner@allmydata.com**20080812042409] 
3386[dirnode: add some deep-check logging
3387warner@allmydata.com**20080812042338] 
3388[checker_results.problems: don't str the whole Failure, just extract the reason string
3389warner@allmydata.com**20080812042306] 
3390[checker: add information to results, add some deep-check tests, fix a bug in which unhealthy files were not counted
3391warner@allmydata.com**20080812040326] 
3392[mutable/checker: rearrange a bit, change checker-results to have a status_report string
3393warner@allmydata.com**20080812032033] 
3394[mutable/servermap: add summarize_version
3395warner@allmydata.com**20080812031930] 
3396[CLI: make 'tahoe webopen' command accept aliases like 'tahoe ls'
3397warner@allmydata.com**20080812012023] 
3398[munin diskusage/doomsday: oops, fix labels, everything was reported in the 1hr column
3399warner@allmydata.com**20080811203431] 
3400[munin/tahoe_overhead: don't emit non-sensicial numbers
3401warner@lothar.com**20080807214008] 
3402[munin: add tahoe_overhead plugin, to measure effectiveness of GC and deleting data from inactive accounts
3403warner@lothar.com**20080807203925] 
3404[diskwatcher.tac: include total-bytes-used
3405warner@lothar.com**20080807201214] 
3406[setup: remove accidentally duplicated lines from Makefile
3407zooko@zooko.com**20080807193029] 
3408[misc/dependencies: remove the no-longer-useful foolscap-0.2.5 tarball
3409warner@lothar.com**20080807184546] 
3410[Makefile: avoid bare quotes, since the emacs syntax-highlighter gets confused by them
3411warner@lothar.com**20080807183001] 
3412[diskwatcher.tac: don't report negative timeleft
3413warner@lothar.com**20080807173433] 
3414[diskwatcher.tac: reduce the polling rate to once per hour
3415warner@lothar.com**20080807062021] 
3416[misc/spacetime: add munin plugins, add everything to .deb
3417warner@lothar.com**20080807060003] 
3418[diskwatcher.tac: hush pyflakes
3419warner@lothar.com**20080807050427] 
3420[diskwatcher.tac: add async-GET code, but leave it commented out: urlopen() seems to work better for now
3421warner@lothar.com**20080807050327] 
3422[cpu-watcher.tac: improve error message
3423warner@lothar.com**20080807043801] 
3424[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
3425warner@lothar.com**20080807042222] 
3426[misc/cpu-watcher.tac: tolerate missing pidfiles, just skip over that sample
3427warner@lothar.com**20080807041705] 
3428[setup: don't attempt to escape quote marks, just delete them.  Ugly, but it works okay.
3429zooko@zooko.com**20080806232742] 
3430[setup: escape any double-quote chars in the PATH before using the PATH to find and invoke trial
3431zooko@zooko.com**20080806231143] 
3432[storage: include disk-free information in the stats-gatherer output
3433warner@lothar.com**20080806210602] 
3434[mutable: more repair tests, one with force=True to check out merging
3435warner@lothar.com**20080806190607] 
3436[test/common: add ShouldFailMixin
3437warner@lothar.com**20080806190552] 
3438[test_mutable: add comment about minimal-bandwidth repairer, comma lack of
3439warner@lothar.com**20080806173850] 
3440[test_mutable: factor out common setup code
3441warner@lothar.com**20080806173804] 
3442[mutable: start adding Repair tests, fix a simple bug
3443warner@lothar.com**20080806061239] 
3444[mutable.txt: add warning about out-of-date section
3445warner@lothar.com**20080806061219] 
3446[test_system: factor out find_shares/replace_shares to a common class, so they can be used by other tests
3447warner@lothar.com**20080806014958] 
3448[debian/control: update dependencies to match _auto_deps: foolscap-0.3.0, pycryptopp-0.5
3449warner@lothar.com**20080806013222] 
3450[bump foolscap dependency to 0.3.0, for the new incident-gathering interfaces
3451warner@lothar.com**20080805235828] 
3452[web: add 'report incident' button at the bottom of the welcome page
3453warner@lothar.com**20080805190921] 
3454[test_cli: more coverage for 'tahoe put' modifying a mutable file in-place, by filename, closes #441
3455warner@lothar.com**20080804202643] 
3456[check_grid.py: update to match new CLI: 'put - TARGET' instead of 'put TARGET'
3457warner@lothar.com**20080802024856] 
3458[test_cli: remove windows-worrying newlines from test data
3459warner@lothar.com**20080802024734] 
3460[test_cli.py: factor out CLITestMixin
3461warner@lothar.com**20080802022938] 
3462[CLI: change one-arg forms of 'tahoe put' to make an unlinked file, fix replace-mutable #441
3463warner@lothar.com**20080802022729] 
3464[CLI: add create-alias command, to merge mkdir and add-alias into a single (secure-from-argv-snooping) step
3465warner@lothar.com**20080802021041] 
3466[test_cli: add system-based tests for PUT, including a mutable put that fails/todo (#441)
3467warner@lothar.com**20080801221009] 
3468[tests: simplify CLI tests that use stdin, now that runner supports it
3469warner@lothar.com**20080801220514] 
3470[CLI: simplify argument-passing, use options= for everthing, including stdout
3471warner@lothar.com**20080801184624] 
3472[tests: add test that verifier notices any (randomly chosen) bit flipped in the verifiable part of any (randomly chosen) share
3473zooko@zooko.com**20080731002015
3474 The currently verifier doesn't (usually) pass this randomized test, hence the TODO.
3475] 
3476[tests: test that checker doesn't cause reads on the storage servers
3477zooko@zooko.com**20080730235420
3478 It would still pass the test if it noticed a corrupted share.  (It won't
3479 notice, of course.)  But it is required to do its work without causing storage
3480 servers to read blocks from the filesystem.
3481 
3482] 
3483[storage: make storage servers declare oldest supported version == 1.0, and storage clients declare oldest supported version == 1.0
3484zooko@zooko.com**20080730225107
3485 See comments in patch for intended semantics.
3486] 
3487[tests: use the handy dandy TestCase.mktemp() function from trial to give unique and nicely named directories for each testcase
3488zooko@zooko.com**20080730224920] 
3489[tests: don't use SignalMixin
3490zooko@zooko.com**20080730223536
3491 It seems like we no longer need it, and it screws up something internal in
3492 trial which causes trial's TestCase.mktemp() method to exhibit wrong behavior
3493 (always using a certain test method name instead of using the current test
3494 method name), and I wish to use TestCase.mktemp().
3495 
3496 Of course, it is possible that the buildbot is about to tell me that we do
3497 still require SignalMixin on some of our platforms...
3498 
3499] 
3500[setup: if the user passes a TRIALOPT env var then pass that on to trial
3501zooko@zooko.com**20080730205806
3502 This is useful for --reporter=bwverbose, for example.
3503] 
3504[setup: turn back on reactor=poll for cygwin trial (else it runs out of fds)
3505zooko@zooko.com**20080730181217] 
3506[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
3507zooko@zooko.com**20080730160429] 
3508[setup: whoops, really remove the default reactor=poll this time
3509zooko@zooko.com**20080730032358] 
3510[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.
3511zooko@zooko.com**20080730031656
3512 
3513] 
3514[setup: pass --reactor=poll to trial unless REACTOR variable is set, in which case pass --reactor=$(REACTOR)
3515zooko@zooko.com**20080730023906
3516 This hopefully works around the problem that Twisted v8.1.0 has a bug when used
3517 with pyOpenSSL v0.7 which bug causes some unit tests to spuriously fail -- see
3518 known_issues.txt r2788:
3519 
3520 http://allmydata.org/trac/tahoe/browser/docs/known_issues.txt?rev=2788#L122
3521 
3522 Also it matches with the fact that --reactor=poll is required on cygwin.
3523 
3524] 
3525[setup: require secure_connections from foolscap
3526zooko@zooko.com**20080730021041
3527 This causes a problem on debian sid, since the pyOpenSSL v0.6 .deb doesn't come
3528 with .egg-info, so setuptools will not know that it is already installed and
3529 will try to install pyOpenSSL, and if it installs pyOpenSSL v0.7, then this
3530 will trigger the bug in Twisted v8.1.0 when used with pyOpenSSL v0.7.
3531 
3532 http://twistedmatrix.com/trac/ticket/3218
3533 
3534 Now the comments in twisted #3218 suggest that it happens only with the select
3535 reactor, so maybe using --reactor=poll will avoid it.
3536 
3537] 
3538[tests: add test_system.Checker which tests basic checking (without verification) functionality
3539zooko@zooko.com**20080728234317] 
3540[test: add testutil.flip_one_bit which flips a randomly chosen bit of the input string
3541zooko@zooko.com**20080728234217] 
3542[tests: make it so that you can use common.py's SystemTestMixin.set_up_nodes() more than once with the same introducer
3543zooko@zooko.com**20080728234029] 
3544[download.py: set up self._paused before registering the producer, since they might call pauseProducing right away
3545warner@lothar.com**20080728215731] 
3546[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.
3547warner@allmydata.com**20080728194421] 
3548[munin/tahoe_spacetime: show 2wk data even if 4wk data is unavailable
3549warner@allmydata.com**20080728194233] 
3550[web: add /status/?t=json, with active upload/download ops. Addresses #493.
3551warner@allmydata.com**20080726004110] 
3552[web: make t=json stats pages use text/plain, instead of leaving it at text/html
3553warner@allmydata.com**20080726002427] 
3554[test_system.py: factor SystemTestMixin out of SystemTest
3555warner@allmydata.com**20080725223349] 
3556[test_system.py: modify system-test setup code in preparation for merge with common.SystemTestMixin
3557warner@allmydata.com**20080725222931] 
3558[test_system.py: move SystemTestMixin out into common.py, where further improvements will occur
3559warner@allmydata.com**20080725221758] 
3560[test_system.py: create SystemTestMixin, with less cruft, for faster system-like tests
3561warner@allmydata.com**20080725221300] 
3562[TAG allmydata-tahoe-1.2.0
3563zooko@zooko.com**20080722014608] 
3564Patch bundle hash:
3565d119346ba703f772f9366644ec5df3157ff781d0