mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 08:25:35 +00:00
CLI: add 'list-aliases', factor out get_aliases
This commit is contained in:
parent
1236bc3408
commit
1d8e452184
15
docs/CLI.txt
15
docs/CLI.txt
@ -138,13 +138,15 @@ The best way to get started with Tahoe is to create a node, start it, then
|
||||
use the following command to create a new directory and set it as your
|
||||
"tahoe:" alias:
|
||||
|
||||
tahoe set-alias tahoe `tahoe mkdir`
|
||||
tahoe add-alias tahoe `tahoe mkdir`
|
||||
|
||||
After that you can use "tahoe ls tahoe:" and "tahoe cp local.txt tahoe:",
|
||||
and both will refer to the directory that you've just created.
|
||||
|
||||
=== Command Syntax Summary ===
|
||||
|
||||
tahoe add-alias alias cap
|
||||
tahoe list-aliases
|
||||
tahoe mkdir
|
||||
tahoe mkdir [alias:]path
|
||||
tahoe ls [alias:][path]
|
||||
@ -163,6 +165,17 @@ tahoe mkdir
|
||||
This creates a new empty unlinked directory, and prints its write-cap to
|
||||
stdout. The new directory is not attached to anything else.
|
||||
|
||||
tahoe add-alias work DIRCAP
|
||||
|
||||
This create an alias "work:" and configures it to use the given directory
|
||||
cap. Once this is done, "tahoe ls work:" will list the contents of this
|
||||
directory. Use "tahoe add-alias tahoe DIRCAP" to set the contents of the
|
||||
default "tahoe:" alias.
|
||||
|
||||
tahoe list-aliases
|
||||
|
||||
This displays a table of all configured aliases.
|
||||
|
||||
tahoe mkdir subdir
|
||||
tahoe mkdir /subdir
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
import os.path, re, sys
|
||||
from twisted.python import usage
|
||||
from allmydata.scripts.common import BaseOptions
|
||||
from allmydata.scripts.common import BaseOptions, get_aliases
|
||||
|
||||
NODEURL_RE=re.compile("http://([^:]*)(:([1-9][0-9]*))?")
|
||||
|
||||
@ -40,38 +40,12 @@ class VDriveOptions(BaseOptions, usage.Options):
|
||||
node_url_file = os.path.join(self['node-directory'], "node.url")
|
||||
self['node-url'] = open(node_url_file, "r").read().strip()
|
||||
|
||||
aliases = self.get_aliases(self['node-directory'])
|
||||
aliases = get_aliases(self['node-directory'])
|
||||
if self['dir-cap']:
|
||||
aliases["tahoe"] = self['dir-cap']
|
||||
self.aliases = aliases # maps alias name to dircap
|
||||
|
||||
|
||||
def get_aliases(self, nodedir):
|
||||
from allmydata import uri
|
||||
aliases = {}
|
||||
aliasfile = os.path.join(nodedir, "private", "aliases")
|
||||
rootfile = os.path.join(nodedir, "private", "root_dir.cap")
|
||||
try:
|
||||
f = open(rootfile, "r")
|
||||
rootcap = f.read().strip()
|
||||
if rootcap:
|
||||
aliases["tahoe"] = uri.from_string_dirnode(rootcap).to_string()
|
||||
except EnvironmentError:
|
||||
pass
|
||||
try:
|
||||
f = open(aliasfile, "r")
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if line.startswith("#"):
|
||||
continue
|
||||
name, cap = line.split(":", 1)
|
||||
# normalize it: remove http: prefix, urldecode
|
||||
cap = cap.strip()
|
||||
aliases[name] = uri.from_string_dirnode(cap).to_string()
|
||||
except EnvironmentError:
|
||||
pass
|
||||
return aliases
|
||||
|
||||
class MakeDirectoryOptions(VDriveOptions):
|
||||
def parseArgs(self, where=""):
|
||||
self.where = where
|
||||
@ -82,6 +56,9 @@ class AddAliasOptions(VDriveOptions):
|
||||
self.alias = alias
|
||||
self.cap = cap
|
||||
|
||||
class ListAliasOptions(VDriveOptions):
|
||||
pass
|
||||
|
||||
class ListOptions(VDriveOptions):
|
||||
optFlags = [
|
||||
("long", "l", "Use long format: show file sizes, and timestamps"),
|
||||
@ -180,6 +157,7 @@ class ReplOptions(usage.Options):
|
||||
subCommands = [
|
||||
["mkdir", None, MakeDirectoryOptions, "Create a new directory"],
|
||||
["add-alias", None, AddAliasOptions, "Add a new alias cap"],
|
||||
["list-aliases", None, ListAliasOptions, "List all alias caps"],
|
||||
["ls", None, ListOptions, "List a directory"],
|
||||
["get", None, GetOptions, "Retrieve a file from the virtual drive."],
|
||||
["put", None, PutOptions, "Upload a file into the virtual drive."],
|
||||
@ -206,6 +184,12 @@ def add_alias(config, stdout, stderr):
|
||||
stdout, stderr)
|
||||
return rc
|
||||
|
||||
def list_aliases(config, stdout, stderr):
|
||||
from allmydata.scripts import tahoe_add_alias
|
||||
rc = tahoe_add_alias.list_aliases(config['node-directory'],
|
||||
stdout, stderr)
|
||||
return rc
|
||||
|
||||
def list(config, stdout, stderr):
|
||||
from allmydata.scripts import tahoe_ls
|
||||
rc = tahoe_ls.list(config['node-url'],
|
||||
@ -299,6 +283,7 @@ def repl(config, stdout, stderr):
|
||||
dispatch = {
|
||||
"mkdir": mkdir,
|
||||
"add-alias": add_alias,
|
||||
"list-aliases": list_aliases,
|
||||
"ls": list,
|
||||
"get": get,
|
||||
"put": put,
|
||||
|
@ -64,6 +64,33 @@ class NoDefaultBasedirMixin(BasedirMixin):
|
||||
|
||||
DEFAULT_ALIAS = "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")
|
||||
try:
|
||||
f = open(rootfile, "r")
|
||||
rootcap = f.read().strip()
|
||||
if rootcap:
|
||||
aliases["tahoe"] = uri.from_string_dirnode(rootcap).to_string()
|
||||
except EnvironmentError:
|
||||
pass
|
||||
try:
|
||||
f = open(aliasfile, "r")
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if line.startswith("#"):
|
||||
continue
|
||||
name, cap = line.split(":", 1)
|
||||
# normalize it: remove http: prefix, urldecode
|
||||
cap = cap.strip()
|
||||
aliases[name] = uri.from_string_dirnode(cap).to_string()
|
||||
except EnvironmentError:
|
||||
pass
|
||||
return aliases
|
||||
|
||||
def get_alias(aliases, path, default):
|
||||
# transform "work:path/filename" into (aliases["work"], "path/filename")
|
||||
# We special-case URI:
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
import os.path
|
||||
from allmydata import uri
|
||||
from allmydata.scripts.common import get_aliases
|
||||
|
||||
def add_alias(nodedir, alias, cap, stdout, stderr):
|
||||
aliasfile = os.path.join(nodedir, "private", "aliases")
|
||||
@ -14,3 +15,11 @@ def add_alias(nodedir, alias, cap, stdout, stderr):
|
||||
print >>stdout, "Alias '%s' added" % (alias,)
|
||||
return 0
|
||||
|
||||
def list_aliases(nodedir, stdout, stderr):
|
||||
aliases = get_aliases(nodedir)
|
||||
alias_names = sorted(aliases.keys())
|
||||
max_width = max([len(name) for name in alias_names] + [0])
|
||||
fmt = "%" + str(max_width) + "s: %s"
|
||||
for name in alias_names:
|
||||
print >>stdout, fmt % (name, aliases[name])
|
||||
|
||||
|
@ -1560,9 +1560,20 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, testutil.StallMixin,
|
||||
d.addCallback(run, "ls")
|
||||
d.addCallback(_check_ls, ["personal", "s2-ro", "s2-rw"])
|
||||
|
||||
d.addCallback(run, "list-aliases")
|
||||
def _check_aliases_1((out,err)):
|
||||
self.failUnlessEqual(err, "")
|
||||
self.failUnlessEqual(out, "tahoe: %s\n" % private_uri)
|
||||
d.addCallback(_check_aliases_1)
|
||||
|
||||
# now that that's out of the way, remove root_dir.cap and work with
|
||||
# new files
|
||||
d.addCallback(lambda res: os.unlink(root_file))
|
||||
d.addCallback(run, "list-aliases")
|
||||
def _check_aliases_2((out,err)):
|
||||
self.failUnlessEqual(err, "")
|
||||
self.failUnlessEqual(out, "")
|
||||
d.addCallback(_check_aliases_2)
|
||||
|
||||
d.addCallback(run, "mkdir")
|
||||
def _got_dir( (out,err) ):
|
||||
@ -1570,6 +1581,13 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, testutil.StallMixin,
|
||||
return out.strip()
|
||||
d.addCallback(_got_dir)
|
||||
d.addCallback(lambda newcap: run(None, "add-alias", "tahoe", newcap))
|
||||
|
||||
d.addCallback(run, "list-aliases")
|
||||
def _check_aliases_3((out,err)):
|
||||
self.failUnlessEqual(err, "")
|
||||
self.failUnless("tahoe: " in out)
|
||||
d.addCallback(_check_aliases_3)
|
||||
|
||||
def _check_empty_dir((out,err)):
|
||||
self.failUnlessEqual(out, "")
|
||||
self.failUnlessEqual(err, "")
|
||||
|
Loading…
x
Reference in New Issue
Block a user