default_nodedir = _default_nodedir
optParameters = [
- ["basedir", "C", None, "Same as --node-directory (default %s)."
+ ["basedir", "C", None, "Specify which Tahoe base directory should be used. [default: %s]"
% get_default_nodedir()],
]
if not self['basedir']:
raise usage.UsageError("A base directory for the node must be provided.")
+class NoDefaultBasedirOptions(BasedirOptions):
+ default_nodedir = None
+
+ optParameters = [
+ ["basedir", "C", None, "Specify which Tahoe base directory should be used."],
+ ]
+
+ # This is overridden in order to ensure we get a "Wrong number of arguments."
+ # error when more than one argument is given.
+ def parseArgs(self, basedir=None):
+ BasedirOptions.parseArgs(self, basedir)
+
+ def getSynopsis(self):
+ return "Usage: %s [global-opts] %s [options] NODEDIR" % (self.command_name, self.subcommand_name)
+
DEFAULT_ALIAS = u"tahoe"
import os, sys
-from allmydata.scripts.common import BasedirOptions
+from allmydata.scripts.common import BasedirOptions, NoDefaultBasedirOptions
from allmydata.util.assertutil import precondition
from allmydata.util.encodingutil import listdir_unicode, argv_to_unicode, quote_output
import allmydata
def getSynopsis(self):
return "Usage: %s [global-opts] create-client [options] [NODEDIR]" % (self.command_name,)
+ # This is overridden in order to ensure we get a "Wrong number of arguments."
+ # error when more than one argument is given.
+ def parseArgs(self, basedir=None):
+ BasedirOptions.parseArgs(self, basedir)
+
class CreateNodeOptions(CreateClientOptions):
optFlags = [
return "Usage: %s [global-opts] create-node [options] [NODEDIR]" % (self.command_name,)
-class CreateIntroducerOptions(BasedirOptions):
- default_nodedir = None
-
- def getSynopsis(self):
- return "Usage: %s [global-opts] create-introducer [options] NODEDIR" % (self.command_name,)
+class CreateIntroducerOptions(NoDefaultBasedirOptions):
+ subcommand_name = "create-introducer"
client_tac = """
import os, sys
-from allmydata.scripts.common import BasedirOptions
+from allmydata.scripts.common import NoDefaultBasedirOptions
from allmydata.util.assertutil import precondition
from allmydata.util.encodingutil import listdir_unicode, quote_output
-class CreateKeyGeneratorOptions(BasedirOptions):
- default_nodedir = None
- def getSynopsis(self):
- return "Usage: %s [global-opts] create-key-generator [options] NODEDIR" % (self.command_name,)
+class CreateKeyGeneratorOptions(NoDefaultBasedirOptions):
+ subcommand_name = "create-key-generator"
keygen_tac = """
from allmydata.util.encodingutil import listdir_unicode, quote_output
-def format_twisted_options(config):
- return "twistd %s\n" % (str(config).partition("\n")[2].partition("\n\n")[0],)
-
class StartOptions(BasedirOptions):
subcommand_name = "start"
def parseArgs(self, basedir=None, *twistd_args):
- # this can't handle e.g. 'tahoe start --nodaemon', since then
- # --nodaemon looks like a basedir. So you can either use 'tahoe
- # start' or 'tahoe start BASEDIR --TWISTD-OPTIONS'.
+ # This can't handle e.g. 'tahoe start --nodaemon', since '--nodaemon'
+ # looks like an option to the tahoe subcommand, not to twistd.
+ # So you can either use 'tahoe start' or 'tahoe start NODEDIR --TWISTD-OPTIONS'.
+ # Note that 'tahoe --node-directory=NODEDIR start --TWISTD-OPTIONS' also
+ # isn't allowed, unfortunately.
+
BasedirOptions.parseArgs(self, basedir)
self.twistd_args = twistd_args
def getSynopsis(self):
- return "Usage: %s [global-opts] %s [options] [NODEDIR] [twistd_options]" % (self.command_name, self.subcommand_name)
+ return "Usage: %s [global-opts] %s [options] [NODEDIR [twistd-options]]" % (self.command_name, self.subcommand_name)
def getUsage(self, width=None):
t = BasedirOptions.getUsage(self, width) + "\n"
- t += format_twisted_options(MyTwistdConfig())
+ twistd_options = str(MyTwistdConfig()).partition("\n")[2].partition("\n\n")[0]
+ if twistd_options.startswith("Options:"):
+ twistd_options = "twistd-o" + twistd_options[1 :]
+ t += twistd_options
+ t += """
+
+Note that if any twistd-options are used, NODEDIR must be specified explicitly
+(not by default or using -C/--basedir or -d/--node-directory), and followed by
+the twistd-options.
+"""
return t
class StopOptions(BasedirOptions):
+ def parseArgs(self, basedir=None):
+ BasedirOptions.parseArgs(self, basedir)
+
def getSynopsis(self):
return "Usage: %s [global-opts] stop [options] [NODEDIR]" % (self.command_name,)
import os, sys
-from allmydata.scripts.common import BasedirOptions
+from allmydata.scripts.common import NoDefaultBasedirOptions
from allmydata.util.assertutil import precondition
from allmydata.util.encodingutil import listdir_unicode, quote_output
-class CreateStatsGathererOptions(BasedirOptions):
- default_nodedir = None
- def getSynopsis(self):
- return "Usage: %s [global-opts] create-stats-gatherer [options] NODEDIR" % (self.command_name,)
+class CreateStatsGathererOptions(NoDefaultBasedirOptions):
+ subcommand_name = "create-stats-gatherer"
stats_gatherer_tac = """
def test_start(self):
help = str(startstop_node.StartOptions())
- self.failUnlessIn(" [global-opts] start [options] [NODEDIR]", help)
+ self.failUnlessIn(" [global-opts] start [options] [NODEDIR [twistd-options]]", help)
def test_stop(self):
help = str(startstop_node.StopOptions())
def test_restart(self):
help = str(startstop_node.RestartOptions())
- self.failUnlessIn(" [global-opts] restart [options] [NODEDIR]", help)
+ self.failUnlessIn(" [global-opts] restart [options] [NODEDIR [twistd-options]]", help)
def test_run(self):
help = str(startstop_node.RunOptions())
- self.failUnlessIn(" [global-opts] run [options] [NODEDIR]", help)
+ self.failUnlessIn(" [global-opts] run [options] [NODEDIR [twistd-options]]", help)
def test_create_client(self):
help = str(create_node.CreateClientOptions())
o = self.parse(["--node-directory", "there", "start"])
self.failUnlessEqual(o["basedir"], os.path.abspath("there"))
+ o = self.parse(["start", "here", "--nodaemon"])
+ self.failUnlessEqual(o["basedir"], os.path.abspath("here"))
+
self.failUnlessRaises(usage.UsageError, self.parse,
["--basedir", "there", "start"])
self.failUnlessRaises(usage.UsageError, self.parse,
["--node-directory=there",
"start", "--basedir=here", "anywhere"])
+ self.failUnlessRaises(usage.UsageError, self.parse,
+ ["--node-directory=there", "start", "--nodaemon"])
+ self.failUnlessRaises(usage.UsageError, self.parse,
+ ["start", "--basedir=here", "--nodaemon"])