import codecs
from twisted.python import usage
from allmydata.util.assertutil import precondition
-from allmydata.util.encodingutil import unicode_to_url, quote_output, argv_to_abspath
-from allmydata.util.fileutil import abspath_expanduser_unicode
-
-
-_default_nodedir = None
-if sys.platform == 'win32':
- from allmydata.windows import registry
- path = registry.get_base_dir_path()
- if path:
- precondition(isinstance(path, unicode), path)
- _default_nodedir = abspath_expanduser_unicode(path)
-
-if _default_nodedir is None:
- path = abspath_expanduser_unicode(u"~/.tahoe")
- precondition(isinstance(path, unicode), path)
- _default_nodedir = path
+from allmydata.util.encodingutil import unicode_to_url, quote_output, \
+ quote_local_unicode_path, argv_to_abspath
+from allmydata.scripts.default_nodedir import _default_nodedir
def get_default_nodedir():
return _default_nodedir
default_nodedir = _default_nodedir
optParameters = [
- ["basedir", "C", None, "Same as --node-directory (default %s)."
- % get_default_nodedir()],
+ ["basedir", "C", None, "Specify which Tahoe base directory should be used. [default: %s]"
+ % quote_local_unicode_path(_default_nodedir)],
]
def parseArgs(self, basedir=None):
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"
def get_aliases(nodedir):
- from allmydata import uri
aliases = {}
aliasfile = os.path.join(nodedir, "private", "aliases")
rootfile = os.path.join(nodedir, "private", "root_dir.cap")
f = open(rootfile, "r")
rootcap = f.read().strip()
if rootcap:
- aliases[DEFAULT_ALIAS] = uri.from_string_dirnode(rootcap).to_string()
+ aliases[DEFAULT_ALIAS] = rootcap
except EnvironmentError:
pass
try:
name, cap = line.split(u":", 1)
# normalize it: remove http: prefix, urldecode
cap = cap.strip().encode('utf-8')
- aliases[name] = uri.from_string_dirnode(cap).to_string()
+ aliases[name] = cap
except EnvironmentError:
pass
return aliases
raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. "
"To create it, use 'tahoe create-alias %s'."
% (quote_output(default), quote_output(default, quotemarks=False)))
- return aliases[default], path
+ return uri.from_string_dirnode(aliases[default]).to_string(), path
if colon == 1 and default is None and platform_uses_lettercolon_drivename():
# treat C:\why\must\windows\be\so\weird as a local path, not a tahoe
# file in the "C:" alias
raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. "
"To create it, use 'tahoe create-alias %s'."
% (quote_output(default), quote_output(default, quotemarks=False)))
- return aliases[default], path
+ return uri.from_string_dirnode(aliases[default]).to_string(), path
if alias not in aliases:
raise UnknownAliasError("Unknown alias %s, please create it with 'tahoe add-alias' or 'tahoe create-alias'." %
quote_output(alias))
- return aliases[alias], path[colon+1:]
+ return uri.from_string_dirnode(aliases[alias]).to_string(), path[colon+1:]
def escape_path(path):
+ # this always returns bytes, specifically US-ASCII, valid URL characters
segments = path.split("/")
return "/".join([urllib.quote(unicode_to_url(s)) for s in segments])