Ticket #505: use_setuptools_trial.patch

File use_setuptools_trial.patch, 93.1 KB (added by cgalvan, at 2008-11-21T21:08:28Z)

Modify setup.py to use the setuptools_trial plugin

Line 
1Fri Nov 21 14:57:59 CST 2008  cgalvan@mail.utexas.edu
2  * use_setuptools_trial.patch
3
4New patches:
5
6[use_setuptools_trial.patch
7cgalvan@mail.utexas.edu**20081121205759] {
8hunk ./Makefile 121
9 # suppress the ansi color sequences
10 
11 test: build src/allmydata/_version.py
12-       $(PYTHON) setup.py trial -a "$(TRIALARGS) $(TEST)"
13+       $(PYTHON) setup.py trial $(TRIALARGS) -s $(TEST)
14 
15 quicktest: .built .checked-deps
16hunk ./Makefile 124
17-       $(PYTHON) setup.py trial -a "$(TRIALARGS) $(TEST)"
18+       $(PYTHON) setup.py trial $(TRIALARGS) -s $(TEST)
19 
20 fuse-test: .built .checked-deps
21        $(RUNPP) -d contrib/fuse -p -c runtests.py
22hunk ./Makefile 131
23 
24 test-figleaf: build src/allmydata/_version.py
25        rm -f .figleaf
26-       $(PYTHON) setup.py trial -a "--reporter=bwverbose-figleaf $(TEST)"
27+       $(PYTHON) setup.py trial --reporter=bwverbose-figleaf -s $(TEST)
28 
29 quicktest-figleaf: src/allmydata/_version.py
30        rm -f .figleaf
31hunk ./Makefile 135
32-       $(PYTHON) setup.py trial -a "--reporter=bwverbose-figleaf $(TEST)"
33+       $(PYTHON) setup.py trial --reporter=bwverbose-figleaf -s $(TEST)
34 
35 figleaf-output:
36        $(RUNPP) -p -c "misc/figleaf2html -d coverage-html -r src -x misc/figleaf.excludes"
37hunk ./setup.py 124
38 from setuptools import find_packages, setup
39 from setuptools.command import sdist
40 from distutils.core import Command
41+from setuptools_trial.setuptools_trial import TrialTest
42 
43 # Make the dependency-version-requirement, which is used by the Makefile at
44 # build-time, also available to the app at runtime:
45hunk ./setup.py 196
46 
47 # Nevow requires Twisted to setup, but doesn't declare that requirement in a way that enables
48 # setuptools to satisfy that requirement before Nevow's setup.py tried to "import twisted".
49-setup_requires.append('Twisted >= 2.4.0')
50+setup_requires.extend(['Twisted >= 2.4.0', 'setuptools_trial'])
51 
52 # darcsver is needed only if you want "./setup.py darcsver" to write a new
53 # version stamp in src/allmydata/_version.py, with a version number derived from
54hunk ./setup.py 321
55             print >>sys.stderr, "'setup.py develop' exited with rc", rc
56             sys.exit(rc)
57 
58-class Trial(Command):
59-    # Unlike 'build' and 'bdist_egg', the 'trial' subcommand cannot be run in
60-    # conjunction with other subcommands.
61-
62-    # The '-a' argument is split on whitespace and passed into trial. (the
63-    # distutils parser does not give subcommands access to the rest of
64-    # sys.argv, so unfortunately we cannot just do something like:
65-    #   setup.py trial --reporter=text allmydata.test.test_util
66-
67+class Trial(TrialTest):
68+    # Custom sub-class of the TrialTest class from the setuptools_trial
69+    # plugin so that we can ensure certain options are set by default.
70+    #
71     # Examples:
72     #  setup.py trial    # run all tests
73     #  setup.py trial -a allmydata.test.test_util   # run some tests
74hunk ./setup.py 330
75     #  setup.py trial -a '--reporter=text allmydata.test.test_util' #other args
76 
77-    description = "Run unit tests via trial"
78 
79hunk ./setup.py 331
80-    user_options = [ ("args=", "a", "Argument string to pass to trial: setup.py trial -a allmydata.test.test_util"),
81-                     ]
82     def initialize_options(self):
83hunk ./setup.py 332
84-        self.args = "allmydata"
85-    def finalize_options(self):
86-        pass
87+        TrialTest.initialize_options(self)
88 
89hunk ./setup.py 334
90-    def run(self):
91-        # make sure Twisted is available (for trial itself), and both the
92-        # Tahoe source code and our dependent libraries are available (so
93-        # that trial has some test code to work with)
94-
95-        from twisted.scripts import trial
96-
97-        args = self.args.strip().split()
98-
99-        # one wrinkle: we want to set the reactor here, because of bug #402
100-        # (twisted bug #3218). We just jam in a "--reactor poll" at the start
101-        # of the arglist. This does not permit the reactor to be overridden,
102-        # unfortunately.
103+        # We want to set the reactor to 'poll', because of bug #402
104+        # (twisted bug #3218).
105         if sys.platform in ("linux2", "cygwin"):
106             # poll on linux2 to avoid #402 problems with select
107             # poll on cygwin since selectreactor runs out of fds
108hunk ./setup.py 339
109-            args = ["--reactor", "poll"] + args
110-
111-        # zooko also had os.environ["PYTHONUNBUFFERED"]="1" and
112-        # args.append("--rterrors")
113+            self.reactor = "poll"
114 
115hunk ./setup.py 341
116-        sys.argv = ["trial"] + args
117-        if self.verbose > 1:
118-            print "To run this test directly, use:"
119-            print "PYTHONPATH=%s %s" % (os.environ["PYTHONPATH"],
120-                                        " ".join(sys.argv))
121-        else:
122-            print "(run setup.py with -vv for trial command-line details)"
123-        trial.run() # this does sys.exit
124-        # NEVER REACHED
125 
126 class MySdist(sdist.sdist):
127     """ A hook in the sdist command so that we can determine whether this the
128}
129
130Context:
131
132[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
133zooko@zooko.com**20081120201545
134 Ignore-this: 898f21fc1b16ae39c292fdd1ef42c446
135]
136[setup: we require setuptools > 0.6a9 in order to parse requirements that have a dot in them such as "zope.interface"
137zooko@zooko.com**20081120151503
138 Ignore-this: a6304de8f1f44defc50438d72a13e58f
139 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.
140]
141[test_dirnode: add an explainError call
142warner@allmydata.com**20081119220212]
143[manifest: add storage-index strings to the json results
144warner@allmydata.com**20081119220027]
145[manifest: include stats in results. webapi is unchanged.
146warner@allmydata.com**20081119210347]
147[misc/spacetime/diskwatcher.tac: remove dead code
148warner@allmydata.com**20081119200552]
149[mutable: respect the new tahoe.cfg 'shares.needed' and 'shares.total' settings
150warner@allmydata.com**20081119200501]
151[oops, update tests to match 'tahoe stats' change
152warner@allmydata.com**20081119023259]
153[cli: tahoe stats: abbreviate total sizes too
154warner@allmydata.com**20081119022816]
155[cli: 'tahoe stats': add abbreviated size to the histogram. Not sure this actually improves things.
156warner@allmydata.com**20081119021736]
157[util/abbreviate: little utility to abbreviate seconds and bytes
158warner@allmydata.com**20081119021142]
159[cli: add 'tahoe check' and 'tahoe deep-check' commands, with primitive reporting code
160warner@allmydata.com**20081119011210]
161[cli: factor out slow-http-operation to a separate module
162warner@allmydata.com**20081119011113]
163[cli: tahoe stats/manifest: change --verbose to --raw, since I want -v for --verify for check/deep-check/repair
164warner@allmydata.com**20081119003608]
165[test_system: make 'where' strings more helpful, to track down test failures better
166warner@allmydata.com**20081119002950]
167[webapi: add 'summary' string to checker results JSON
168warner@allmydata.com**20081119002826]
169[munin/tahoe_disktotal: add a 'disk used' line, since it will always be less than disktotal
170warner@allmydata.com**20081118214431]
171[munin/tahoe_introstats: add line for distinct-storage-hosts (which counts machines instead of nodes)
172warner@allmydata.com**20081118213238]
173[webapi: introducer stats: add 'announcement_distinct_hosts' to the t=json form, to show how many distinct hosts are providing e.g. storage services
174warner@allmydata.com**20081118213015]
175['tahoe create-key-generator': fix help text
176warner@allmydata.com**20081118074758]
177[#330: convert stats-gatherer into a .tac file service, add 'tahoe create-stats-gatherer'
178warner@allmydata.com**20081118074620]
179[munin/tahoe_diskused: new plugin to show total disk space used across the grid
180warner@allmydata.com**20081118072525]
181[munin/tahoe_disktotal: new plugin to show total disk space (used and unused) in the grid
182warner@allmydata.com**20081118065101]
183[tahoe.cfg: add controls for k and N (and shares-of-happiness)
184warner@allmydata.com**20081118062944]
185[cli: add tests for 'tahoe stats --verbose'
186warner@allmydata.com**20081118041114]
187[cli: add --verbose to 'tahoe manifest', to show the raw JSON data
188warner@allmydata.com**20081118040219]
189[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
190warner@allmydata.com**20081118034516]
191[dirnode manifest/stats: process more than one LIT file per tree; we were accidentally ignoring all but the first
192warner@allmydata.com**20081115045049]
193[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
194warner@allmydata.com**20081115031144]
195[New credit file entry
196francois@ctrlaltdel.ch**20081114140548]
197[test_cli.py: Ensure that we can read our uploaded files back
198francois@ctrlaltdel.ch**20081114134458]
199[test_cli.py: use str objects instead of unicode ones
200francois@ctrlaltdel.ch**20081114134137
201 
202 This will hopefully fix failing tests with LC_ALL=C
203]
204[CLI: add 'tahoe stats', to run start-deep-stats and print the results
205warner@allmydata.com**20081114014350]
206[test_system.py: fix new 'tahoe manifest' tests to not break on windows, by providing --node-directory instead of --node-url
207warner@allmydata.com**20081113212748]
208[test for bug #534, unicode filenames
209francois@ctrlaltdel.ch**20081113111951
210 
211 This test assure that uploading a file whose name contains unicode character
212 doesn't prevent further uploads in the same directory.
213]
214[Fix an filename encoding issue with "tahoe cp"
215francois@ctrlaltdel.ch**20081111200803]
216[web/info.py: use 128-bit ophandles instead of 64-bit
217warner@allmydata.com**20081113021842]
218[CLI: add 'tahoe manifest', which takes a directory and returns a list of things you can reach from it
219warner@allmydata.com**20081113021725]
220[create_node.py: also remove now-unused import of pkg_resources
221warner@allmydata.com**20081113004716]
222[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).
223warner@allmydata.com**20081113004458]
224[setup: remove pkg_resources.require() from create_node.py and add it to runner.py
225zooko@zooko.com**20081112212503
226 Ignore-this: 763324202456a59b833b14eb4027171
227 Brian correctly points out that the latter is an entry point.
228]
229[docs: fix cutnpasto in source:docs/logging.txt
230zooko@zooko.com**19700105140422
231 Ignore-this: de0f9ceb8e0ca4c158492ad2f9a6ba6f
232]
233[tests: fix comment
234zooko@zooko.com**19700105101055
235 Ignore-this: fabedea917895568b1fca75a480111b9
236]
237[tests: add tahoe_cp to the list of scripts that we don't actually have tests for yet
238zooko@zooko.com**19700105100058
239 Ignore-this: ac89583992fb1b48d9a4680344569d91
240]
241[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
242zooko@zooko.com**19700101235005
243 Ignore-this: e1db03f86e0407a91087d8ada6b477fd
244 Also the create_node.py script itself uses pkg_resources.require() for the same reason.
245]
246[web/info: don't let an unrecoverable file break the page (show ? instead of a size)
247warner@allmydata.com**20081107045117]
248[checker: add is_recoverable() to checker results, make our stub immutable-verifier not throw an exception on unrecoverable files, add tests
249warner@allmydata.com**20081107043547]
250[monitor: update interface definition: get_status() can return a Failure
251warner@allmydata.com**20081107035452]
252[web/operations.py: if the operation failed, render the Failure
253warner@allmydata.com**20081107035309]
254[undoing test change for native_client.php
255secorp@allmydata.com**20081106220310]
256[NEWS: more minor edits
257warner@allmydata.com**20081106223517]
258[NEWS: minor edits
259warner@allmydata.com**20081106223356]
260[NEWS: mention SFTP server
261warner@allmydata.com**20081106014153]
262[client.py: oops, update FTP/SFTP config names to match current docs
263warner@allmydata.com**20081106013442]
264[remove duplicate+old docs/NEWS. The top-level NEWS file is the canonical one.
265warner@allmydata.com**20081106013224]
266[SFTP/FTP: merge user/account code, merge docs
267warner@allmydata.com**20081106012558]
268[docs: move webapi/ftp/sftp into a new frontends/ directory
269warner@allmydata.com**20081105233050]
270[ftp/sftp: move to a new frontends/ directory in preparation for factoring out password-auth component
271warner@allmydata.com**20081105200733]
272[sftpd: minor debug-logging tweak
273warner@allmydata.com**20081105194511]
274[confwiz.py - trying out a new configuration site
275secorp@allmydata.com**20081105011830]
276[ftpd: include an (unused) avatar logout callback
277warner@allmydata.com**20081105000104]
278[#531: implement an SFTP frontend. Mostly works, still lots of debug messages. Still needs tests and auth-by-pubkey in accounts.file
279warner@allmydata.com**20081105000022]
280[docs/ftp.txt: correct Twisted dependency: we don't need VFS, we can use a release, as long as you apply the patch
281warner@allmydata.com**20081104235840]
282[shebang: replace "/usr/bin/python" with "/usr/bin/env python"
283zooko@zooko.com**20081105000306
284 Ignore-this: 8ae33a8a7828fa7423422e252f2cfd74
285]
286[misc/fixshebangs.py
287zooko@zooko.com**20081105000130
288 Ignore-this: 13b03ea2d2ed8982f8346a827b46bd2e
289]
290[util: copy in pyutil.fileutil.ReopenableNamedTemporaryFile
291zooko@zooko.com**20081104234715
292 Ignore-this: f1131e9b8f249b5f10be4cba2aeb6118
293]
294[immutable: tolerate filenode.read() with a size= that's too big, rather than hanging
295warner@allmydata.com**20081104212919]
296[util: copy in nummedobj from pyutil
297zooko@zooko.com**20081104195550]
298[util: copy in dictutil from pyutil
299zooko@zooko.com**20081104195327]
300[rollback change... move allmydatacontextmenu registration to installer.tmpl in tahoe-w32-client\installer
301booker@allmydata.com**20081103213647]
302[register the AllmydataContextMenu.dll for the context menu handler file sharing shell extension
303booker@allmydata.com**20081103200027]
304[debug catalog-shares: tolerate even more errors on bad files/directories
305warner@allmydata.com**20081030215447]
306[NEWS: update with all user-visible changes since the last update
307warner@allmydata.com**20081030213604]
308[#527: expire the cached files that are used to support Range: headers, every hour, when the file is unused and older than an hour
309warner@allmydata.com**20081030203909]
310[util/cachedir.py: add a cache-directory manager class, which expires+deletes unused files after a while
311warner@allmydata.com**20081030200120]
312[test_cli: try to fix windows again
313warner@allmydata.com**20081030193204]
314[debug/test_cli: fix error handling for catalog-shares, to make the test stop failing on windows
315warner@allmydata.com**20081030190651]
316[web: add 'Repair' button to checker results when they indicate unhealthyness. Also add the object's uri to the CheckerResults instance.
317warner@allmydata.com**20081030010917]
318[create_node.py: add 'web.static = public_html' to the initial tahoe.cfg
319warner@allmydata.com**20081030001336]
320[webapi: serve the /static URL tree from /public_html (configurable)
321warner@allmydata.com**20081029223431]
322[catalog-shares command: tolerate errors, log them to stderr, handle v2-immutable shares
323warner@allmydata.com**20081029221010]
324[test_web.py: one more line of test coverage
325warner@allmydata.com**20081029050015]
326[test_web: improve test coverage of PUT DIRURL t=uri replace=false
327warner@allmydata.com**20081029045744]
328[web: test (and fix) PUT DIRURL t=uri, which replaces a directory in-place with some other cap
329warner@allmydata.com**20081029045446]
330[web/directory.py: slight shuffle to improve test coverage
331warner@allmydata.com**20081029045406]
332[test_client.py: improve test coverage a bit
333warner@allmydata.com**20081029044335]
334[node.py: remove unused old_log() function
335warner@allmydata.com**20081029043558]
336[node.py: remove support for the old BASEDIR/authorized_keys.PORT file
337warner@allmydata.com**20081029043420]
338[move testutil into test/common_util.py, since it doesn't count as 'code under test' for our pyflakes numbers
339warner@allmydata.com**20081029042831]
340[util: move PollMixin to a separate file (pollmixin.py), so testutil can be moved into test/
341warner@allmydata.com**20081029041548]
342[control.py: removed unused testutil.PollMixin
343warner@allmydata.com**20081029040359]
344[web/filenode: oops, fix test failures, not everything has a storage index
345warner@allmydata.com**20081029011720]
346[web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
347warner@allmydata.com**20081029010103]
348[#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.
349warner@allmydata.com**20081029005618]
350[#527: support HTTP 'Range:' requests, using a cachefile. Adds filenode.read(consumer, offset, size) method. Still needs: cache expiration, reduced alacrity.
351warner@lothar.com**20081028204104]
352[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
353warner@lothar.com**20081028203646]
354[interfaces.py: promote immutable.encode.NotEnoughSharesError.. it isn't just for immutable files any more
355warner@lothar.com**20081027203449]
356[interfaces.IMutableFileNode.download_best_version(): fix return value
357warner@lothar.com**20081027202046]
358[dirnode lookup: use distinct NoSuchChildError instead of the generic KeyError when a child can't be found
359warner@lothar.com**20081027201525]
360[storage: don't use colons in the corruption-advisory filename, since windows can't tolerate them
361warner@lothar.com**20081026024633]
362[mutable: call remove_advise_corrupt_share when we see share corruption in mapupdate/download/check, tolerate servers that do not implement it
363warner@lothar.com**20081024202128]
364[storage: add remote_advise_corrupt_share, for clients to tell storage servers about share corruption that they've discovered. The server logs the report.
365warner@lothar.com**20081024185248]
366[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
367warner@lothar.com**20081024040024]
368[test_web.test_POST_DIRURL_deepcheck: confirm that /operations/HANDLE/ works with or without the slash
369warner@lothar.com**20081024021759]
370[web/checker_results.py: remove dead code
371warner@lothar.com**20081024001717]
372[test_web: more test coverage
373warner@lothar.com**20081024001118]
374[webapi: fix t=rename from==to, it used to delete the file
375warner@lothar.com**20081023233236]
376[test_system: update test to match web checker results
377warner@lothar.com**20081023233202]
378[webapi deep-check: show the root as <root>, rather than an empty path string
379warner@lothar.com**20081023230359]
380[mutable/checker: announce the mapupdate op on the 'recent uploads+downloads' page
381warner@lothar.com**20081023230319]
382[scripts/create_node.py: remove empty-string defaults for --introducer= and --nickname=
383warner@lothar.com**20081023230235]
384[deep-check: add webapi links to detailed per-file/dir results
385warner@lothar.com**20081023230031]
386[interface.py: fix typo
387warner@lothar.com**20081023225936]
388[webapi: make the /operations/ 't=status' qualifier optional, remove it from examples
389warner@lothar.com**20081023225658]
390[setup: require the latest version of the setuptools bootstrap egg
391zooko@zooko.com**20081025152858
392 Ignore-this: c0c9923ba3008f410d5cc56f2236edb9
393]
394[setup: include _pkgutil.py in setuptools bootstrap egg so that it will work on Python 2.4
395zooko@zooko.com**20081025152839
396 Ignore-this: 38d81a037c1a3413d69d580ccb13fd67
397]
398[setup: pretend the tahoe requires twisted to set up, so that twisted will be there for nevow
399zooko@zooko.com**20081025135042
400 Ignore-this: 4e6c7e580f7e30df571e2e63be663734
401]
402[setup: require the SVN snapshot of setuptools to build
403zooko@zooko.com**20081025134959
404 Ignore-this: f68077dd10d85a71a1e06678365e6753
405]
406[setup: remove old bundled setuptools-0.6c9
407zooko@zooko.com**20081025134947
408 Ignore-this: 3a95dd72346a60b39ffd6ddfadd1b3a8
409]
410[setup: bundle an SVN snapshot of setuptools instead of the most recent stable release of setuptools
411zooko@zooko.com**20081025134837
412 Ignore-this: 9a0c9a34b186b972650cf9455edb0d28
413 This SVN snapshot fixes a problem that prevents the setting up of nevow:
414 http://bugs.python.org/setuptools/issue20
415]
416[setup: reorder dependencies to be sort of increasing order of how much they depend on other stuff
417zooko@zooko.com**20081025134739
418 Ignore-this: 6d636aaf5deb37cbf18172824b0bbf87
419 Not that the order makes any different to how it gets installed, as far as I can tell.
420]
421[docs: add a note that when you make a new tahoe release, you should send the announcement to fuse-devel@lists.sourceforge.net
422zooko@zooko.com**20081023213658]
423[web/info.py: fix 'Check This Object' link, for files it was checking the parent directory by mistake
424warner@lothar.com**20081022171056]
425[#514: add meta-refresh=60 tag to t=status page for incomplete operations
426warner@lothar.com**20081022164842]
427[test_dirnode.py: oops, missed a Monitor(), unbreak tests
428warner@lothar.com**20081022085054]
429[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
430warner@lothar.com**20081022084237]
431[more #514: pass a Monitor to all checker operations, make mutable-checker honor the cancel flag
432warner@lothar.com**20081022083818]
433[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.
434warner@lothar.com**20081022075552]
435[more #514 log-webop status/cancel: add handle-expiration, test coverage
436warner@lothar.com**20081022051354]
437[webapi.txt: improve t=deep-size output docs
438warner@lothar.com**20081022005331]
439[#514: improve test coverage
440warner@lothar.com**20081022005256]
441[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.
442warner@lothar.com**20081022000307]
443[setup: change ez_setup.py to install setuptools-0.6c9
444zooko@zooko.com**20080930200502]
445[setup: bundle setuptools-0.6c9
446zooko@zooko.com**20080930200448]
447[setup: remove bundled setuptools-0.6c8
448zooko@zooko.com**20080930200336]
449[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)
450zooko@zooko.com**20081021163200
451 add classifiers showing with which versions of Python it is known to work.
452]
453[* fuse/runtests: added --catch-up-pause option
454robk-tahoe@allmydata.com**20081021002902
455 
456 On linux, write tests are failing because data written to fuse isn't showing
457 up in tahoe by the time it's checked.  it's not clear where this is originating,
458 since the fuse implementation [should be] waiting for completion of tahoe
459 operations before returning from its calls.  This adds an option to control the
460 duration of a pause between the fuse write and the check of tahoe, which is by
461 default set to 2s on linux, which - somewhat inexplicably - seems to 'fix' the
462 problem, in as far as it allows tests to complete.
463 
464]
465[fuse/runtests: include length in drepr() output
466robk-tahoe@allmydata.com**20081021000159]
467[fuse/runtests: make exceptions in 'read_in_random_order' into TestFailures
468robk-tahoe@allmydata.com**20081020235235]
469[fuse/blackmatch: added asynchronous (background) file download
470robk-tahoe@allmydata.com**20081020233333
471 
472 previously, upon opening a file for reading, the open() call would block
473 while the entire file was retrieved from tahoe into the cache directory.
474 This change adds a DownloaderWithReadQueue class, and associated plumbing,
475 such that an open() will return promptly with the download initiated 'in
476 the background'.  Subsequent read() operations will block until enough
477 data has been downloaded to satisfy that request.  This provides a behaviour
478 similar to streaming, i.e. the client application will be able to read
479 data from the fuse interface while the remainder of the file is still being
480 downloaded.
481 
482]
483[fuse/runtests: added 'read_in_random_order' test
484robk-tahoe@allmydata.com**20081020232427
485 
486 this test uploads a test file to tahoe, and then reads the file from fuse,
487 but reads the blocks of the file in a random order; this is designed to
488 exercise the asynchronous download feature of blackmatch - where the file
489 is downloaded from tahoe asynchronously, and rather than blocking open()
490 for the entirety of the download, instead individual read() calls are
491 blocked until enough of the file has been downloaded to satisfy them
492]
493[fuse/runtests: added a --no-cleanup option
494robk-tahoe@allmydata.com**20081020155120
495 
496 the code had a 'fullcleanup' flag internally which controlled whether
497 working directories were cleaned up.  this promotes that to a command
498 line option (negated) '--no-cleanup' defaulting to False, i.e. do cleanup
499]
500[fuse/runtests: truncate expected file contents in reported error message
501robk-tahoe@allmydata.com**20081020144523
502 
503 this avoids dumping the repr of 1Mb of random data to stdout in the event
504 of a test failure, but rather just dumps the start/end of the errant strings
505 if the amount of data is > 200 chars repr'd
506]
507[fuse/blackmatch: fix platform specific problems in repr_flags
508robk-tahoe@allmydata.com**20081020143052
509 
510 the repr_flags debug/logging function had a list of fields from the os
511 module that might be passed into an open() call, but it included at
512 least one which was available on the mac but not on linux. symmetrically
513 linux has numerous flags which are not present on the mac. the repr_flags
514 function is now tolerant of flags not being present, and has an expanded
515 list of flags
516]
517[makefile: added 'fuse-test' target to makefile, to run 'runtests'
518robk-tahoe@allmydata.com**20081019132518]
519[fuse/runtests: added a 'todo' flag, surpressing failure for implementations not expected to pass
520robk-tahoe@allmydata.com**20081019131600
521 
522 since the current tests assume that the implementation responds to changes made
523 to tahoe after mount, and impl_b prefetches and cached directory data, impl_b
524 fails the current 'read' test suite.
525 
526 rather than reflect that problem in the overall failure of the runtests exit
527 code, this adds a 'todo' flag to the implementations table, and sets the todo
528 flag for impl_b.  Thus errors will therein be reported in output, but not cause
529 a failing exit code.
530]
531[fuse/runtests: made runtests exit code depend on success
532robk-tahoe@allmydata.com**20081017180058
533 
534 return an exit code of 0 only if no tests failed, and 1 in the case of
535 linkage error, test setup failure, or individual test case failure
536 
537]
538[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
539warner@lothar.com**20081020172208]
540[NEWS: update to summarize all changes since the last update
541warner@lothar.com**20081020164047]
542[fuse/runtest: make removal of webport file soft
543robk-tahoe@allmydata.com**20081017030154
544 
545 previously the runtests suite removed the webport file created by
546 tahoe create-client in all but the first node.  now that the node config
547 is in tahoe.cfg by default this file might not exist.
548]
549[fuse/blackmatch: update json handling to support simplejson v2
550robk-tahoe@allmydata.com**20081017025931
551 
552 simplejson v2 returns strings as either unicode or str, depending upon its
553 mood.  thus the interpretation of the node's json repr of a directory, and
554 the serialisation of strings in the json based rpc both exploded when built
555 against simplejson v2.  this makes both of these places liberal in their
556 acceptance of either str or unicode.
557]
558[fuse/blackmatch: log exception in server startup
559robk-tahoe@allmydata.com**20081017014650
560 
561 humphf.  my build runs the fuse stuff fine, but the build from the buildslave
562 doesn't seem to start up properly.  hopefully this will elicit some useful info
563]
564[fuse/blackmatch: add readability to some logging, fix a permissions problem
565robk-tahoe@allmydata.com**20081017004421
566 
567 adds a couple of functions to unpack 'mode' and 'flags' for open() calls, to
568 facilitate debugging.
569 
570 adds a fix to ensure that all tmp files created for writing are opened with
571 permissions 0600 - one problem I had with testing with the Finder was that
572 files were being opened write only (0200) and were then failing to upload
573 to tahoe due to internal permission denied errors.
574 
575 there remain a variety of problems with finder access which I'm unable to
576 comprehend at this time.  sometimes copies to tahoe will work fine, sometimes
577 they yield "the finder cannot complete the operation because some data ...
578 could not be read or written. (Error code -36)" sometimes "You may need to
579 enter the name and password for an administrator on this computer to change
580 the item" sometimes "The operation cannot be completed because an item with
581 the name ... already exists." and sometimes "The operation cannot be completed
582 because the item ... is locked."  What seems to be absent is rhyme or reason.
583 
584 unix operations (cp, mv) work fine, rsync works fine.
585 
586]
587[fuse/blackmatch: fix linkage problems with daemonize
588robk-tahoe@allmydata.com**20081016163637
589 
590 the daemonize() function imported from twisted was causing problems when
591 run from a frozen (py2app) build.  I simply copied the daemonize function
592 into this file, and that fixes the problem.
593 
594 also removed a couple of lines of debugging spam that slipped through.
595 
596]
597[gui/macapp: minor bugfixes
598robk-tahoe@allmydata.com**20081016163052
599 
600 though it seemed to work before the 'fstype' passed to fuse of 'allmydata' was
601 today throwing errors that len(fstype) must be at most 7.
602 
603 fixed a typo in changes to 'mount_filesystem()' args
604 
605 bumped the delay between mounting a filesystem and 'open'ing it in Finder to
606 4s, as it seems to take a little longer to mount now the client and server
607 fuse processes need to coordinate.
608]
609[fuse/blackmatch: split into client/server (twisted server)
610robk-tahoe@allmydata.com**20081016150846
611 
612 This implements a client/server split for blackmatch, where the client
613 implements the fuse_main bindings and a simple blocking rpc client mechanism.
614 The server implements the other half of that rpc mechanism, and contains all
615 the actual logic for interpreting fuse requests in the context of the on disk
616 cache and requests to the tahoe node.  The server is based on a twisted reactor.
617 
618 The rpc mechanism implements a simple method dispatch including marshalling,
619 using json, of basic inert data types, in a flat namespace (no objects).
620 The client side is written in a blocking idiom, to interface with the threading
621 model used by the fuse_main bindings, whereas the server side is written for a
622 twisted reactor-based environment, intended to facilitate implementing more
623 sophisticated logic in that paradigm.  The two communicate over a unix domain
624 socket, allocated within the nodedir.
625 
626 Command line usage is unchanged; the server is launched automatically by the
627 client. The server daemonizes itself, to avoid preventing the original parent
628 process (e.g. 'runtests') from waiting upon the server exiting.
629 
630 The client keeps open a 'keepalive' connection to the server; upon loss thereof
631 the server will exit. This addresses the fact that the python-fuse bindings
632 provide no notification of exit of the client process upon unmount.
633 
634 The client thus provides a relatively thin 'shim' proxying requests from the
635 fuse_main bindings across the rpc to the server process, which handles the
636 logic behind each request. 
637 
638 For the time being, a '--no-split' option is provided to surpress the splitting
639 into client/server, yielding the prior behaviour.  Once the server logic gets
640 more complex and more entrenched in a twisted idiom, this might be removed.
641 The 'runtests' test harness currently tests both modes, as 'impl_c' and
642 'impl_c_no_split'
643 
644]
645[fuse/blackmatch: 'flatten' the fuse api implementation
646robk-tahoe@allmydata.com**20081016143547
647 
648 the previous revision of blackmatch used a file_class to delegate all fuse
649 api operations on files to a specific per-file class, which is an option
650 given by the python-fuse bindings.
651 
652 this is a pre-cursor to the 'split' client/server version, which uses a
653 simple, moreover flat, rpc mechanism to broker access to methods.
654]
655[fuse/runtests: disable impl_a/impl_b on mac, as they don't actually work.
656robk-tahoe@allmydata.com**20081016143232]
657[fuse/runtests: added write_partial_overwrite test
658robk-tahoe@allmydata.com**20081016142926
659 
660 this tests opening a file for update, overwriting a small part of it, and
661 ensuring that the end result constitutes an overwrite of the original file.
662 This tests, e.g. the implementation doesn' open a 'fresh' file but does in
663 fact initialise the file to be uploaded with the contents of any extant
664 file before applying updates
665 
666]
667[fuse/runtests: added --tests, renamed --suites
668robk-tahoe@allmydata.com**20081016142836
669 
670 changed the --tests option to be --suites, as it takes a prefix, e.g. 'read'
671 'write' (or 'all', the default) and runs those suites which are applicable to
672 each implementation being tested.
673 
674 added a --tests option, which takes a list of tests, e.g. 'read_file_contents'
675 'write_overlapping_large_writes' and runs all tests specified without regard
676 to whether the implementation(s) under test are declared to support them.
677 
678 this is basically to allow a specific test or two to be run, saving time
679 during development and debugging by not running the entire suite
680]
681[fuse/runtests: added 'random scatter' write test
682robk-tahoe@allmydata.com**20081003233436
683 
684 this writes the test file in a randomised order, with randomly sized writes.
685 also for each 'slice' of the file written, a randomly chosen overlapping
686 write is also made to the file.  this ensures that the file will be written
687 in its entirety in a thoroughly random order, with many overlapping writes.
688]
689[fuse/runtests: add overlapping write tests
690robk-tahoe@allmydata.com**20081003224833
691 
692 using both small and large blocksizes for writes, write a 1Mb file to fuse
693 where every write overlaps another.
694 
695 This serves a useful purpose - in manual testing of blackmatch some time ago
696 most operations e.g. bulk copies, worked fine, but using rsync caused data
697 corruption on most files.  it turned out to be that rsync writes in 64K blocks,
698 but rather than making the last block short, the last block instead overlaps
699 the preceding (already written) block.  This revealed a problem where cache
700 files were being opened 'append' rather than 'write' and hence the overlapping
701 write to the fuse layer caused the overlapping portion of the file to be
702 duplicated in cache, leading to oversized and corrupt files being uploaded.
703]
704[fuse/runtests: remove write small file test, as it's subsumed by the tiny_file test
705robk-tahoe@allmydata.com**20081003223944]
706[fuse/runtests: added linear write tests for various block sizes
707robk-tahoe@allmydata.com**20081003223550
708 
709 unit tests to test writing contiguous blocks linearly through the file,
710 for a variety of block sizes;  'tiny_file' is an entire file fitting within
711 a single io block / write operation.  'linear_{small,large}_writes' test
712 a 1Mb file written with each write operation containing significantly less
713 or more, respecitvely, data than fuse will pass into the implementation as
714 a single operation (which on the mac at least is 64Kib)
715]
716[fuse/runtests: add a very simple 'write' test
717robk-tahoe@allmydata.com**20081003172044
718 
719 this performs a very simple write through the fuse layer and confirms that
720 the file is stored correctly into the tahoe mesh.  ('simple' in the sense
721 that the entire file body fits trivially in a single write() operation,
722 disk block etc)
723]
724[fuse/runtests: added a --web-open option
725robk-tahoe@allmydata.com**20081003172026
726 
727 similar to the --debug-wait option which causes the test harness to
728 pause at various stages of the process to facilitate debugging, this
729 option simplifies that debugging by automatically opening a web browser
730 to the root dir of that implementation's tests when tests are commenced.
731 
732 in addition, if --web-open is specfied but --debug-wait is not, the
733 harness will still pause after running tests but before tearing down
734 the tahoe grid - this allows all tests to run to completion, but
735 provide a debugging hook to investigate the end state of the grid's
736 contents thereafter.
737]
738[fuse/impl_a: fix a suspected bug in caching
739robk-tahoe@allmydata.com**20081003171309
740 
741 from my examination of the tahoe_fuse ('impl_a') code, it looks like
742 the intention is to cache the file contents in memory while it's open,
743 since it does in fact do that.  however it looks like it also ignored
744 that cache entirely, and made an individual tahoe webapi GET request
745 for each and every read() operation regardless of the relative size of
746 the read block and the file in question.
747 
748 this changes that to make read() use the data in memory rather than
749 fetch the data over again.   if there's something more subtle going
750 on, please let me know.
751]
752[gui/macapp: slew of code cleanup; unmount filesystems on quit
753robk-tahoe@allmydata.com**20080925233235
754 
755 a handful of code cleanup, renaming and refactoring.  basically consolidating
756 'application logic' (mount/unmount fs) into the 'MacGuiApp' class (the wx.App)
757 and cleaning up various scoping things around that.  renamed all references to
758 'app' to refer more clearly to the 'AppContainer' or to the guiapp.
759 
760 globally renamed basedir -> nodedir
761 
762 also made the guiapp keep a note of each filesystem it mounts, and unmount
763 them upon 'quit' so as to cleanup the user's environment before the tahoe node
764 vanishes from out underneath the orphaned tahoe fuse processes
765 
766]
767[gui/macapp: make submenu of aliases for 'webopen'
768robk-tahoe@allmydata.com**20080925163919
769 
770 this changes the 'open webroot' menu item to be a submenu listing all aliases
771 defined in ~/.tahoe.  Note that the dock menu does not support submenus, so it
772 only offers a single 'open webroot' option for the default tahoe: alias.
773 
774 I had trouble with this at first and concluded that the submenus didn't work,
775 and made it a distinct 'WebUI' menu in it's own right.  on further inspection,
776 there are still problems but they seem to be something like once the dock menu
777 has been used, sometimes the app's main menubar menus will cease to function,
778 and this happens regardless of whether submenus or plain simple menus are used.
779 I have no idea what the peoblem is, but it's not submenu specific.
780]
781[repairer: fix flaw in testutil.flip_one_bit() that Brian pointed out
782zooko@zooko.com**20081016194848]
783[misc/incident-gatherer: add classify_tahoe.py: a foolscap incident-gatherer classification plugin
784warner@allmydata.com**20081015220940]
785[repairer: test all different kinds of corruption that can happen to share files on disk
786zooko@zooko.com**20081014230920]
787[util/time_format.py: accept space separator, add unit tests
788warner@allmydata.com**20081013225258]
789[test_storage: use different filenames, poor stupid windows
790warner@allmydata.com**20081010021139]
791[scripts/debug.py: emit the immutable-share version number, tolerate v2
792warner@allmydata.com**20081010013422]
793[storage.py: improve some precondition() error messages
794warner@allmydata.com**20081010011425]
795[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.
796warner@allmydata.com**20081010011327]
797[debug.py: oops, add missing import for ReadBucketProxy
798warner@allmydata.com**20081010002922]
799[storage: split WriteBucketProxy and ReadBucketProxy out into immutable/layout.py . No behavioral changes.
800warner@allmydata.com**20081010000800]
801[interfaces: loosen a few max-size constraints which would limit us to a mere 1.09 TB maximum file size
802zooko@zooko.com**20081009191357
803 
804 These constraints were originally intended to protect against attacks on the
805 storage server protocol layer which exhaust memory in the peer.  However,
806 defending against that sort of DoS is hard -- probably it isn't completely
807 achieved -- and it costs development time to think about it, and it sometimes
808 imposes limits on legitimate users which we don't necessarily want to impose.
809 So, for now we forget about limiting the amount of RAM that a foolscap peer can
810 cause you to start using.
811 
812]
813[util/limiter: add a repr
814warner@allmydata.com**20081007201945]
815[dirnode.build_manifest: include node.list in the limiter, that's the most important thing to slow down
816warner@allmydata.com**20081007201929]
817[web/directory: t=manifest output=html: make the caps into clickable hrefs
818warner@allmydata.com**20081007201845]
819[web/directory: factor out the get_root function
820warner@allmydata.com**20081007201742]
821[web/directory.py: remove unused imports
822warner@allmydata.com**20081007194820]
823[test_web: deep-size is more variable than I thought, so assert less
824warner@allmydata.com**20081007051147]
825[web: change t=manifest to return a list of (path,read/writecap) tuples, instead of a list of verifycaps. Add output=html,text,json.
826warner@allmydata.com**20081007043618]
827[web: rewrite t=deep-size in terms of deep-stats, update test to match inclusion of directory sizes
828warner@allmydata.com**20081007043539]
829[ftpd: hush pyflakes
830warner@allmydata.com**20081007014513]
831[ftpd: make sure we're using a patched/fixed Twisted, to avoid confusion later
832warner@allmydata.com**20081007011411]
833[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
834warner@allmydata.com**20081007010605]
835[ftpd: remove debug messages
836warner@allmydata.com**20081006231620]
837[ftpd: add native_client.php -based HTTP authentication scheme
838warner@allmydata.com**20081006231511]
839[ftpd: add ftp.accounts checker, remove InMemoryPasswordChecker
840warner@allmydata.com**20081006225124]
841[test_system: add test coverage for immutable download.ConsumerAdapter, remove debug messages
842warner@allmydata.com**20081006225037]
843[ftp server: initial implementation. Still needs unit tests, custom Twisted patches. For #512
844warner@allmydata.com**20081006195236]
845[test_cli.py: remove unused imports
846warner@allmydata.com**20081007004204]
847[CLI: remove 'tahoe admin generate-keypair', since the pycryptopp ecdsa API is about to change incompatibly. We'll undo this once pycryptopp is updated
848warner@allmydata.com**20081007002320]
849[docs: update architecture.txt 's section on the vdrive a.k.a. filesystem layer
850zooko@zooko.com**20081006210500
851 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.
852]
853[dirnode: fix my remarkably-consistent 'metdadata' typo
854warner@allmydata.com**20081003010845]
855[interfaces: fix minor typo
856warner@allmydata.com**20081003005249]
857[dirnode: add get_child_and_metadata_at_path
858warner@allmydata.com**20081003005203]
859[stop using 'as' as an identifier: as with 'with', 'as' has become a reserved word in python 2.6
860warner@allmydata.com**20081003002749]
861[scripts/admin: split up generate_keypair code so that unit tests can use it more easily
862warner@allmydata.com**20081001235238]
863[docs: add some notes about things to do for a Tahoe release on pypi, freshmeat, and launchpad
864zooko@zooko.com**20081001210703]
865[misc/cpu-watcher.tac: use writeaside-and-rename for the history.pickle file
866warner@allmydata.com**20081001003053]
867[misc/spacetime: use async polling so we can add a 60-second timeout, add an index to the 'url' Axiom column for 2x speedup
868warner@allmydata.com**20080930233448]
869[#518: replace various BASEDIR/* config files with a single BASEDIR/tahoe.cfg, with backwards-compatibility of course
870warner@allmydata.com**20080930232149]
871[tolerate simplejson-2.0.0 and newer, which frequently return bytestrings instead of unicode objects. Closes #523
872warner@allmydata.com**20080930222106]
873[munin/tahoe_doomsday: oops, tolerate 'null' in the timeleft results, to unbreak the 2wk/4wk graphs
874warner@allmydata.com**20080930202051]
875[test_node: improve coverage of advertised_ip_addresses a bit
876warner@allmydata.com**20080930060816]
877[testutil.PollMixin: set default timeout (to 100s), emit a more helpful error when the timeout is hit
878warner@allmydata.com**20080930052309]
879[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)
880zooko@zooko.com**20080926224913]
881[repairer: assert that the test code isn't accidentally allowing the repairer code which is being tested to do impossible things
882zooko@zooko.com**20080926222353]
883[repairer: enhance the repairer tests
884zooko@zooko.com**20080926174719
885 Make sure the file can actually be downloaded afterward, that it used one of the
886 deleted and then repaired shares to do so, and that it repairs from multiple
887 deletions at once (without using more than a reasonable amount of calls to
888 storage server allocate).
889]
890[netstring: add required_trailer= argument
891warner@allmydata.com**20080926165754]
892[test_netstring.py: move netstring tests to a separate file
893warner@allmydata.com**20080926165526]
894[move netstring() and split_netstring() into a separate util.netstring module
895warner@allmydata.com**20080926043824]
896[repairer: remove a test that doesn't apply to the repair-from-corruption case
897zooko@zooko.com**20080925220954]
898[repairer: add a test that repairer fixes corrupted shares (in addition to the test that it fixes deleted shares)
899zooko@zooko.com**20080925220712]
900[docs: proposed mutable file crypto design with ECDSA, 96-bit private keys, and semi-private keys (from http://allmydata.org/~zooko/lafs.pdf )
901zooko@zooko.com**20080925213457]
902[docs: mutable file crypto design (from http://allmydata.org/~zooko/lafs.pdf )
903zooko@zooko.com**20080925213433]
904[repairer: fix swapped docstrings; thanks Brian
905zooko@zooko.com**20080925182436]
906[trivial: remove unused imports; thanks, pyflakes
907zooko@zooko.com**20080925180422]
908[trivial: remove unused imports -- thanks, pyflakes
909zooko@zooko.com**20080925173453]
910[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
911zooko@zooko.com**20080925171653
912 Hm...  "Checker" ought to be renamed to "CheckerRepairer" or "Repairer" at some point...
913]
914[setup: remove a few minimal unit tests from test_filenode which have been obviated by much better tests in test_mutable and test_system
915zooko@zooko.com**20080925161544]
916[gui/macapp: rough cut of ui tweaks; configurability, auto-mount
917robk-tahoe@allmydata.com**20080925141224
918 
919 chatting with peter, two things the mac gui needed were the ability to mount
920 the 'allmydata drive' automatically upon launching the app, and open the
921 Finder to reveal it.  (also a request to hide the debug 'open webroot' stuff)
922 
923 this (somewhat rough) patch implements all the above as default behaviour
924 
925 it also contains a quick configuration mechanism for the gui - rather than a
926 preferences gui, running with a more 'tahoe' styled mechanism, the contents
927 of a few optional files can modify the default behaviour, specifically file
928 in ~/.tahoe/gui.conf control behaviour as follows:
929 
930 auto-mount (bool): if set (the default) then the mac app will, upon launch
931 automatically mount the 'tahoe:' alias with the display name 'Allmydata'
932 using a mountpoint of ~/.tahoe/mnt/__auto__
933 
934 auto-open (bool): if set (the default) then upon mounting a file system
935 (including the auto-mount if set) finder will be opened to the mountpoint
936 of the filesystem, which essentially reveals the newly mounted drive in a
937 Finder window
938 
939 show-webopen (bool): if set (false by default) then the 'open webroot'
940 action will be made available in both the dock and file menus of the app
941 
942 daemon-timout (int): sets the daemon-timeout option passed into tahoe fuse
943 when a filesystem is mounted. this defaults to 5 min
944 
945 files of type (int) much, naturally contain a parsable int representation.
946 files of type (bool) are considered true if their (case-insensitive) contents
947 are any of ['y', 'yes', 'true', 'on', '1'] and considered false otherwise.
948 
949]
950[gui/macapp: improve 'about' box
951robk-tahoe@allmydata.com**20080925135415
952 
953 adds exactly 1 metric dollop of professionalism to the previously
954 rather amateurish looking about box.
955]
956[fuse/impl_c: UNDO --auto-fsid option
957robk-tahoe@allmydata.com**20080925134730
958 
959 rolling back:
960 
961 Thu Sep 25 14:42:23 BST 2008  robk-tahoe@allmydata.com
962   * fuse/impl_c: add --auto-fsid option
963   
964   this was inspired by reading the fuse docs and discovering the 'fsid' option
965   to fuse_main, and was _intended_ to support a sort of 'stability' to the
966   filesystem (specifically derived from the root-uri mounted, whether directly
967   or via an alias) to support mac aliases across unmount/remount etc.
968   
969   some experimentation shows that that doesn't actually work, and that, at
970   least for mac aliases in my testing, they're tied to path-to-mountpoint and
971   not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
972   is causing weirdness therein.
973   
974   at any rate, I'm recording it simply for posterity, in case it turns out to
975   be useful after all somewhere down the road.
976   
977 
978     M ./contrib/fuse/impl_c/blackmatch.py +13
979]
980[fuse/impl_c: add --auto-fsid option
981robk-tahoe@allmydata.com**20080925134223
982 
983 this was inspired by reading the fuse docs and discovering the 'fsid' option
984 to fuse_main, and was _intended_ to support a sort of 'stability' to the
985 filesystem (specifically derived from the root-uri mounted, whether directly
986 or via an alias) to support mac aliases across unmount/remount etc.
987 
988 some experimentation shows that that doesn't actually work, and that, at
989 least for mac aliases in my testing, they're tied to path-to-mountpoint and
990 not to the fsid - which seems to have no bearing.  perhaps the 'local' flag
991 is causing weirdness therein.
992 
993 at any rate, I'm recording it simply for posterity, in case it turns out to
994 be useful after all somewhere down the road.
995 
996]
997[manhole: be more tolerant of authorized_keys. files in .tahoe
998robk-tahoe@allmydata.com**20080925031149
999 
1000 both peter and I independently tried to do the same thing to eliminate the
1001 authorized_keys file which was causing problems with the broken mac build
1002 (c.f. #522) namely mv authorized_keys.8223{,.bak}  but the node is, ahem,
1003 let's say 'intolerant' of the trailing .bak - rather than disable the
1004 manhole as one might expect, it instead causes the node to explode on
1005 startup.  this patch makes it skip over anything that doesn't pass the
1006 'parse this trailing stuff as an int' test.
1007]
1008[fuse/impl_c: move mac tahoefuse impl out into contrib/fuse
1009robk-tahoe@allmydata.com**20080925014214
1010 
1011 For a variety of reasons, high amongst them the fact that many people
1012 interested in fuse support for tahoe seem to have missed its existence,
1013 the existing fuse implementation for tahoe, previously 'mac/tahoefuse.py'
1014 has been renamed and moved.
1015 
1016 It was suggested that, even though the mac build depends upon it, that
1017 the mac/tahoefuse implementation be moved into contrib/fuse along with
1018 the other fuse implementations.  The fact that it's not as extensively
1019 covered by unit tests as mainline tahoe was given as corroboration.
1020 
1021 In a bid to try and stem the confusion inherent in having tahoe_fuse,
1022 tfuse and tahoefuse jumbled together (not necessarily helped by
1023 referring to them as impl_a, b and c respectively) I'm hereby renaming
1024 tahoefuse as 'blackmatch'  (black match is, per wikipedia "a type of
1025 crude fuse" hey, I'm a punny guy)  Maybe one day it'll be promoted to
1026 be 'quickmatch' instead...
1027 
1028 Anyway, this patch moves mac/tahoefuse.py out to contrib/fuse/impl_c/
1029 as blackmatch.py, and makes appropriate changes to the mac build process
1030 to transclude blackmatch therein.  this leaves the extant fuse.py and
1031 fuseparts business in mac/ as-is and doesn't attempt to address such
1032 issues in contrib/fuse/impl_c.
1033 
1034 it is left as an exercise to the reader (or the reader of a message
1035 to follow) as to how to deal with the 'fuse' python module on the mac.
1036 
1037 as of this time, blackmatch should work on both mac and linux, and
1038 passes the four extant tests in runtests.  (fwiw neither impl_a nor
1039 impl_b have I managed to get working on the mac yet)
1040 
1041 since blackmatch supports a read-write and caching fuse interface to
1042 tahoe, some write tests obviously need to be added to runtests.
1043 
1044]
1045[macapp: changes to support aliases, updated tahoefuse command line options
1046robk-tahoe@allmydata.com**20080925010128
1047 
1048 the tahoefuse command line options changed to support the runtests harness,
1049 and as part of that gained support for named aliases via --alias
1050 
1051 this changes the mac app's invocation of tahoefuse to match that, and also
1052 changes the gui to present the list of defined aliases as valid mounts
1053 
1054 this replaces the previous logic which examined the ~/.tahoe/private directory
1055 looking for files ending in '.cap' - an ad-hoc alias mechanism.
1056 
1057 if a file is found matching ~/.tahoe/private/ALIASNAME.icns then that will still
1058 be passed to tahoefuse as the icon to display for that filesystem. if no such
1059 file is found, the allmydata icon will be used by default.
1060 
1061 the '-olocal' option is passed to tahoefuse.  this is potentially contentious.
1062 specifically this is telling the OS that this is a 'local' filesystem, which is
1063 intended to be used to locally attached devices.  however leopard (OSX 10.5)
1064 will only display non-local filesystems in the Finder's side bar if they are of
1065 fs types specifically known by Finder to be network file systems (nfs, cifs,
1066 webdav, afp)  hence the -olocal flag is the only way on leopard to cause finder
1067 to display the mounted filesystem in the sidebar, but it displays as a 'device'.
1068 there is a potential (i.e. the fuse docs carry warnings) that this may cause
1069 vague and unspecified undesirable behaviour.
1070 (c.f. http://code.google.com/p/macfuse/wiki/FAQ specifically Q4.3 and Q4.1)
1071 
1072 
1073]
1074[fuse/impl_c: reworking of mac/tahoefuse, command line options, test integration
1075robk-tahoe@allmydata.com**20080925001535
1076 
1077 a handful of changes to the tahoefuse implementation used by the mac build, to
1078 make command line option parsing more flexible and robust, and moreover to
1079 facilitate integration of this implementation with the 'runtests' test harness
1080 used to test the other two implementations.
1081 
1082 this patch includes;
1083 - improvements to command line option parsing [ see below ]
1084 - support for 'aliases' akin to other tahoe tools
1085 - tweaks to support linux (ubuntu hardy)
1086 
1087 the linux support tweaks are, or at least seem to be, a result of the fact that
1088 hardy ships with fuse 0.2pre3, as opposed to the fuse0.2 that macfuse is based
1089 upon.  at least the versions I was working with have discrepencies in their
1090 interfaces, but on reflection this is probably a 'python-fuse' version issue
1091 rather than fuse per se.  At any rate, the fixes to handling the Stat objects
1092 should be safe against either version, it's just that the bindings on hardy
1093 lacked code that was in the 'fuse' python module on the mac...
1094 
1095 command line options:
1096 
1097 the need for more flexible invocation in support of the runtests harness led
1098 me to rework the argument parsing from some simple positional hacks with a
1099 pass-through of the remainder to the fuse binding's 'fuse_main' to a system
1100 using twisted.usage to parse arguments, and having just one option '-o' being
1101 explicitly a pass-through for -o options to fuse_main. the options are now:
1102 
1103 --node-directory NODEDIR : this is used to look up the node-url to connect
1104 to if that's not specified concretely on the command line, and also used to
1105 determine the location of the cache directory used by the implementation,
1106 specifically '_cache' within the nodedir.  default value: ~/.tahoe
1107 
1108 --node-url NODEURL : specify a node-url taking precendence over that found
1109 in the node.url file within the nodedir
1110 
1111 --alias ALIAS : specifies the named alias should be mounted. a lookup is
1112 performed in the alias table within 'nodedir' to find the root dir cap
1113 the named alias must exist in the alias table of the specified nodedir
1114 
1115 --root-uri ROOTURI : specifies that the given directory uri should be mounted
1116 
1117 at least one of --alias and --root-uri must be given (which directory to mount
1118 must be specified somehow)  if both are given --alias takes precedence.
1119 
1120 --cache-timeout TIMEOUTSECS : specifies the number of seconds that cached
1121 directory data should be considered valid for.  this tahoefuse implementation
1122 implements directory caching for a limited time; largely because the mac (i.e.
1123 the Finder in particular) tends to make a large number of requests in quick
1124 successsion when browsing the filesystem.  on the flip side, the 'runtests'
1125 unit tests fail in the face of such caching because the changes made to the
1126 underlying tahoe directories are not reflected in the fuse presentation.  by
1127 specifying a cache-timeout of 0 seconds, runtests can force the fuse layer
1128 into refetching directory data upon each request.
1129 
1130 any number of -oname=value options may be specified on the command line,
1131 and they will all be passed into the underlying fuse_main call.
1132 
1133 a single non-optional argument, the mountpoint, must also be given.
1134 
1135 
1136 
1137]
1138[fuse/tests: slew of changes to fuse 'runtests'
1139robk-tahoe@allmydata.com**20080924183601
1140 
1141 This patch makes a significant number of changes to the fuse 'runtests' script
1142 which stem from my efforts to integrate the third fuse implementation into this
1143 framework.  Perhaps not all were necessary to that end, and I beg nejucomo's
1144 forebearance if I got too carried away.
1145 
1146 - cleaned up the blank lines; imho blank lines should be empty
1147 
1148 - made the unmount command switch based on platform, since macfuse just uses
1149 'umount' not the 'fusermount' command (which doesn't exist)
1150 
1151 - made the expected working dir for runtests the contrib/fuse dir, not the
1152 top-level tahoe source tree - see also discussion of --path-to-tahoe below
1153 
1154 - significantly reworked the ImplProcManager class.  rather than subclassing
1155 for each fuse implementation to be tested, the new version is based on
1156 instantiating objects and providing relevant config info to the constructor.
1157 this was motivated by a desire to eliminate the duplication of similar but
1158 subtly different code between instances, framed by consideration of increasing
1159 the number of platforms and implementations involved. each implementation to
1160 test is thus reduced to the pertinent import and an entry in the
1161 'implementations' table defining how to handle that implementation. this also
1162 provides a way to specify which sets of tests to run for each implementation,
1163 more on that below.
1164 
1165 
1166 - significantly reworked the command line options parsing, using twisted.usage;
1167 
1168 what used to be a single optional argument is now represented by the
1169 --test-type option which allows one to choose between running unittests, the
1170 system tests, or both.
1171 
1172 the --implementations option allows for a specific (comma-separated) list of
1173 implemenations to be tested, or the default 'all'
1174 
1175 the --tests option allows for a specific (comma-separated) list of tests sets
1176 to be run, or the default 'all'.  note that only the intersection of tests
1177 requested on the command line and tests relevant to each implementation will
1178 be run. see below for more on tests sets.
1179 
1180 the --path-to-tahoe open allows for the path to the 'tahoe' executable to be
1181 specified. it defaults to '../../bin/tahoe' which is the location of the tahoe
1182 script in the source tree relative to the contrib/fuse dir by default.
1183 
1184 the --tmp-dir option controls where temporary directories (and hence
1185 mountpoints) are created during the test.  this defaults to /tmp - a change
1186 from the previous behaviour of using the system default dir for calls to
1187 tempfile.mkdtemp(), a behaviour which can be obtained by providing an empty
1188 value, e.g. "--tmp-dir="
1189 
1190 the --debug-wait flag causes the test runner to pause waiting upon user
1191 input at various stages through the testing, which facilitates debugging e.g.
1192 by allowing the user to open a browser and explore or modify the contents of
1193 the ephemeral grid after it has been instantiated but before tests are run,
1194 or make environmental adjustments before actually triggering fuse mounts etc.
1195 note that the webapi url for the first client node is printed out upon its
1196 startup to facilitate this sort of debugging also.
1197 
1198 
1199 - the default tmp dir was changed, and made configurable. previously the
1200 default behaviour of tempfile.mkdtemp() was used.  it turns out that, at least
1201 on the mac, that led to temporary directories to be created in a location
1202 which ultimately led to mountpoint paths longer than could be handled by
1203 macfuse - specifically mounted filesystems could not be unmounted and would
1204 'leak'. by changing the default location to be rooted at /tmp this leads to
1205 mountpoint paths short enough to be supported without problems.
1206 
1207 - tests are now grouped into 'sets' by method name prefix.  all the existing
1208 tests have been moved into the 'read' set, i.e. with method names starting
1209 'test_read_'. this is intended to facilitate the fact that some implementations
1210 are read-only, and some support write, so the applicability of tests will vary
1211 by implementation. the 'implementations' table, which governs the configuration
1212 of the ImplProcManager responsible for a given implementation, provides a list
1213 of 'test' (i.e test set names) which are applicable to that implementation.
1214 note no 'write' tests yet exist, this is merely laying the groundwork.
1215 
1216 - the 'expected output' of the tahoe command, which is checked for 'surprising'
1217 output by regex match, can be confused by spurious output from libraries.
1218 specfically, testing on the mac produced a warning message about zope interface
1219 resolution various multiple eggs.  the 'check_tahoe_output()' function now has
1220 a list of 'ignorable_lines' (each a regex) which will be discarded before the
1221 remainder of the output of the tahoe script is matched against expectation.
1222 
1223 - cleaned up a typo, and a few spurious imports caught by pyflakes
1224 
1225]
1226[fuse/impl_{a,b}: improve node-url handling
1227robk-tahoe@allmydata.com**20080924182854
1228   
1229 specifically change the expectation of the code to be such that the node-url
1230 (self.url) always includes the trailing slash to be a correctly formed url
1231 
1232 moreover read the node-url from the 'node.url' file found in the node 'basedir'
1233 and only if that doesn't exist, then fall back to reading the 'webport' file
1234 from therein and assuming localhost.  This then supports the general tahoe
1235 pattern that tools needing only a webapi server can be pointed at a directory
1236 containing the node.url file, which can optionally point to another server,
1237 rather than requiring a complete node dir and locally running node instance.
1238 
1239]
1240[fuse/impl_b: tweaks from testing on hardy
1241robk-tahoe@allmydata.com**20080924180738
1242 
1243 from testing on linux (specifically ubuntu hardy) the libfuse dll has a
1244 different name, specifically libfuse.so.2. this patch tries libfuse.so
1245 and then falls back to trying .2 if the former fails.
1246 
1247 it also changes the unmount behaviour, to simply return from the handler's
1248 loop_forever() loop upon being unmounted, rather than raising an EOFError,
1249 since none of the client code I looked at actually handled that exception,
1250 but did seem to expect to fall off of main() when loop_forever() returned.
1251 Additionally, from my testing unmount typically led to an OSError from the
1252 fuse fd read, rather than an empty read, as the code seemed to expect.
1253 
1254 also removed a spurious import pyflakes quibbled about.
1255]
1256[setup: fix site-dirs to find system installed twisted on mac.
1257robk-tahoe@allmydata.com**20080924174255
1258 
1259 zooko helped me unravel a build weirdness today.  somehow the system installed
1260 twisted (/System/Library) was pulling in parts of the other twisted (/Library)
1261 which had been installed by easy_install, and exploding.
1262 
1263 getting rid of the latter helped, but it took this change to get the tahoe
1264 build to stop trying to rebuild twisted and instead use the one that was
1265 already installed. c.f. tkt #229
1266]
1267[CLI: rework webopen, and moreover its tests w.r.t. path handling
1268robk-tahoe@allmydata.com**20080924164523
1269 
1270 in the recent reconciliation of webopen patches, I wound up adjusting
1271 webopen to 'pass through' the state of the trailing slash on the given
1272 argument to the resultant url passed to the browser.  this change
1273 removes the requirement that arguments must be directories, and allows
1274 webopen to be used with files.  it also broke the tests that assumed
1275 that webopen would always normalise the url to have a trailing slash.
1276 
1277 in fixing the tests, I realised that, IMHO, there's something deeply
1278 awry with the way tahoe handles paths; specifically in the combination
1279 of '/' being the name of the root path within an alias, but a leading
1280 slash on paths, e.g. 'alias:/path', is catagorically incorrect. i.e.
1281  'tahoe:' == 'tahoe:/' == '/'
1282 but 'tahoe:/foo' is an invalid path, and must be 'tahoe:foo'
1283 
1284 I wound up making the internals of webopen simply spot a 'path' of
1285 '/' and smash it to '', which 'fixes' webopen to match the behaviour
1286 of tahoe's path handling elsewhere, but that special case sort of
1287 points to the weirdness.
1288 
1289 (fwiw, I personally found the fact that the leading / in a path was
1290 disallowed to be weird - I'm just used to seeing paths qualified by
1291 the leading / I guess - so in a debate about normalising path handling
1292 I'd vote to include the /)
1293 
1294]
1295[CLI: reconcile webopen changes
1296robk-tahoe@allmydata.com**20080924152002
1297 
1298 I think this is largely attributable to a cleanup patch I'd made
1299 which never got committed upstream somehow, but at any rate various
1300 conflicting changes to webopen had been made. This cleans up the
1301 conflicts therein, and hopefully brings 'tahoe webopen' in line with
1302 other cli commands.
1303]
1304[cli: cleanup webopen command
1305robk-tahoe@allmydata.com**20080618201940
1306 
1307 moved the body of webopen out of cli.py into tahoe_webopen.py
1308 
1309 made its invocation consistent with the other cli commands, most
1310 notably replacing its 'vdrive path' with the same alias parsing,
1311 allowing usage such as 'tahoe webopen private:Pictures/xti'
1312]
1313[macapp: changed to remove 'Tahoe' from .app name
1314robk-tahoe@allmydata.com**20080611003145
1315 
1316 Change the build product from 'Allmydata Tahoe' to 'Allmydata'
1317 more inkeeping with the branding of the Allmydata product
1318]
1319[add --syslog argument to 'tahoe start' and 'tahoe restart', used to pass --syslog to twistd for non-Tahoe nodes (like cpu-watcher)
1320warner@allmydata.com**20080925010302]
1321[misc/make-canary-files.py: tool to create 'canary files', explained in the docstring
1322warner@allmydata.com**20080925004716]
1323[webapi: survive slashes in filenames better: make t=info and t=delete to work, and let t=rename fix the problem
1324warner@allmydata.com**20080924203505]
1325[setup: when detecting platform, ask the Python Standard Library's platform.dist() before executing lsb_release, and cache the result in global (module) variables
1326zooko@zooko.com**20080924180922
1327 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.
1328]
1329[node.py: add BASEDIR/keepalive_timeout and BASEDIR/disconnect_timeout, to set/enable the foolscap timers, for #521
1330warner@allmydata.com**20080924175112]
1331[setup: stop catching EnvironmentError when attempting to copy ./_auto_deps.py to ./src/allmydata/_auto_deps.py
1332zooko@zooko.com**20080924000402
1333 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.
1334]
1335[immutable: remove unused imports (thanks, pyflakes)
1336zooko@zooko.com**20080923192610]
1337[immutable: refactor immutable filenodes and comparison thereof
1338zooko@zooko.com**20080923185249
1339 * the two kinds of immutable filenode now have a common base class
1340 * they store only an instance of their URI, not both an instance and a string
1341 * they delegate comparison to that instance
1342]
1343[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
1344zooko@zooko.com**20080923171431
1345 Also because in some cases the former will work and the latter won't.
1346 This patch also tightens the regexes so it won't match random junk.
1347]
1348[setup: fix a cut-and-paste error in the fallback to parsing /etc/lsb-release
1349zooko@zooko.com**20080923165551]
1350[setup: if executing lsb_release doesn't work, fall back to parsing /etc/lsb-release before falling back to platform.dist()
1351zooko@zooko.com**20080923162858
1352 An explanatio of why we do it this way is in the docstring.
1353]
1354[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
1355zooko@zooko.com**20080923154820]
1356[setup: fix bug in recent patch to use allmydata.get_package_versions() to tell the foolscap app-version-tracking what's what
1357zooko@zooko.com**20080923001347]
1358[setup: when using the foolscap "what versions are here?" feature, use allmydata.get_package_versions() instead of specifically importing allmydata, pycryptopp, and zfec
1359zooko@zooko.com**20080923000351]
1360[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
1361zooko@zooko.com**20080922235354]
1362[misc/make_umid: change docs, make elisp code easier to grab
1363warner@lothar.com**20080920183933]
1364[use foolscap's new app_versions API, require foolscap-0.3.1
1365warner@lothar.com**20080920183853]
1366[BASEDIR/nickname is now UTF-8 encoded
1367warner@lothar.com**20080920183713]
1368[various: use util.log.err instead of twisted.log.err, so we get both Incidents and trial-test-flunking
1369warner@lothar.com**20080920173545]
1370[logging.txt: explain how to put log.err at the end of Deferred chains, explain FLOGTOTWISTED=1
1371warner@lothar.com**20080920173500]
1372[util.log: send log.err to Twisted too, so that Trial tests are flunked
1373warner@lothar.com**20080920173427]
1374[setup.py trial: improve --verbose suggestion a bit
1375warner@lothar.com**20080919193922]
1376[test_cli: disable generate-keypair test on OS-X, pycryptopp still has a bug
1377warner@lothar.com**20080919193855]
1378[NEWS: finish editing for the upcoming 1.3.0 release
1379warner@lothar.com**20080919193053]
1380[NEWS: more edits, almost done
1381warner@lothar.com**20080919010036]
1382[NEWS: describe all changes since the last release. Still needs editing.
1383warner@lothar.com**20080919002755]
1384[CLI: add 'tahoe admin generate-keypair' command
1385warner@lothar.com**20080919001133]
1386[web: add 'more info' pages for files and directories, move URI/checker-buttons/deep-size/etc off to them
1387warner@lothar.com**20080918050041]
1388[setup.py: remove unused 'Extension' import
1389warner@lothar.com**20080917230829]
1390[setup.py,Makefile: move the 'chmod +x bin/tahoe' into setup.py
1391warner@lothar.com**20080917230756]
1392[docs/install.html: reference InstallDetails instead of debian-specific stuff
1393warner@lothar.com**20080917225742]
1394[Makefile,docs: tahoe-deps.tar.gz now lives in separate source/deps/ directory on http://allmydata.org
1395warner@lothar.com**20080917204452]
1396[docs: mention -SUMO tarballs, point users at release tarballs instead of development ones
1397warner@lothar.com**20080917203631]
1398[setup.py,Makefile: teat sdist --sumo about tahoe-deps/, use -SUMO suffix on tarballs, add sumo to 'make tarballs' target
1399warner@lothar.com**20080917200119]
1400[.darcs-boringfile ignore tahoe-deps and tahoe-deps.tar.gz
1401warner@lothar.com**20080917195938]
1402[docs: add a note about the process of making a new Tahoe release
1403zooko@zooko.com**20080917170839]
1404[Makefile: pyutil from a dependent lib causes a #455-ish problem, the workaround is to run build-once *three* times
1405warner@lothar.com**20080917053643]
1406[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
1407warner@lothar.com**20080917052204]
1408[misc/check-build.py: ignore the 'Downloading file:..' line that occurs for the setup_requires= -triggered handling of the setuptools egg
1409warner@lothar.com**20080917051725]
1410[#249: add 'test-desert-island', to assert that a tahoe-deps.tar.gz -enabled build does not download anything
1411warner@lothar.com**20080917013702]
1412[#249: get dependent libs from tahoe-deps and ../tahoe-deps
1413warner@lothar.com**20080917013627]
1414[#249: move dependent libs out of misc/dependencies/, get them from tahoe-deps.tar.gz instead
1415warner@allmydata.com**20080917012545]
1416[conf_wiz.py - updating version numbers in file, should really get these from a TAG or conf file
1417secorp@allmydata.com**20080917004547]
1418[webish: add an extra newline to JSON output
1419warner@lothar.com**20080915204314]
1420[windows/Makefile: fix dependencies: windows-installer must cause windows-exe to run
1421warner@allmydata.com**20080912052151]
1422[Makefile: fix windows issues
1423warner@allmydata.com**20080912050919]
1424[Makefile: use run_with_pythonpath, move windows targets into a separate Makefile
1425warner@allmydata.com**20080912044508]
1426[setup.py: add 'setup.py run_with_pythonpath', to run other commands with PYTHONPATH set usefully
1427warner@allmydata.com**20080912044418]
1428[Makefile: convert check-auto-deps target into 'setup.py check_auto_deps'
1429warner@allmydata.com**20080912035904]
1430[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
1431warner@allmydata.com**20080912025138]
1432[rewrite parts of the Makefile in setup.py. Add 'build_tahoe' and 'trial' subcommands.
1433warner@allmydata.com**20080912010321
1434 
1435 The 'make build' target now runs 'setup.py build_tahoe', which figures out
1436 where the target 'supportlib' directory should go, and invokes 'setup.py
1437 develop' with the appropriate arguments.
1438 
1439 The 'make test' target now runs 'setup.py trial', which manages sys.path and
1440 runs trial as a subroutine instead of spawning an external process. This
1441 simplifies the case where Twisted was built as a dependent library (and thus
1442 the 'trial' executable is not on PATH).
1443 
1444 setup.py now manages sys.path and PYTHONPATH for its internal subcommands, so
1445 the $(PP) prefix was removed from all Makefile targets that invoke setup.py .
1446 For the remaining ones, the 'setup.py -q show_pythonpath' subcommand was
1447 added to compute this prefix with python rather than with fragile
1448 shell/Makefile syntax.
1449 
1450 
1451]
1452[bin/tahoe: reflow error messages
1453warner@allmydata.com**20080912010225]
1454[mac/Makefile: remove the verbose hdiutil diagnostics now that we resolved the problem
1455warner@allmydata.com**20080912004622]
1456[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.
1457warner@allmydata.com**20080910233432]
1458[web: fix output=JSON, add buttons for repair/json to the 'run deep-check' form
1459warner@allmydata.com**20080910211137]
1460[disallow deep-check on non-directories, simplifies the code a bit
1461warner@allmydata.com**20080910204458]
1462[dirnode: refactor recursive-traversal methods, add stats to deep_check() method results and t=deep-check webapi
1463warner@lothar.com**20080910084504]
1464[dirnode: cleanup, make get_verifier() always return a URI instance, not a string
1465warner@lothar.com**20080910083755]
1466[test_system: check t=deep-stats too
1467warner@lothar.com**20080910065457]
1468[test_system: add deep-check-JSON tests, fix a bug
1469warner@lothar.com**20080910061416]
1470[test_system: oops, re-enable some tests that got bypassed
1471warner@lothar.com**20080910060245]
1472[test_system: add deep-stats test
1473warner@lothar.com**20080910055634]
1474[hush pyflakes
1475warner@allmydata.com**20080910025017]
1476[checker results: add output=JSON to webapi, add tests, clean up APIs
1477warner@allmydata.com**20080910024517
1478 to make the internal ones use binary strings (nodeid, storage index) and
1479 the web/JSON ones use base32-encoded strings. The immutable verifier is
1480 still incomplete (it returns imaginary healty results).
1481]
1482[immutable verifier: provide some dummy results so deep-check works, make the tests ignore these results until we finish it off
1483warner@allmydata.com**20080910010827]
1484[mutable checker: even more tests. Everything in ICheckerResults should be covered now, except for immutable-verify which is incomplete
1485warner@allmydata.com**20080910005706]
1486[checker results: more tests, update interface docs
1487warner@allmydata.com**20080910003010]
1488[mutable checker: oops, fix redefinition of 'healthy' (numshares < N, not numshares < k, which is 'recoverable' not 'healthy')
1489warner@allmydata.com**20080910002853]
1490[checker results: more tests, more results. immutable verifier tests are disabled until they emit more complete results
1491warner@allmydata.com**20080910001546]
1492[checker: add tests, add stub for immutable check_and_repair
1493warner@allmydata.com**20080909233449]
1494[interfaces.py: minor improvement to IDirectoryNode.set_node
1495warner@allmydata.com**20080909233416]
1496[mac/Makefile: upload the .dmg file with foolscap xfer-client.py instead of scp
1497warner@allmydata.com**20080908231943]
1498[misc/xfer-client.py: small foolscap utility to transfer a file to a waiting server
1499warner@allmydata.com**20080908231903]
1500[setup: add excited DEVELOPER NOTE to install.html
1501zooko@zooko.com**20080908215603
1502 It should be removed before 1.3.0 release, of course...
1503]
1504[setup: edit the text of install.html
1505zooko@zooko.com**20080908215549]
1506[setup: add link to the DownloadDebianPackages page
1507zooko@zooko.com**20080908215451
1508 Because I want that link off of the front page of the wiki...
1509]
1510[setup: change URL from which to get source tarballs
1511zooko@zooko.com**20080908215409
1512 So that when you look at that directory you won't see distracting other things such as darcs repositories.
1513]
1514[test_system: make log() tolerate the format= form
1515warner@lothar.com**20080908030336]
1516[immutable/checker: make log() tolerate the format= form
1517warner@lothar.com**20080908030308]
1518[checker: overhaul checker results, split check/check_and_repair into separate methods, improve web displays
1519warner@allmydata.com**20080907194456]
1520[webapi.txt: explain that t=manifest gives verifycaps
1521warner@allmydata.com**20080907192950]
1522[introducer: add get_nickname_for_peerid
1523warner@allmydata.com**20080906050700]
1524[docs/logging.txt: explain tahoe/foolscap logging. Addresses #239.
1525warner@allmydata.com**20080904002531]
1526[setup: don't assert that trial is present when the Makefile is evaluated
1527zooko@zooko.com**20080903171837
1528 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.
1529 
1530 Chris Galvan is working on a much nicer fix to all these issues -- see #505.
1531 
1532]
1533[testutil.PollMixin: use a custom exception (and convert it) to avoid the ugly 'stash' cycle
1534warner@allmydata.com**20080903033251]
1535[mac/Makefile: more attempts to debug the buildslave failure
1536warner@allmydata.com**20080829220614]
1537[mac: add -verbose to the hdiutil call, to figure out why it's failing on the buildslave
1538warner@allmydata.com**20080829205243]
1539[setup: simplify parsing of python version number
1540zooko@zooko.com**20080829000045]
1541[setup: emit the version of python in the list of versions
1542zooko@zooko.com**20080828220454]
1543[munin: add tahoe_diskleft plugin, update spacetime/diskwatcher.tac to support it
1544warner@allmydata.com**20080828203236]
1545[docs: how_to_make_a_tahoe_release.txt
1546zooko@zooko.com**20080828202109
1547 Just some cryptic notes to self, but if I get hit by a truck then someone else might be able to decode them.
1548]
1549[debian: include misc/cpu-watcher.tac in the debian package
1550warner@allmydata.com**20080827223026]
1551[munin/tahoe_doomsday: change the graph title, 'time predictor' is more accurate than 'space predictor'
1552warner@allmydata.com**20080827213013]
1553[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
1554warner@allmydata.com**20080827193543]
1555[CREDITS: thanks to Chris Galvan
1556zooko@zooko.com**20080827183950]
1557[setup: patch from Chris Galvan to build sdists with no deps in them normally, but include deps if --sumo
1558zooko@zooko.com**20080827182644]
1559[servermap: don't log late arrivals, and don't log DeadReferenceError at log.WEIRD
1560warner@allmydata.com**20080827003729]
1561[mutable: make mutable-repair work for non-verifier runs, add tests
1562warner@allmydata.com**20080826233454]
1563[mutable: remove work-around for a flaw in an older version of foolscap
1564zooko@zooko.com**20080826155055
1565 We now require "foolscap[secure_connections] >= 0.3.0", per [source:_auto_deps.py].
1566]
1567[docs: edit install.html a tad
1568zooko@zooko.com**20080826154929]
1569[misc/make_umid: little script and elisp fragment to insert umid= arguments
1570warner@allmydata.com**20080826015918]
1571[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
1572warner@allmydata.com**20080826015759]
1573[logging cleanups: lower DeadReferenceError from WEIRD (which provokes Incidents) to merely UNUSUAL, don't pre-format Failures in others
1574warner@allmydata.com**20080826005155]
1575[checker: make the log() function of SimpleCHKFileVerifier compatible with the log() function of its superclasses and subclasses
1576zooko@zooko.com**20080825214407]
1577[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
1578zooko@zooko.com**20080822154605]
1579[docs/filesystem-notes.txt: add notes about enabling the 'directory index' feature on ext3 filesystems for storage server lookup speed
1580warner@allmydata.com**20080821205901]
1581[setup: doc string describing what the require_auto_deps() function is for
1582zooko@zooko.com**20080815172234]
1583[mutable/checker: log a WEIRD-level event when we see a hash failure, to trigger an Incident
1584warner@allmydata.com**20080813035020]
1585[immutable checker: add a status_report field
1586warner@allmydata.com**20080813033530]
1587[mutable/servermap: lower the priority of many log messages
1588warner@allmydata.com**20080813033506]
1589[web/deep-check: show the webapi runtime at the bottom of the page
1590warner@allmydata.com**20080813033426]
1591[CLI: tolerate blank lines in the aliases file
1592warner@allmydata.com**20080813025050]
1593[test_web: workaround broken HEAD behavior in twisted-2.5.0 and earlier
1594warner@allmydata.com**20080813024520]
1595[test_web: oops, actually use HEAD (instead of GET) in the HEAD test
1596warner@allmydata.com**20080813020451]
1597[web: use get_size_of_best_version for HEAD requests, provide correct content-type
1598warner@allmydata.com**20080813020410]
1599[mutable: add get_size_of_best_version to the interface, to simplify the web HEAD code, and tests
1600warner@allmydata.com**20080813020252]
1601[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
1602warner@allmydata.com**20080813000501]
1603[IFilesystemNode: add get_storage_index(), it makes tests easier
1604warner@allmydata.com**20080812231407]
1605[test_system: rename Checker to ImmutableChecker, to make room for a mutable one
1606warner@allmydata.com**20080812225932]
1607['tahoe debug dump-share': add --offsets, to show section offsets
1608warner@allmydata.com**20080812214656]
1609[test_cli: oops, fix tests after recent stdout/stderr cleanup
1610warner@allmydata.com**20080812214634]
1611[scripts/debug: split out dump_immutable_share
1612warner@allmydata.com**20080812205517]
1613[scripts/debug: clean up use of stdout/stderr
1614warner@allmydata.com**20080812205242]
1615[CLI: move the 'repl' command to 'tahoe debug repl'
1616warner@allmydata.com**20080812204017]
1617[CLI: move all debug commands (dump-share, dump-cap, find-shares, catalog-shares) into a 'debug' subcommand, and improve --help output
1618warner@allmydata.com**20080812203732]
1619[hush a pyflakes warning
1620warner@allmydata.com**20080812042423]
1621[web/directory: enable verify=true in t=deep-check
1622warner@allmydata.com**20080812042409]
1623[dirnode: add some deep-check logging
1624warner@allmydata.com**20080812042338]
1625[checker_results.problems: don't str the whole Failure, just extract the reason string
1626warner@allmydata.com**20080812042306]
1627[checker: add information to results, add some deep-check tests, fix a bug in which unhealthy files were not counted
1628warner@allmydata.com**20080812040326]
1629[mutable/checker: rearrange a bit, change checker-results to have a status_report string
1630warner@allmydata.com**20080812032033]
1631[mutable/servermap: add summarize_version
1632warner@allmydata.com**20080812031930]
1633[CLI: make 'tahoe webopen' command accept aliases like 'tahoe ls'
1634warner@allmydata.com**20080812012023]
1635[munin diskusage/doomsday: oops, fix labels, everything was reported in the 1hr column
1636warner@allmydata.com**20080811203431]
1637[munin/tahoe_overhead: don't emit non-sensicial numbers
1638warner@lothar.com**20080807214008]
1639[munin: add tahoe_overhead plugin, to measure effectiveness of GC and deleting data from inactive accounts
1640warner@lothar.com**20080807203925]
1641[diskwatcher.tac: include total-bytes-used
1642warner@lothar.com**20080807201214]
1643[setup: remove accidentally duplicated lines from Makefile
1644zooko@zooko.com**20080807193029]
1645[misc/dependencies: remove the no-longer-useful foolscap-0.2.5 tarball
1646warner@lothar.com**20080807184546]
1647[Makefile: avoid bare quotes, since the emacs syntax-highlighter gets confused by them
1648warner@lothar.com**20080807183001]
1649[diskwatcher.tac: don't report negative timeleft
1650warner@lothar.com**20080807173433]
1651[diskwatcher.tac: reduce the polling rate to once per hour
1652warner@lothar.com**20080807062021]
1653[misc/spacetime: add munin plugins, add everything to .deb
1654warner@lothar.com**20080807060003]
1655[diskwatcher.tac: hush pyflakes
1656warner@lothar.com**20080807050427]
1657[diskwatcher.tac: add async-GET code, but leave it commented out: urlopen() seems to work better for now
1658warner@lothar.com**20080807050327]
1659[cpu-watcher.tac: improve error message
1660warner@lothar.com**20080807043801]
1661[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
1662warner@lothar.com**20080807042222]
1663[misc/cpu-watcher.tac: tolerate missing pidfiles, just skip over that sample
1664warner@lothar.com**20080807041705]
1665[setup: don't attempt to escape quote marks, just delete them.  Ugly, but it works okay.
1666zooko@zooko.com**20080806232742]
1667[setup: escape any double-quote chars in the PATH before using the PATH to find and invoke trial
1668zooko@zooko.com**20080806231143]
1669[storage: include disk-free information in the stats-gatherer output
1670warner@lothar.com**20080806210602]
1671[mutable: more repair tests, one with force=True to check out merging
1672warner@lothar.com**20080806190607]
1673[test/common: add ShouldFailMixin
1674warner@lothar.com**20080806190552]
1675[test_mutable: add comment about minimal-bandwidth repairer, comma lack of
1676warner@lothar.com**20080806173850]
1677[test_mutable: factor out common setup code
1678warner@lothar.com**20080806173804]
1679[mutable: start adding Repair tests, fix a simple bug
1680warner@lothar.com**20080806061239]
1681[mutable.txt: add warning about out-of-date section
1682warner@lothar.com**20080806061219]
1683[test_system: factor out find_shares/replace_shares to a common class, so they can be used by other tests
1684warner@lothar.com**20080806014958]
1685[debian/control: update dependencies to match _auto_deps: foolscap-0.3.0, pycryptopp-0.5
1686warner@lothar.com**20080806013222]
1687[bump foolscap dependency to 0.3.0, for the new incident-gathering interfaces
1688warner@lothar.com**20080805235828]
1689[web: add 'report incident' button at the bottom of the welcome page
1690warner@lothar.com**20080805190921]
1691[test_cli: more coverage for 'tahoe put' modifying a mutable file in-place, by filename, closes #441
1692warner@lothar.com**20080804202643]
1693[check_grid.py: update to match new CLI: 'put - TARGET' instead of 'put TARGET'
1694warner@lothar.com**20080802024856]
1695[test_cli: remove windows-worrying newlines from test data
1696warner@lothar.com**20080802024734]
1697[test_cli.py: factor out CLITestMixin
1698warner@lothar.com**20080802022938]
1699[CLI: change one-arg forms of 'tahoe put' to make an unlinked file, fix replace-mutable #441
1700warner@lothar.com**20080802022729]
1701[CLI: add create-alias command, to merge mkdir and add-alias into a single (secure-from-argv-snooping) step
1702warner@lothar.com**20080802021041]
1703[test_cli: add system-based tests for PUT, including a mutable put that fails/todo (#441)
1704warner@lothar.com**20080801221009]
1705[tests: simplify CLI tests that use stdin, now that runner supports it
1706warner@lothar.com**20080801220514]
1707[CLI: simplify argument-passing, use options= for everthing, including stdout
1708warner@lothar.com**20080801184624]
1709[tests: add test that verifier notices any (randomly chosen) bit flipped in the verifiable part of any (randomly chosen) share
1710zooko@zooko.com**20080731002015
1711 The currently verifier doesn't (usually) pass this randomized test, hence the TODO.
1712]
1713[tests: test that checker doesn't cause reads on the storage servers
1714zooko@zooko.com**20080730235420
1715 It would still pass the test if it noticed a corrupted share.  (It won't
1716 notice, of course.)  But it is required to do its work without causing storage
1717 servers to read blocks from the filesystem.
1718 
1719]
1720[storage: make storage servers declare oldest supported version == 1.0, and storage clients declare oldest supported version == 1.0
1721zooko@zooko.com**20080730225107
1722 See comments in patch for intended semantics.
1723]
1724[tests: use the handy dandy TestCase.mktemp() function from trial to give unique and nicely named directories for each testcase
1725zooko@zooko.com**20080730224920]
1726[tests: don't use SignalMixin
1727zooko@zooko.com**20080730223536
1728 It seems like we no longer need it, and it screws up something internal in
1729 trial which causes trial's TestCase.mktemp() method to exhibit wrong behavior
1730 (always using a certain test method name instead of using the current test
1731 method name), and I wish to use TestCase.mktemp().
1732 
1733 Of course, it is possible that the buildbot is about to tell me that we do
1734 still require SignalMixin on some of our platforms...
1735 
1736]
1737[setup: if the user passes a TRIALOPT env var then pass that on to trial
1738zooko@zooko.com**20080730205806
1739 This is useful for --reporter=bwverbose, for example.
1740]
1741[setup: turn back on reactor=poll for cygwin trial (else it runs out of fds)
1742zooko@zooko.com**20080730181217]
1743[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
1744zooko@zooko.com**20080730160429]
1745[setup: whoops, really remove the default reactor=poll this time
1746zooko@zooko.com**20080730032358]
1747[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.
1748zooko@zooko.com**20080730031656
1749 
1750]
1751[setup: pass --reactor=poll to trial unless REACTOR variable is set, in which case pass --reactor=$(REACTOR)
1752zooko@zooko.com**20080730023906
1753 This hopefully works around the problem that Twisted v8.1.0 has a bug when used
1754 with pyOpenSSL v0.7 which bug causes some unit tests to spuriously fail -- see
1755 known_issues.txt r2788:
1756 
1757 http://allmydata.org/trac/tahoe/browser/docs/known_issues.txt?rev=2788#L122
1758 
1759 Also it matches with the fact that --reactor=poll is required on cygwin.
1760 
1761]
1762[setup: require secure_connections from foolscap
1763zooko@zooko.com**20080730021041
1764 This causes a problem on debian sid, since the pyOpenSSL v0.6 .deb doesn't come
1765 with .egg-info, so setuptools will not know that it is already installed and
1766 will try to install pyOpenSSL, and if it installs pyOpenSSL v0.7, then this
1767 will trigger the bug in Twisted v8.1.0 when used with pyOpenSSL v0.7.
1768 
1769 http://twistedmatrix.com/trac/ticket/3218
1770 
1771 Now the comments in twisted #3218 suggest that it happens only with the select
1772 reactor, so maybe using --reactor=poll will avoid it.
1773 
1774]
1775[tests: add test_system.Checker which tests basic checking (without verification) functionality
1776zooko@zooko.com**20080728234317]
1777[test: add testutil.flip_one_bit which flips a randomly chosen bit of the input string
1778zooko@zooko.com**20080728234217]
1779[tests: make it so that you can use common.py's SystemTestMixin.set_up_nodes() more than once with the same introducer
1780zooko@zooko.com**20080728234029]
1781[download.py: set up self._paused before registering the producer, since they might call pauseProducing right away
1782warner@lothar.com**20080728215731]
1783[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.
1784warner@allmydata.com**20080728194421]
1785[munin/tahoe_spacetime: show 2wk data even if 4wk data is unavailable
1786warner@allmydata.com**20080728194233]
1787[web: add /status/?t=json, with active upload/download ops. Addresses #493.
1788warner@allmydata.com**20080726004110]
1789[web: make t=json stats pages use text/plain, instead of leaving it at text/html
1790warner@allmydata.com**20080726002427]
1791[test_system.py: factor SystemTestMixin out of SystemTest
1792warner@allmydata.com**20080725223349]
1793[test_system.py: modify system-test setup code in preparation for merge with common.SystemTestMixin
1794warner@allmydata.com**20080725222931]
1795[test_system.py: move SystemTestMixin out into common.py, where further improvements will occur
1796warner@allmydata.com**20080725221758]
1797[test_system.py: create SystemTestMixin, with less cruft, for faster system-like tests
1798warner@allmydata.com**20080725221300]
1799[TAG allmydata-tahoe-1.2.0
1800zooko@zooko.com**20080722014608]
1801Patch bundle hash:
1802231a037886e01116a61db49fe3505110d9711b4e