3 patches for repository http://tahoe-lafs.org/source/tahoe-lafs/trunk: Fri Jan 7 09:37:18 GMT Standard Time 2011 david-sarah@jacaranda.org * src/allmydata/scripts/debug.py: add 'tahoe debug trial' command. refs #1296 Sat Jan 1 19:25:59 GMT Standard Time 2011 david-sarah@jacaranda.org * test_runner: add test_import_in_repl, which uses 'bin/tahoe debug repl' to import the allmydata module and checks that it comes from the right path. Also, fix a latent bug that caused test_the_right_code to incorrectly conclude that a path mismatch was due to a Unicode path (causing a skip rather than a failure). This version of the patch avoids a confusing shadowing of 'srcfile'. refs #1258 Sat Jan 8 11:36:52 GMT Standard Time 2011 david-sarah@jacaranda.org * Tests for 'tahoe debug trial'. refs #1296 New patches: [src/allmydata/scripts/debug.py: add 'tahoe debug trial' command. refs #1296 david-sarah@jacaranda.org**20110107093718 Ignore-this: 9228ffe655323aa486e88aded90983d7 ] { hunk ./src/allmydata/scripts/debug.py 4 # do not import any allmydata modules at this level. Do that from inside # individual functions instead. -import struct, time, os +import struct, time, os, sys from twisted.python import usage, failure from twisted.internet import defer hunk ./src/allmydata/scripts/debug.py 7 +from twisted.scripts import trial as twisted_trial class DumpOptions(usage.Options): hunk ./src/allmydata/scripts/debug.py 782 return code.interact() +class TrialOptions(twisted_trial.Options): + def getSynopsis(self): + return "Usage: tahoe debug trial [options] [[file|package|module|TestCase|testmethod]...]" + + def parseArgs(self, *args): + if not args: + args = ["allmydata.test"] + twisted_trial.Options.parseArgs(self, *args) + + def getUsage(self, width=None): + t = twisted_trial.Options.getUsage(self, width) + t += """ +The 'tahoe debug trial' command uses the correct imports for this instance of +Tahoe-LAFS. The default test suite is 'allmydata.test'. +""" + return t + + +def trial(config): + twisted_trial._initialDebugSetup(config) + trialRunner = twisted_trial._makeRunner(config) + suite = twisted_trial._getSuite(config) + + # run the tests + if config.get('until-failure'): + test_result = trialRunner.runUntilFailure(suite) + else: + test_result = trialRunner.run(suite) + + # write coverage data + if hasattr(config, 'tracer') and config.tracer: + sys.settrace(None) + results = config.tracer.results() + coverdir = os.path.join(config.get('temp-directory') or '_trial_temp', 'coverage') + results.write_results(show_missing=1, summary=False, coverdir=coverdir) + + if test_result.wasSuccessful(): + return 0 # success + else: + return 1 # failure + + class DebugCommand(usage.Options): subCommands = [ ["dump-share", None, DumpOptions, hunk ./src/allmydata/scripts/debug.py 833 ["catalog-shares", None, CatalogSharesOptions, "Describe all shares in node dirs."], ["corrupt-share", None, CorruptShareOptions, "Corrupt a share by flipping a bit."], ["repl", None, ReplOptions, "Open a Python interpreter."], + ["trial", None, TrialOptions, "Run Twisted Trial with the correct imports."], ] def postOptions(self): if not hasattr(self, 'subOptions'): hunk ./src/allmydata/scripts/debug.py 850 tahoe debug catalog-shares Describe all shares in node dirs. tahoe debug corrupt-share Corrupt a share by flipping a bit. tahoe debug repl Open a Python interpreter. + tahoe debug trial Run Twisted Trial with the correct imports. Please run e.g. 'tahoe debug dump-share --help' for more details on each subcommand. hunk ./src/allmydata/scripts/debug.py 857 """ return t + subDispatch = { "dump-share": dump_share, "dump-cap": dump_cap, hunk ./src/allmydata/scripts/debug.py 865 "catalog-shares": catalog_shares, "corrupt-share": corrupt_share, "repl": repl, + "trial": trial, } } [test_runner: add test_import_in_repl, which uses 'bin/tahoe debug repl' to import the allmydata module and checks that it comes from the right path. Also, fix a latent bug that caused test_the_right_code to incorrectly conclude that a path mismatch was due to a Unicode path (causing a skip rather than a failure). This version of the patch avoids a confusing shadowing of 'srcfile'. refs #1258 david-sarah@jacaranda.org**20110101192559 Ignore-this: 332920b103412b197b21e05989e3bda0 ] { hunk ./src/allmydata/test/test_runner.py 6 from twisted.python import usage, runtime from twisted.internet import utils -import os.path, re, sys +import os.path, re, sys, subprocess from cStringIO import StringIO from allmydata.util import fileutil, pollmixin from allmydata.util.encodingutil import unicode_to_argv, unicode_to_output, get_filesystem_encoding hunk ./src/allmydata/test/test_runner.py 17 timeout = 240 -srcfile = allmydata.__file__ -srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(srcfile)))) +def get_root_from_file(src): + srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(src)))) + + root = os.path.dirname(srcdir) + if os.path.basename(srcdir) == 'site-packages': + if re.search(r'python.+\..+', os.path.basename(root)): + root = os.path.dirname(root) + root = os.path.dirname(root) + elif os.path.basename(root) == 'src': + root = os.path.dirname(root) + + return root hunk ./src/allmydata/test/test_runner.py 30 -rootdir = os.path.dirname(srcdir) -if os.path.basename(srcdir) == 'site-packages': - if re.search(r'python.+\..+', os.path.basename(rootdir)): - rootdir = os.path.dirname(rootdir) - rootdir = os.path.dirname(rootdir) -elif os.path.basename(rootdir) == 'src': - rootdir = os.path.dirname(rootdir) +srcfile = allmydata.__file__ +rootdir = get_root_from_file(srcfile) bintahoe = os.path.join(rootdir, 'bin', 'tahoe') if sys.platform == "win32": hunk ./src/allmydata/test/test_runner.py 57 class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin): - def test_the_right_code(self): + def _check_right_code(self, file_to_check): + root_to_check = get_root_from_file(file_to_check) cwd = os.path.normcase(os.path.realpath(".")) root_from_cwd = os.path.dirname(cwd) if os.path.basename(root_from_cwd) == 'src': hunk ./src/allmydata/test/test_runner.py 64 root_from_cwd = os.path.dirname(root_from_cwd) - same = (root_from_cwd == rootdir) + same = (root_from_cwd == root_to_check) if not same: try: hunk ./src/allmydata/test/test_runner.py 67 - same = os.path.samefile(root_from_cwd, rootdir) + same = os.path.samefile(root_from_cwd, root_to_check) except AttributeError, e: e # hush pyflakes hunk ./src/allmydata/test/test_runner.py 75 msg = ("We seem to be testing the code at %r,\n" "(according to the source filename %r),\n" "but expected to be testing the code at %r.\n" - % (rootdir, srcfile, root_from_cwd)) + % (root_to_check, file_to_check, root_from_cwd)) hunk ./src/allmydata/test/test_runner.py 77 - root_from_cwdu = os.path.normcase(os.path.normpath(os.getcwdu())) + root_from_cwdu = os.path.dirname(os.path.normcase(os.path.normpath(os.getcwdu()))) if os.path.basename(root_from_cwdu) == u'src': root_from_cwdu = os.path.dirname(root_from_cwdu) hunk ./src/allmydata/test/test_runner.py 90 msg += "Please run the tests from the root of the Tahoe-LAFS distribution." self.fail(msg) + def test_the_right_code(self): + self._check_right_code(srcfile) + + def test_import_in_repl(self): + self.skip_if_cannot_run_bintahoe() + + p = subprocess.Popen([sys.executable, bintahoe, "debug", "repl"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (out, err) = p.communicate("import allmydata; print allmydata.__file__") + + self.failUnlessEqual(p.returncode, 0) + first = out.splitlines()[0] + self.failUnless(first.startswith('>>> ')) + self._check_right_code(first[4:]) + def test_path(self): self.skip_if_cannot_run_bintahoe() d = utils.getProcessOutputAndValue(bintahoe, args=["--version-and-path"], env=os.environ) hunk ./src/allmydata/test/test_runner.py 136 else: altverstr = verstr + srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(srcfile)))) required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, verstr, srcdir) alt_required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, altverstr, srcdir) } [Tests for 'tahoe debug trial'. refs #1296 david-sarah@jacaranda.org**20110108113652 Ignore-this: 12ef456c9da7913ee7839b3f71e479a6 ] { hunk ./src/allmydata/scripts/debug.py 801 def trial(config): + # This is too dependent on implementation details of Twisted Trial. + # would make run_tests + # available as a public API. + + #if hasattr(twisted_trial, 'run_tests'): + # return twisted_trial.run_tests(config) + twisted_trial._initialDebugSetup(config) trialRunner = twisted_trial._makeRunner(config) suite = twisted_trial._getSuite(config) hunk ./src/allmydata/test/test_cli.py 506 help = str(cli.AddAliasOptions()) self.failUnless("add-alias ALIAS DIRCAP" in help, help) + def test_debug_trial(self): + help = str(debug.TrialOptions()) + self.failUnless("debug trial [options] [[file|package|module|TestCase|testmethod]...]" in help, help) + self.failUnless("The 'tahoe debug trial' command uses the correct imports" in help, help) + class CreateAlias(GridTestMixin, CLITestMixin, unittest.TestCase): hunk ./src/allmydata/test/test_runner.py 33 srcfile = allmydata.__file__ rootdir = get_root_from_file(srcfile) -bintahoe = os.path.join(rootdir, 'bin', 'tahoe') -if sys.platform == "win32": - bintahoe += ".pyscript" - if not os.path.exists(bintahoe): - alt_bintahoe = os.path.join(rootdir, 'Scripts', 'tahoe.pyscript') - if os.path.exists(alt_bintahoe): - bintahoe = alt_bintahoe + +if hasattr(sys, 'frozen'): + bintahoe = os.path.join(rootdir, 'tahoe') + + if sys.platform == "win32" and os.path.exists(bintahoe + '.exe'): + bintahoe += '.exe' +else: + bintahoe = os.path.join(rootdir, 'bin', 'tahoe') + if sys.platform == "win32": + bintahoe += '.pyscript' + if not os.path.exists(bintahoe): + alt_bintahoe = os.path.join(rootdir, 'Scripts', 'tahoe.pyscript') + if os.path.exists(alt_bintahoe): + bintahoe = alt_bintahoe class SkipMixin: hunk ./src/allmydata/test/test_runner.py 66 class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin): def _check_right_code(self, file_to_check): root_to_check = get_root_from_file(file_to_check) + if os.path.basename(root_to_check) == 'dist': + root_to_check = os.path.dirname(root_to_check) + cwd = os.path.normcase(os.path.realpath(".")) root_from_cwd = os.path.dirname(cwd) if os.path.basename(root_from_cwd) == 'src': hunk ./src/allmydata/test/test_runner.py 106 def test_import_in_repl(self): self.skip_if_cannot_run_bintahoe() - p = subprocess.Popen([sys.executable, bintahoe, "debug", "repl"], - stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + args = [bintahoe, "debug", "repl"] + if not hasattr(sys, 'frozen'): + args = [sys.executable] + args + + p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (out, err) = p.communicate("import allmydata; print allmydata.__file__") self.failUnlessEqual(p.returncode, 0) hunk ./src/allmydata/test/test_runner.py 159 def test_unicode_arguments_and_output(self): self.skip_if_cannot_run_bintahoe() + if hasattr(sys, 'frozen') and sys.platform == "win32": + raise unittest.SkipTest("This test can't currently be made to work for frozen executables on Windows,\ndue to lack of support for Unicode in twisted.internet.utils.getProcessOutputAndValue.") tricky = u"\u2621" try: hunk ./src/allmydata/test/test_runner.py 179 def test_run_with_python_options(self): self.skip_if_cannot_run_bintahoe() + if hasattr(sys, 'frozen'): + raise unittest.SkipTest("This test doesn't apply to frozen executables.") # -t is a harmless option that warns about tabs. d = utils.getProcessOutputAndValue(sys.executable, args=['-t', bintahoe, '--version'], hunk ./src/allmydata/test/test_system.py 1756 return d + def test_debug_trial(self, *args): + d = self._run_cli_in_subprocess(['debug', 'trial', 'allmydata.test.trialtest']) + def _check_failure( (out, err, rc) ): + self.failUnlessEqual(rc, 1) + self.failUnlessIn("[SKIPPED]: allmydata.test.trialtest.Success.test_skip", out) + self.failUnlessIn("[TODO]: allmydata.test.trialtest.Success.test_todo", out) + self.failUnlessIn("[FAIL]: allmydata.test.trialtest.Failure.test_fail", out) + self.failUnlessIn("[ERROR]: allmydata.test.trialtest.Failure.test_deferred_error", out) + self.failUnlessIn("[ERROR]: allmydata.test.trialtest.Failure.test_error", out) + self.failUnlessIn("FAILED", out) + d.addCallback(_check_failure) + + d.addCallback(lambda ign: self._run_cli_in_subprocess(['debug', 'trial', 'allmydata.test.trialtest.Success'])) + def _check_success( (out, err, rc) ): + self.failUnlessEqual(rc, 0) + self.failUnlessIn("[SKIPPED]: allmydata.test.trialtest.Success.test_skip", out) + self.failUnlessIn("[TODO]: allmydata.test.trialtest.Success.test_todo", out) + self.failUnlessIn("PASSED", out) + d.addCallback(_check_success) + return d + def _run_cli(self, argv, stdin=""): #print "CLI:", argv stdout, stderr = StringIO(), StringIO() hunk ./src/allmydata/test/test_system.py 1793 if env is None: env = os.environ - d = utils.getProcessOutputAndValue(sys.executable, args=[bintahoe] + argv, - env=env) + d = utils.getProcessOutputAndValue(bintahoe, argv, env=env) return d def _test_checker(self, res): addfile ./src/allmydata/test/trialtest.py hunk ./src/allmydata/test/trialtest.py 2 +# This is a dummy test suite that we can use to check that 'tahoe debug trial' +# is working properly. Since the module name does not start with 'test_', it +# will not be run by the main test suite. + +from twisted.trial import unittest +from twisted.internet import defer + + +class Success(unittest.TestCase): + def test_succeed(self): + pass + + def test_skip(self): + raise unittest.SkipTest('skip') + + def test_todo(self): + self.fail('umm') + test_todo.todo = 'never mind' + + +class Failure(unittest.TestCase): + def test_fail(self): + self.fail('fail') + + def test_error(self): + raise AssertionError('clang') + + def test_deferred_error(self): + return defer.fail(AssertionError('screech')) } Context: [docs: update performance.rst to describe the difference between already-uploaded and not-already-uploaded, to parameterize segment size, and to use "~A" to mean "approximately A" zooko@zooko.com**20110104065455 Ignore-this: 8df0d79a062ee19854c0211bd202f606 ] [bin/tahoe-script.template: On non-Windows, invoke support/bin/tahoe directly as a script (rather than via python), so that 'top' for example will show it as 'tahoe'. On Windows, simplify some code that set argv[0], which is never used. fixes #174 david-sarah@jacaranda.org**20101127232650 Ignore-this: 42a86f3eecfdc1ea7b76a7cc68626898 ] [test_runner: avoid unnecessary use of non-ASCII. david-sarah@jacaranda.org**20110101100101 Ignore-this: e2ff40dce6bb3b021306f2913d4e75df ] [docs/quickstart.html: fix redundant, badly nested tag. refs #1284 david-sarah@jacaranda.org**20110102175159 Ignore-this: 2ae9cc0b47d2e87b9eb64a0f517c4eef ] [docs/quickstart.html: information about 'troublesome dependencies' and 'verified systems' de-emphasized by smaller italic font. Re-wrap so that the HTML source is readable (just about) as text. Minor wording tweaks. Improve organization by adding 'Windows Caveats' subsection. fixes #1284 david-sarah@jacaranda.org**20110102174212 Ignore-this: e9dc57983974478200856651c5318fee ] [NEWS: update entry for removal of Mac and Windows apps. refs #1282 david-sarah@jacaranda.org**20101226042245 Ignore-this: c8099bc6e8235718d042c9a13c1e2425 ] [Move dependency imports from windows/depends.py (which has gone away) into src/allmydata/windows/tahoesvc.py. Also fix a pyflakes warning, and change the service display name from 'Allmydata Tahoe Node' to 'Tahoe-LAFS node'. refs #1282 david-sarah@jacaranda.org**20101226042100 Ignore-this: ee45f324934e1251380206dbee6346d0 ] [Remove unmaintained Windows GUI app, except for windows/tahoesvc.py which is moved to src/allmydata/windows. refs #1282 david-sarah@jacaranda.org**20101226040237 Ignore-this: cae37b6622a7dd5940acc7d3e6a98b90 ] [Remove the Makefile targets relating to the Mac GUI app. refs #1282 david-sarah@jacaranda.org**20101226025859 Ignore-this: 75303be783974b41138744ec62b07965 ] [NEWS: remove unmaintained Mac GUI app. refs #1282 david-sarah@jacaranda.org**20101226020858 Ignore-this: 40474a07f4a550b48563d35350be7ab5 ] [Remove unmaintained Mac GUI app. fixes #1282 david-sarah@jacaranda.org**20101226020508 Ignore-this: b3613bf1abfd284d542bf7c753ec557a ] [Remove src/allmydata/util/find_exe.py which is no longer used. fixes #1150 david-sarah@jacaranda.org**20101226023206 Ignore-this: 7436c9b53bf210aed34a1a973cd9cace ] [status_web_pages_review.darcs.patch freestorm77@gmail.com**20110102034214 Ignore-this: 29f1ecb36177f10f3f846b3d56b313b2 I make some changes on status web pages status.xhtml: - Delete unused webform_css link - Align tables on the left tahoe-css: - Do some minor changes on code synthax - changes table.status-download-events style to look like other tables status.py: - Align table on the left - Changes table header - Add heading tags - Modify google api graph: add image border, calculate height to feet data signed-off-by: zooko@zooko.com fixes #1219 ] [test_storage.py: fix a pyflakes unused import warning. david-sarah@jacaranda.org**20101231220756 Ignore-this: df08231540cb7dff9d2b038e47ab30ee ] [test_storage.py: leave at least 512 MiB free when running test_large_share. refs #1195 david-sarah@jacaranda.org**20101231203215 Ignore-this: b2144c0341c3452b5d4ba219e284ea0e ] [storage: use fileutil's version of get_disk_stats() and get_available_space(), use mockery/fakery in tests, enable large share test on platforms with sparse files and if > 4 GiB of disk space is currently available zooko@zooko.com**20100910173629 Ignore-this: 1304f1164c661de6d5304f993eb9b27b ] [fileutil: copy in the get_disk_stats() and get_available_space() functions from storage/server.py zooko@zooko.com**20100910173520 Ignore-this: 8b15569715f710f4fc5092f7ca109253 ] [Update foolscap version requirement to 0.6.0, to address http://foolscap.lothar.com/trac/ticket/167 david-sarah@jacaranda.org**20101231060039 Ignore-this: 98d2b8086a1a500b9f4565bca5a3810 ] [docs/webapi.rst: typos. david-sarah@jacaranda.org**20101230034422 Ignore-this: d1f5166d72cc711f7e0d9981eac9105e ] [docs/webapi.rst: capitalization, formatting of section on URL character encoding, and a correction about Internet Explorer. david-sarah@jacaranda.org**20101230034049 Ignore-this: b3b9819d2fb264b4cdc5c8afd4e8c48d ] [docs: corrections and clarifications. david-sarah@jacaranda.org**20101227051056 Ignore-this: e33202858c7644c58f3f924b164294b6 ] [docs: more formatting cleanups and corrections. Spell webapi and wapi as web-API. david-sarah@jacaranda.org**20101227050533 Ignore-this: 18b23cbfb780df585d8a722a1ec63e94 ] [docs/debian.rst: bring description of building dependencies from source up-to-date, and change hostname from allmydata.com to tahoe-lafs.org. david-sarah@jacaranda.org**20101212222912 Ignore-this: f38462afc88b4475195610385a28391c ] [docs/architecture.rst: correct rst syntax. david-sarah@jacaranda.org**20101212202003 Ignore-this: 3fbe12feb28bec6f1c63aedbc79aad21 ] [docs/architecture.rst: formatting. david-sarah@jacaranda.org**20101212201719 Ignore-this: 305fa5dfc2939355eaf6d0d2161eb1ff ] [docs: linkification, wording improvements. david-sarah@jacaranda.org**20101212201234 Ignore-this: 4e67287f527a8bc728cfbd93255d2aae ] [docs: formatting. david-sarah@jacaranda.org**20101212201115 Ignore-this: 2e0ed394ac7726651d3a4f2c4b0d3798 ] [docs/configuration.rst: more formatting tweaks; which -> that. david-sarah@jacaranda.org**20101212195522 Ignore-this: a7becb7021854ca5a90edd892b36fdd7 ] [docs/configuration.rst: more changes to formatting. david-sarah@jacaranda.org**20101212194511 Ignore-this: 491aac33e5f5268d224359f1447d10be ] [docs/configuration.rst: changes to formatting (mainly putting commands and filenames in monospace). david-sarah@jacaranda.org**20101212181828 Ignore-this: 8a1480e2d5f43bee678476424615b50f ] [scripts/backupdb.py: more accurate comment about path field. david-sarah@jacaranda.org**20101212170320 Ignore-this: 50e47a2228a85207bbcd188a78a0d4e6 ] [scripts/cli.py: fix missing 'put' in usage example for 'tahoe put'. david-sarah@jacaranda.org**20101212170207 Ignore-this: 2cbadf066fff611fc03d3c0ff97ce6ec ] [docs/frontends/CLI.rst: changes to formatting (mainly putting commands and filenames in monospace), and to command syntax to reflect that DIRCAP/... is accepted. Clarify the syntax of 'tahoe put' and other minor corrections. Tahoe -> Tahoe-LAFS. david-sarah@jacaranda.org**20101212165800 Ignore-this: a123ef6b564aa8624d1e79c97068ea12 ] [docs/frontends/CLI.rst: Unicode arguments to 'tahoe' work on Windows as of v1.7.1. david-sarah@jacaranda.org**20101212063740 Ignore-this: 3977a99dfa86ac33a44171deaf43aaab ] [docs/known_issues.rst: fix title and linkify another URL. refs #1225 david-sarah@jacaranda.org**20101212062817 Ignore-this: cc91287f7fb51c23440b3d2fe79c449c ] [docs/known_issues.rst: fix an external link. refs #1225 david-sarah@jacaranda.org**20101212062435 Ignore-this: b8cbf12f353131756c358965c48060ec ] [Fix a link from uri.rst to dirnodes.rst. refs #1225 david-sarah@jacaranda.org**20101212054502 Ignore-this: af6205299f5c9a33229cab259c00f9d5 ] [Fix a link from webapi.rst to FTP-and-SFTP.rst. refs #1225 david-sarah@jacaranda.org**20101212053435 Ignore-this: 2b9f88678c3447ea860d6b61e8799858 ] [More specific hyperlink to architecture.rst from helper.rst. refs #1225 david-sarah@jacaranda.org**20101212052607 Ignore-this: 50424c768fca481252fabf58424852dc ] [Update hyperlinks between docs, and linkify some external references. refs #1225 david-sarah@jacaranda.org**20101212051459 Ignore-this: cd43a4c3d3de1f832abfa88d5fc4ace1 ] [docs/specifications/dirnodes.rst: fix references to mutable.rst. refs #1225 david-sarah@jacaranda.org**20101212012720 Ignore-this: 6819b4b4e06e947ee48b365e840db37d ] [docs/specifications/mutable.rst: correct the magic string for v1 mutable containers. refs #1225 david-sarah@jacaranda.org**20101212011400 Ignore-this: 99a5fcdd40cef83dbb08f323f6cdaaca ] [Move .txt files in docs/frontends and docs/specifications to .rst. refs #1225 david-sarah@jacaranda.org**20101212010251 Ignore-this: 8796d35d928370f7dc6ad2dafdc1c0fe ] [Convert docs/frontends and docs/specifications to reStructuredText format (not including file moves). david-sarah@jacaranda.org**20101212004632 Ignore-this: e3ceb2d832d73875abe48624ddbb5622 ] [scripts/cli.py: remove the disclaimer in the help for 'tahoe cp' that it does not handle non-ASCII filenames well. (At least, we intend to handle them.) david-sarah@jacaranda.org**20101130002145 Ignore-this: 94c003efaa20b9eb4a83503d79844ca ] [relnotes.txt: fifth -> sixth labor-of-love release zooko@zooko.com**20101129045647 Ignore-this: 21c245015268b38916e3a138d256c09d ] [Makefile: BB_BRANCH is set to the empty string for trunk, not the string 'trunk'. david-sarah@jacaranda.org**20101128233512 Ignore-this: 5a7ef8eb10475636d21b91e25b56c369 ] [relnotes.txt: eleventh -> twelfth release. david-sarah@jacaranda.org**20101128223321 Ignore-this: 1e26410156a665271c1170803dea2c0d ] [relnotes.tst: point to known_issues.rst, not known_issues.txt. david-sarah@jacaranda.org**20101128222918 Ignore-this: 60194eb4544cac446fe4f60b3e34b887 ] [quickstart.html: fix link to point to allmydata-tahoe-1.8.1.zip. david-sarah@jacaranda.org**20101128221728 Ignore-this: 7b3ee86f8256aa12f5d862f689f3ee29 ] [TAG allmydata-tahoe-1.8.1 david-sarah@jacaranda.org**20101128212336 Ignore-this: 9c18bdeaef4822f590d2a0d879e00621 ] Patch bundle hash: e41bec333a7db4403389fac38c11c66ae2cf2209