1 patch for repository davidsarah@dev.allmydata.org:/home/darcs/tahoe/trunk: Thu Jan 20 04:32:38 GMT Standard Time 2011 david-sarah@jacaranda.org * Eliminate dependencies on pywin32, even via Twisted. refs #1274 New patches: [Eliminate dependencies on pywin32, even via Twisted. refs #1274 david-sarah@jacaranda.org**20110120043238 Ignore-this: 96a2c30ea71a897472d704e905d3cb13 ] { hunk ./src/allmydata/_auto_deps.py 62 # pysqlite v2.0.5 was shipped in Ubuntu 6.06 LTS "dapper" and Nexenta NCP 1. install_requires.append("pysqlite >= 2.0.5") -## The following block is commented-out because there is not currently a pywin32 package which -## can be easy_install'ed and also which actually makes "import win32api" succeed. -## See http://sourceforge.net/tracker/index.php?func=detail&aid=1799934&group_id=78018&atid=551954 -## Users have to manually install pywin32 on Windows before installing Tahoe. -##import platform -##if platform.system() == "Windows": -## # Twisted requires pywin32 if it is going to offer process management functionality, or if -## # it is going to offer iocp reactor. We currently require process management. It would be -## # better if Twisted would declare that it requires pywin32 if it is going to offer process -## # management. That is twisted ticket #3238 -- http://twistedmatrix.com/trac/ticket/3238 . -## install_requires.append('pywin32') - if hasattr(sys, 'frozen'): # for py2exe install_requires=[] del sys # clean up namespace hunk ./src/allmydata/test/test_runner.py 5 from twisted.trial import unittest from twisted.python import usage, runtime -from twisted.internet import utils +from twisted.internet import threads + import os.path, re, sys, subprocess from cStringIO import StringIO from allmydata.util import fileutil, pollmixin hunk ./src/allmydata/test/test_runner.py 43 bintahoe = alt_bintahoe -class SkipMixin: +class RunBinTahoeMixin: def skip_if_cannot_run_bintahoe(self): hunk ./src/allmydata/test/test_runner.py 45 - if "cygwin" in sys.platform.lower(): - raise unittest.SkipTest("We don't know how to make this test work on cygwin: spawnProcess seems to hang forever. We don't know if 'bin/tahoe start' can be run on cygwin.") if not os.path.exists(bintahoe): raise unittest.SkipTest("The bin/tahoe script isn't to be found in the expected location (%s), and I don't want to test a 'tahoe' executable that I find somewhere else, in case it isn't the right executable for this version of Tahoe. Perhaps running 'setup.py build' again will help." % (bintahoe,)) hunk ./src/allmydata/test/test_runner.py 54 # twistd on windows doesn't daemonize. cygwin should work normally. raise unittest.SkipTest("twistd does not fork under windows") + def run_bintahoe(self, args, stdin=None, python_options=[], env=None): + self.skip_if_cannot_run_bintahoe() + command = [sys.executable] + python_options + [bintahoe] + args + if stdin is None: + stdin_stream = None + else: + stdin_stream = subprocess.PIPE + + def _run(): + p = subprocess.Popen(command, stdin=stdin_stream, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + (out, err) = p.communicate(stdin) + return (out, err, p.returncode) + return threads.deferToThread(_run) + hunk ./src/allmydata/test/test_runner.py 69 -class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin): +class BinTahoe(common_util.SignalMixin, unittest.TestCase, RunBinTahoeMixin): 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(".")) hunk ./src/allmydata/test/test_runner.py 107 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; print allmydata.__file__") - - self.failUnlessEqual(p.returncode, 0) - lines = out.splitlines() - self.failUnlessIn('>>>', lines[0], (out, err)) - self._check_right_code(lines[1]) + d = self.run_bintahoe(["debug", "repl"], + stdin="import allmydata; print; print allmydata.__file__") + def _cb(res): + out, err, rc_or_sig = res + self.failUnlessEqual(rc_or_sig, 0, str(res)) + lines = out.splitlines() + self.failUnlessIn('>>>', lines[0], str(res)) + self._check_right_code(lines[1]) + d.addCallback(_cb) + return d def test_path(self): hunk ./src/allmydata/test/test_runner.py 119 - self.skip_if_cannot_run_bintahoe() - d = utils.getProcessOutputAndValue(bintahoe, args=["--version-and-path"], env=os.environ) + d = self.run_bintahoe(["--version-and-path"]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0, str(res)) hunk ./src/allmydata/test/test_runner.py 166 except UnicodeEncodeError: raise unittest.SkipTest("A non-ASCII argument/output could not be encoded on this platform.") - d = utils.getProcessOutputAndValue(bintahoe, args=[tricky_arg], env=os.environ) + d = self.run_bintahoe([tricky_arg]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 1, str(res)) hunk ./src/allmydata/test/test_runner.py 178 self.skip_if_cannot_run_bintahoe() # -t is a harmless option that warns about tabs. - d = utils.getProcessOutputAndValue(sys.executable, args=['-t', bintahoe, '--version'], - env=os.environ) + d = self.run_bintahoe(["--version"], python_options=["-t"]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0, str(res)) hunk ./src/allmydata/test/test_runner.py 194 except pkg_resources.VersionConflict: raise unittest.SkipTest("We pass this test only with Twisted >= v9.0.0") - d = utils.getProcessOutputAndValue(bintahoe, args=["--version"], env=os.environ) + d = self.run_bintahoe(["--version"]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0, str(res)) hunk ./src/allmydata/test/test_runner.py 321 class RunNode(common_util.SignalMixin, unittest.TestCase, pollmixin.PollMixin, - SkipMixin): + RunBinTahoeMixin): # exercise "tahoe start", for both introducer, client node, and # key-generator, by spawning "tahoe start" as a subprocess. This doesn't # get us figleaf-based line-level coverage, but it does a better job of hunk ./src/allmydata/test/test_runner.py 347 TWISTD_PID_FILE = os.path.join(c1, "twistd.pid") INTRODUCER_FURL_FILE = os.path.join(c1, "introducer.furl") - d = utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "create-introducer", "--basedir", c1], env=os.environ) + d = self.run_bintahoe(["--quiet", "create-introducer", "--basedir", c1]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0) hunk ./src/allmydata/test/test_runner.py 359 d.addCallback(_cb) def _then_start_the_node(res): - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "start", c1]) d.addCallback(_then_start_the_node) def _cb2(res): hunk ./src/allmydata/test/test_runner.py 390 self.failUnless(os.path.exists(TWISTD_PID_FILE)) # rm this so we can detect when the second incarnation is ready os.unlink(INTRODUCER_FURL_FILE) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "restart", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "restart", c1]) d.addCallback(_started) def _then(res): hunk ./src/allmydata/test/test_runner.py 413 open(HOTLINE_FILE, "w").write("") self.failUnless(os.path.exists(TWISTD_PID_FILE)) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "stop", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "stop", c1]) d.addCallback(_stop) def _after_stopping(res): hunk ./src/allmydata/test/test_runner.py 450 TWISTD_PID_FILE = os.path.join(c1, "twistd.pid") PORTNUMFILE = os.path.join(c1, "client.port") - d = utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "create-client", "--basedir", c1, "--webport", "0"], env=os.environ) + d = self.run_bintahoe(["--quiet", "create-client", "--basedir", c1, "--webport", "0"]) def _cb(res): out, err, rc_or_sig = res errstr = "cc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err) hunk ./src/allmydata/test/test_runner.py 465 d.addCallback(_cb) def _start(res): - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "start", c1]) d.addCallback(_start) def _cb2(res): hunk ./src/allmydata/test/test_runner.py 499 # 'tahoe stop' command takes a while. def _stop(res): self.failUnless(os.path.exists(TWISTD_PID_FILE), (TWISTD_PID_FILE, os.listdir(os.path.dirname(TWISTD_PID_FILE)))) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "stop", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "stop", c1]) d.addCallback(_stop) return d hunk ./src/allmydata/test/test_runner.py 511 TWISTD_PID_FILE = os.path.join(c1, "twistd.pid") PORTNUMFILE = os.path.join(c1, "client.port") - d = utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "create-node", "--basedir", c1, "--webport", "0"], env=os.environ) + d = self.run_bintahoe(["--quiet", "create-node", "--basedir", c1, "--webport", "0"]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0) hunk ./src/allmydata/test/test_runner.py 524 d.addCallback(_cb) def _start(res): - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "start", c1]) d.addCallback(_start) def _cb2(res): hunk ./src/allmydata/test/test_runner.py 555 # rm this so we can detect when the second incarnation is ready os.unlink(PORTNUMFILE) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "restart", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "restart", c1]) d.addCallback(_started) def _cb3(res): hunk ./src/allmydata/test/test_runner.py 578 def _stop(res): open(HOTLINE_FILE, "w").write("") self.failUnless(os.path.exists(TWISTD_PID_FILE), (TWISTD_PID_FILE, os.listdir(os.path.dirname(TWISTD_PID_FILE)))) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "stop", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "stop", c1]) d.addCallback(_stop) def _cb4(res): hunk ./src/allmydata/test/test_runner.py 606 basedir = self.workdir("test_baddir") fileutil.make_dirs(basedir) - d = utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", "--basedir", basedir], env=os.environ) + d = self.run_bintahoe(["--quiet", "start", "--basedir", basedir]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 1) hunk ./src/allmydata/test/test_runner.py 614 d.addCallback(_cb) def _then_stop_it(res): - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "stop", "--basedir", basedir], env=os.environ) + return self.run_bintahoe(["--quiet", "stop", "--basedir", basedir]) d.addCallback(_then_stop_it) def _cb2(res): hunk ./src/allmydata/test/test_runner.py 625 def _then_start_in_bogus_basedir(res): not_a_dir = os.path.join(basedir, "bogus") - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", "--basedir", not_a_dir], env=os.environ) + return self.run_bintahoe(["--quiet", "start", "--basedir", not_a_dir]) d.addCallback(_then_start_in_bogus_basedir) def _cb3(res): hunk ./src/allmydata/test/test_runner.py 642 TWISTD_PID_FILE = os.path.join(c1, "twistd.pid") KEYGEN_FURL_FILE = os.path.join(c1, "key_generator.furl") - d = utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "create-key-generator", "--basedir", c1], env=os.environ) + d = self.run_bintahoe(["--quiet", "create-key-generator", "--basedir", c1]) def _cb(res): out, err, rc_or_sig = res self.failUnlessEqual(rc_or_sig, 0) hunk ./src/allmydata/test/test_runner.py 649 d.addCallback(_cb) def _start(res): - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "start", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "start", c1]) d.addCallback(_start) def _cb2(res): hunk ./src/allmydata/test/test_runner.py 677 self.failUnless(os.path.exists(TWISTD_PID_FILE)) # rm this so we can detect when the second incarnation is ready os.unlink(KEYGEN_FURL_FILE) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "restart", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "restart", c1]) d.addCallback(_started) def _cb3(res): hunk ./src/allmydata/test/test_runner.py 697 # 'tahoe stop' command takes a while. def _stop(res): self.failUnless(os.path.exists(TWISTD_PID_FILE)) - return utils.getProcessOutputAndValue(bintahoe, args=["--quiet", "stop", c1], env=os.environ) + return self.run_bintahoe(["--quiet", "stop", c1]) d.addCallback(_stop) def _cb4(res): hunk ./src/allmydata/test/test_system.py 7 from twisted.trial import unittest from twisted.internet import defer from twisted.internet import threads # CLI tests use deferToThread -from twisted.internet import utils import allmydata from allmydata import uri hunk ./src/allmydata/test/test_system.py 34 from allmydata.test.common import SystemTestMixin # TODO: move these to common or common_util -from allmydata.test.test_runner import bintahoe, SkipMixin +from allmydata.test.test_runner import RunBinTahoeMixin LARGE_DATA = """ This is some data to publish to the remote grid.., which needs to be large hunk ./src/allmydata/test/test_system.py 54 self.interrupt_after_d.callback(self) return upload.Data.read(self, length) -class SystemTest(SystemTestMixin, SkipMixin, unittest.TestCase): +class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): timeout = 3600 # It takes longer than 960 seconds on Zandr's ARM box. def test_connections(self): hunk ./src/allmydata/test/test_system.py 1596 d.addCallback(_check_ls_rouri) - d.addCallback(run, "mv", "tahoe-file-stdin", "tahoe-moved-first-time") + d.addCallback(run, "mv", "tahoe-file-stdin", "tahoe-moved") d.addCallback(run, "ls") hunk ./src/allmydata/test/test_system.py 1598 - d.addCallback(_check_ls, ["tahoe-moved-first-time"], ["tahoe-file-stdin"]) - - def _mv_with_http_proxy(ign): - env = os.environ - env['http_proxy'] = env['HTTP_PROXY'] = "http://127.0.0.0:12345" # invalid address - return self._run_cli_in_subprocess(["mv"] + nodeargs + ["tahoe-moved-first-time", "tahoe-moved"], env=env) - d.addCallback(_mv_with_http_proxy) - - def _check_mv_with_http_proxy(res): - out, err, rc_or_sig = res - self.failUnlessEqual(rc_or_sig, 0, str(res)) - d.addCallback(_check_mv_with_http_proxy) - - d.addCallback(run, "ls") - d.addCallback(_check_ls, ["tahoe-moved"], ["tahoe-moved-firsttime"]) + d.addCallback(_check_ls, ["tahoe-moved"], ["tahoe-file-stdin"]) d.addCallback(run, "ln", "tahoe-moved", "newlink") d.addCallback(run, "ls") hunk ./src/allmydata/test/test_system.py 1741 return d + def test_filesystem_with_cli_in_subprocess(self): + # We do this in a separate test so that test_filesystem doesn't skip if we can't run bin/tahoe. + + self.basedir = "system/SystemTest/test_filesystem_with_cli_in_subprocess" + d = self.set_up_nodes() + def _new_happy_semantics(ign): + for c in self.clients: + c.DEFAULT_ENCODING_PARAMETERS['happy'] = 1 + d.addCallback(_new_happy_semantics) + + def _run_in_subprocess(ignored, verb, *args, **kwargs): + stdin = kwargs.get("stdin") + env = kwargs.get("env") + newargs = [verb, "--node-directory", self.getdir("client0")] + list(args) + return self.run_bintahoe(newargs, stdin=stdin, env=env) + + def _check_succeeded(res, check_stderr=True): + out, err, rc_or_sig = res + self.failUnlessEqual(rc_or_sig, 0, str(res)) + if check_stderr: + self.failUnlessEqual(err, "") + + d.addCallback(_run_in_subprocess, "create-alias", "newalias") + d.addCallback(_check_succeeded) + + STDIN_DATA = "This is the file to upload from stdin." + d.addCallback(_run_in_subprocess, "put", "-", "newalias:tahoe-file", stdin=STDIN_DATA) + d.addCallback(_check_succeeded, check_stderr=False) + + def _mv_with_http_proxy(ign): + env = os.environ + env['http_proxy'] = env['HTTP_PROXY'] = "http://127.0.0.0:12345" # invalid address + return _run_in_subprocess(None, "mv", "newalias:tahoe-file", "newalias:tahoe-moved", env=env) + d.addCallback(_mv_with_http_proxy) + d.addCallback(_check_succeeded) + + d.addCallback(_run_in_subprocess, "ls", "newalias:") + def _check_ls(res): + out, err, rc_or_sig = res + self.failUnlessEqual(rc_or_sig, 0, str(res)) + self.failUnlessEqual(err, "", str(res)) + self.failUnlessIn("tahoe-moved", out) + self.failIfIn("tahoe-file", out) + d.addCallback(_check_ls) + return d + def test_debug_trial(self): def _check_for_line(lines, result, test): for l in lines: hunk ./src/allmydata/test/test_system.py 1799 self.failUnlessIn(outcome, out, "output (prefixed with '##') does not contain %r:\n## %s" % (outcome, "\n## ".join(lines))) - d = self._run_cli_in_subprocess(['debug', 'trial', '--reporter=verbose', - 'allmydata.test.trialtest']) + d = self.run_bintahoe(['debug', 'trial', '--reporter=verbose', + 'allmydata.test.trialtest']) def _check_failure( (out, err, rc) ): self.failUnlessEqual(rc, 1) lines = out.split('\n') hunk ./src/allmydata/test/test_system.py 1813 d.addCallback(_check_failure) # the --quiet argument regression-tests a problem in finding which arguments to pass to trial - d.addCallback(lambda ign: self._run_cli_in_subprocess(['--quiet', 'debug', 'trial', '--reporter=verbose', - 'allmydata.test.trialtest.Success'])) + d.addCallback(lambda ign: self.run_bintahoe(['--quiet', 'debug', 'trial', '--reporter=verbose', + 'allmydata.test.trialtest.Success'])) def _check_success( (out, err, rc) ): self.failUnlessEqual(rc, 0) lines = out.split('\n') hunk ./src/allmydata/test/test_system.py 1835 d.addCallback(_done) return d - def _run_cli_in_subprocess(self, argv, env=None): - self.skip_if_cannot_run_bintahoe() - - if env is None: - env = os.environ - d = utils.getProcessOutputAndValue(sys.executable, args=[bintahoe] + argv, - env=env) - return d - def _test_checker(self, res): ut = upload.Data("too big to be literal" * 200, convergence=None) d = self._personal_node.add_file(u"big file", ut) hunk ./src/allmydata/util/iputil.py 2 # from the Python Standard Library -import os, re, socket, sys +import os, re, socket, sys, subprocess # from Twisted hunk ./src/allmydata/util/iputil.py 5 -from twisted.internet import defer -from twisted.internet import reactor +from twisted.internet import defer, threads, reactor from twisted.internet.protocol import DatagramProtocol hunk ./src/allmydata/util/iputil.py 7 -from twisted.internet.utils import getProcessOutput from twisted.python.procutils import which from twisted.python import log hunk ./src/allmydata/util/iputil.py 10 -from allmydata.util import observer - try: import resource def increase_rlimits(): hunk ./src/allmydata/util/iputil.py 192 # Solaris 2.x _sunos_path = '/usr/sbin/ifconfig' -class SequentialTrier(object): - """ I hold a list of executables to try and try each one in turn - until one gives me a list of IP addresses.""" - - def __init__(self, exebasename, args, regex): - assert not os.path.isabs(exebasename) - self.exes_left_to_try = which(exebasename) - self.exes_left_to_try.reverse() - self.args = args - self.regex = regex - self.o = observer.OneShotObserverList() - self._try_next() - - def _try_next(self): - if not self.exes_left_to_try: - self.o.fire(None) - else: - exe = self.exes_left_to_try.pop() - d2 = _query(exe, self.args, self.regex) - - def cb(res): - if res: - self.o.fire(res) - else: - self._try_next() - - def eb(why): - self._try_next() - - d2.addCallbacks(cb, eb) - - def when_tried(self): - return self.o.when_fired() # k: platform string as provided in the value of _platform_map # v: tuple of (path_to_tool, args, regex,) hunk ./src/allmydata/util/iputil.py 203 "irix": (_irix_path, _netbsd_args, _netbsd_re,), "sunos": (_sunos_path, _netbsd_args, _netbsd_re,), } + def _find_addresses_via_config(): hunk ./src/allmydata/util/iputil.py 205 + return threads.deferToThread(_synchronously_find_addresses_via_config) + +def _synchronously_find_addresses_via_config(): # originally by Greg Smith, hacked by Zooko to conform to Brian's API platform = _platform_map.get(sys.platform) hunk ./src/allmydata/util/iputil.py 224 if os.path.isabs(pathtotool): return _query(pathtotool, args, regex) else: - return SequentialTrier(pathtotool, args, regex).when_tried() + exes_to_try = which(pathtotool) + for exe in exes_to_try: + try: + addresses = _query(exe, args, regex) + except Exception: + addresses = [] + if addresses: + return addresses + return [] def _query(path, args, regex): hunk ./src/allmydata/util/iputil.py 235 - d = getProcessOutput(path, args) - def _parse(output): - addresses = [] - outputsplit = output.split('\n') - for outline in outputsplit: - m = regex.match(outline) - if m: - addr = m.groupdict()['address'] - if addr not in addresses: - addresses.append(addr) + p = subprocess.Popen([path] + list(args), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (output, err) = p.communicate() hunk ./src/allmydata/util/iputil.py 238 - return addresses - d.addCallback(_parse) - return d + addresses = [] + outputsplit = output.split('\n') + for outline in outputsplit: + m = regex.match(outline) + if m: + addr = m.groupdict()['address'] + if addr not in addresses: + addresses.append(addr) + + return addresses def _cygwin_hack_find_addresses(target): addresses = [] } Context: [Makefile: consistently use TAHOE macro to run bin/tahoe. Use '$(TAHOE) debug repl' instead of $(RUNPP) -p. refs #1296 david-sarah@jacaranda.org**20110119234429 Ignore-this: 1c339126c6cdb6cd7d60a95a2f0db0a2 ] [Makefile: consistently use 'tahoe debug trial' to run tests. refs #1296 david-sarah@jacaranda.org**20110119233737 Ignore-this: 4b6b5a13fcf767c23e5f983f92f2c053 ] [setup.py: add descriptions for some of the setup commands. ref #1306 david-sarah@jacaranda.org**20110119233305 Ignore-this: 8759eb5c3ee4b717bba5580622d76c6b ] [setup.py: create bin/tahoe.pyscript on Unix as well as Windows for consistency, and to reduce conditional code. ref #1306 david-sarah@jacaranda.org**20110119233145 Ignore-this: d1a7e66b3a2244fb4523ab3ef4057e5f ] [src/allmydata/test/test_runner.py: add test_import_from_repl, which checks that we are running the right code in a bin/tahoe subprocess. refs #1258 david-sarah@jacaranda.org**20110119082145 Ignore-this: c53a76827b47446df9e7b0128a2cb2c5 ] [docs/frontends/CLI.rst, src/allmydata/test/trialtest.py: add trailing newlines. refs #1296 david-sarah@jacaranda.org**20110119081955 Ignore-this: 1d19fad753ff17febf9b99bb2f5b7df7 ] [Eliminate direct dependencies of Tahoe-LAFS on pywin32 (rebased to trunk). refs #1274 david-sarah@jacaranda.org**20110119075911 Ignore-this: 8f31d1188daa382ec694908a68a19194 ] [trivial: add comment in scripts/debug.py about trial option parsing. refs #1296 david-sarah@jacaranda.org**20110119060808 Ignore-this: 3cda9b574d1fbc1cac683ed31c826051 ] [Update foolscap requirement to >= 0.6.1. fixes #1329 david-sarah@jacaranda.org**20110119060639 Ignore-this: 47908e13d1c79e74b9ebb9df934b3cf1 ] [Add support to bin/tahoe for invoking a runner command prefixed with @, with the Tahoe libraries on the PYTHONPATH. This is documented in 'tahoe debug --help'. david-sarah@jacaranda.org**20110119051137 Ignore-this: 65fd13a23670aea3825a706f45a7019f ] [bin/tahoe-script.template, src/windows/fixups.py: simplify the method of stripping initial arguments in sys.argv on Windows. This helps with bb-freeze and running tahoe via 'coverage'. Also includes some wording changes and minor refactoring of bin/tahoe-script.template. refs #585, #1303 david-sarah@jacaranda.org**20110119045324 Ignore-this: 756e83c5eae7dabac31290b98a0e5a99 ] [Change misc/build_helpers/test-with-fake-pkg to use 'setup.py trial'. refs #1296 david-sarah@jacaranda.org**20110119042401 Ignore-this: e1518b6f43becf47d5a956bb710a9dcb ] [Makefile: update 'make clean' to delete the setuptools_trial egg(s). david-sarah@jacaranda.org**20110119025053 Ignore-this: ec373228f3a169c7070633e3b89ec1d ] [Change 'setup.py trial' and 'setup.py test' to use 'bin/tahoe debug trial'. refs #1296 david-sarah@jacaranda.org**20110119024532 Ignore-this: 43df1a50435c794cfa60ecca71a46b10 ] [src/allmydata/test/test_cli.py: add test for 'tahoe debug trial' options help. refs #1296 david-sarah@jacaranda.org**20110119024224 Ignore-this: e9f7a67724b60c11a34efbce9a83a5cb ] [Makefile: update 'make clean' to avoid deleting the setuptools_darcs egg. david-sarah@jacaranda.org**20110119021958 Ignore-this: 908673ddd30ab88db5af8c8d80a74eb1 ] [Add src/allmydata/test/trialtest.py needed by tests for 'tahoe debug trial'. refs #1296 david-sarah@jacaranda.org**20110119020239 Ignore-this: 58d468dbd869c2e6c85552710ed47ffe ] [Tests for 'tahoe debug trial' (rebased and fixed to work with Twisted 10.2). refs #1296 david-sarah@jacaranda.org**20110119013859 Ignore-this: bb2ea70e5c3c841713ae38744b80980f ] [Documentation for 'tahoe debug trial' (rebased for trunk). refs #1296 david-sarah@jacaranda.org**20110118205729 Ignore-this: 3a4a4c2d23864851cb24c32a5b7962b4 ] [Make 'mock' a run-time rather than setup-time dependency. This is necessary in order for 'tahoe debug trial' to work. refs #1296 david-sarah@jacaranda.org**20110118205114 Ignore-this: 256c4fcd259eda02dd86ed163afc6497 ] [src/allmydata/scripts/debug.py: add 'tahoe debug trial' command (rebased for trunk). refs #1296 david-sarah@jacaranda.org**20110118204659 Ignore-this: 19e5f96d15c14625d5969ca4ae10a3cc ] [Remove setuptools_trial egg. david-sarah@jacaranda.org**20110110063306 Ignore-this: 329f5062db0c7914464c547a3957c596 ] [src/allmydata/webish.py: clean-ups and correction to a comment. Also change an open and write to use fileutil.write. See ref #1286 comment 13. david-sarah@jacaranda.org**20110117233152 Ignore-this: c4aa2f4286ad8a9fba9827d428f7fbe5 ] [setup: load the setuptools_darcs-1.2.12.egg that is bundled in the root of the source tree at setup.py time, and setup_require it. This is in order to make sure that its 'find all package data' plugin works to inform setuptools of all files which are under revision control, so that setuptools can include them in a distribution. By the way, this is ugly and horrible. refs #1054 david-sarah@jacaranda.org**20110118065445 Ignore-this: b4b9d3798a9beb9c44943daf2722a51 ] [setup: bundle a copy of setuptools_darcs-1.2.12 zooko@zooko.com**20110118062521 Ignore-this: 47e240417e0ff57a66d2f02f416a78fe This is to work-around https://bitbucket.org/tarek/distribute/issue/55/revision-control-plugin-automatically-installed-as-a-build-dependency-is-not-present-when-another-build-dependency-is-being . refs #1054. ] [NEWS: default reserved_space for new storage nodes is 1 GiB. refs #1208 david-sarah@jacaranda.org**20110117235930 Ignore-this: 81c898890f51400b7229b4b6de69eb30 ] ['tahoe debug catalog-shares': sort SIs and shnums Brian Warner **20110117095932 Ignore-this: f2c60da422178dfba6d03ff4957cf80c Without this, SIs or shnums could be emitted in random order, depending upon what the filesystem happens to return. ] [CLI: tests for ref #1305 (v2, remove spurious extra arg to create-alias in test) david-sarah@jacaranda.org**20110114040327 Ignore-this: 770b7117e66b04ced293b7b740b4a27f ] [CLI: make 'tahoe create-alias' and 'tahoe add-alias' accept a trailing colon on the new alias name (v2, minor change not to rely on implicit Unicode conversion). Includes doc changes and news; tests in a separate patch. fixes #1305 david-sarah@jacaranda.org**20110114034414 Ignore-this: 97e8e88d8b0f7c628b77db3adb67fa1b ] [Improve 'tahoe ln' help text. Patch by David-Sarah. Closes #1230. Brian Warner **20110117081421 Ignore-this: ae0ab1525fd39c95500535d6d015e706 ] [Tolerate Twisted-10.2's endpoints, patch by David-Sarah. Closes #1286. Brian Warner **20110117074751 Ignore-this: 8875749e4cab0e444a8452e290647bb6 The service generated by strports.service() changed in 10.2, and the ugly private-attribute-reading hack we used to glean a kernel-allocated port number (e.g. when using "tcp:0", especially during unit tests) broke, causing Tahoe to be completely unusable with Twisted-10.2 . The new ugly private-attribute-reading hack starts by figuring out what sort of service was generated, then reads different attributes accordingly. This also hushes a warning when using schemeless strports strings like "0" or "3456", by quietly prepending a "tcp:" scheme, since 10.2 complains about those. It also adds getURL() and getPortnum() accessors to the "webish" service, rather than having unit tests dig through _url and _portnum and such to find out what they are. ] [debian/control: add python-twisted-conch to dependencies. Closes #1095. Brian Warner **20110117071206 Ignore-this: 74714eeb8bd324d6124824f119468ab5 ] [Test changes to take account of ref #1311. david-sarah@jacaranda.org**20110117060540 Ignore-this: d787405b00a05d98abb34e5133a88b36 ] [create_node.py: add comments to default tahoe.cfg to clarify the meaning of each section. fixes #1311 david-sarah@jacaranda.org**20110117052419 Ignore-this: a2b0bba6b347bb0b0247782ee9ea9419 ] [Undo the temporary hack to check the foolscap version. refs #1246 david-sarah@jacaranda.org**20110117052042 Ignore-this: c58a8a5b91355a15d02b60c20a44bbd9 ] [misc/build_helpers/run_trial.py: fix pyflakes warning. david-sarah@jacaranda.org**20110115080456 Ignore-this: 95760a442fc397526a5d921510ec3843 ] [Set "reserved_space=1G" in newly-created storage nodes. Closes #1208. Brian Warner **20110116205822 Ignore-this: 2aac3dbb46e181ce7ae5e0af07bbb3bb ] [Temporary hack to investigate whether we are getting the right version of foolscap on trunk. refs #1258 david-sarah@jacaranda.org**20110116044959 Ignore-this: 4760970f9235dde07472ca980c24f75b ] [Makefile: allow tarball upload when either BB_BRANCH=='trunk' or BB_BRANCH==''. david-sarah@jacaranda.org**20110115212211 Ignore-this: 358822b25e69bfe9651a561ec387ca7a ] [misc/build_helpers/test-with-fake-dists.py: clean up directories and files only if they exist. david-sarah@jacaranda.org**20110115053011 Ignore-this: 7aa8fec370e12c62d9b56afcd55d17f ] [misc/build_helpers/test-with-fake-dists.py: wrong arguments in comment. david-sarah@jacaranda.org**20110115045325 Ignore-this: 89322306ed4fb478af4988675fd4c968 ] [Attempt to fix test-with-fake-dist build step. david-sarah@jacaranda.org**20110115022651 Ignore-this: 9d7195dca59b79f93a5f527b1ae9e79e ] [bin/tahoe-script.template: improve the error message if we end up running under Python 3. refs #1302 david-sarah@jacaranda.org**20110112211628 Ignore-this: ee78f8e4bbd197e620cb0cc6b995ac46 ] [Makefile: Fix uploading of tarballs on trunk builds. david-sarah@jacaranda.org**20110109065851 Ignore-this: 864b06e39103f46dbb6ccb74e1e333d3 ] [docs/frontends/CLI.rst: fix the rst syntax to be as actually intended :-) david-sarah@jacaranda.org**20110109014057 Ignore-this: c11331670ba89d8601ba3782ffc4f32c ] [docs/frontends/CLI.rst: really fix rst syntax error this time. david-sarah@jacaranda.org**20110109013914 Ignore-this: 59550154c9ab41488ddfdee8938d7bda ] [docs/frontends/CLI.rst: fix rst syntax error. david-sarah@jacaranda.org**20110109010943 Ignore-this: 427444f5572115059c75fa1bd8371d51 ] [docs/frontends/CLI.rst: discuss commandline/output quoting issues and wildcards. refs #1135 david-sarah@jacaranda.org**20110109010119 Ignore-this: 533938d89be878b404a8540aebdf68ad ] [setup.py: add Python 2.7 trove classifier. david-sarah@jacaranda.org**20110108211212 Ignore-this: b479c0a1adf9b7a2d1fdc54abc6582e6 ] [docs/FTP-and-SFTP.rst: document issue in ref #1297. Remove known issue #1045 which is fixed. Also some cosmetic changes. david-sarah@jacaranda.org**20110108061038 Ignore-this: 8d9aa2e33f1054545f7bed47bf0e647d ] [misc/build_helpers/show-tool-versions.py: remove attempts to show stdout.encoding and stderr.encoding that always printed None due to redirection. Also remove code to show os.path.supports_unicode_filenames which is not useful. refs #1251 david-sarah@jacaranda.org**20110103015144 Ignore-this: 45e11431f7e2e0cebcb58e1841485cf8 ] [NEWS: 'top' for node processes, WUI formatting, removal of GUI apps, documentation updates, foolscap dependency. refs #174, #1219, #1225 david-sarah@jacaranda.org**20110106005727 Ignore-this: f61ac58b4d10e635feb6f7391b1b48fe ] [Makefile: update 'clean' target for files in bin/ david-sarah@jacaranda.org**20110103052738 Ignore-this: 2bdbc4a50e13e508b66d0f65718c79b2 ] [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: 10206aa0b104f3931072b6f756434264672eb94a