From e889463f0cce965ceaa5036ac4220b7578dada3f Mon Sep 17 00:00:00 2001 From: Brian Warner <warner@allmydata.com> Date: Tue, 20 May 2008 12:36:55 -0700 Subject: [PATCH] CLI: add put --mutable, enhance ls to show mutable vs immutable as rw/r- --- src/allmydata/scripts/cli.py | 5 +++++ src/allmydata/scripts/tahoe_ls.py | 25 +++++++++++++++++++------ src/allmydata/scripts/tahoe_put.py | 6 ++++-- src/allmydata/test/test_system.py | 6 +++++- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py index baee26b5..84042186 100644 --- a/src/allmydata/scripts/cli.py +++ b/src/allmydata/scripts/cli.py @@ -114,6 +114,10 @@ class GetOptions(VDriveOptions): will be written to stdout.""" class PutOptions(VDriveOptions): + optFlags = [ + ("mutable", "m", "Create a mutable file instead of an immutable one."), + ] + def parseArgs(self, arg1=None, arg2=None): # cat FILE > tahoe put # create unlinked file from stdin # cat FILE > tahoe put FOO # create tahoe:FOO from stdin @@ -229,6 +233,7 @@ def put(config, stdout, stderr, stdin=sys.stdin): config.aliases, config.from_file, config.to_file, + config['mutable'], verbosity, stdin, stdout, stderr) return rc diff --git a/src/allmydata/scripts/tahoe_ls.py b/src/allmydata/scripts/tahoe_ls.py index edfcce2c..821c98c4 100644 --- a/src/allmydata/scripts/tahoe_ls.py +++ b/src/allmydata/scripts/tahoe_ls.py @@ -36,6 +36,8 @@ def list(nodeurl, aliases, where, config, stdout, stderr): childtype = child[0] ctime = child[1]["metadata"].get("ctime") mtime = child[1]["metadata"].get("mtime") + rw_uri = child[1].get("rw_uri") + ro_uri = child[1].get("ro_uri") if ctime: # match for formatting that GNU 'ls' does if (now - ctime) > 6*30*24*60*60: @@ -47,21 +49,32 @@ def list(nodeurl, aliases, where, config, stdout, stderr): else: ctime_s = "-" if childtype == "dirnode": - t = "d---------" + t0 = "d" size = "-" classify = "/" elif childtype == "filenode": - t = "----------" + t0 = "-" size = child[1]['size'] classify = "" - if "rw_uri" in child[1]: - classify = "*" # mutable + else: + t0 = "?" + size = "?" + classify = "?" + t1 = "-" + if ro_uri: + t1 = "r" + t2 = "-" + if rw_uri: + t2 = "w" + t3 = "-" + if childtype == "dirnode": + t3 = "x" - uri = child[1].get("rw_uri", child[1].get("ro_uri", "-")) + uri = rw_uri or ro_uri line = [] if config["long"]: - line.append("%s %10s %12s" % (t, size, ctime_s)) + line.append("%s %10s %12s" % (t0+t1+t2+t3, size, ctime_s)) if config["uri"]: line.append(uri) line.append(name) diff --git a/src/allmydata/scripts/tahoe_put.py b/src/allmydata/scripts/tahoe_put.py index 6288cac1..6d87b5e5 100644 --- a/src/allmydata/scripts/tahoe_put.py +++ b/src/allmydata/scripts/tahoe_put.py @@ -4,8 +4,8 @@ import urllib from allmydata.scripts.common_http import do_http from allmydata.scripts.common import get_alias, DEFAULT_ALIAS, escape_path -def put(nodeurl, aliases, from_file, to_file, verbosity, - stdin, stdout, stderr): +def put(nodeurl, aliases, from_file, to_file, mutable, + verbosity, stdin, stdout, stderr): """ @param verbosity: 0, 1, or 2, meaning quiet, verbose, or very verbose @@ -20,6 +20,8 @@ def put(nodeurl, aliases, from_file, to_file, verbosity, url += escape_path(path) else: url = nodeurl + "uri" + if mutable: + url += "?mutable=true" if from_file: infileobj = open(from_file, "rb") else: diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py index 50662db3..f74c06af 100644 --- a/src/allmydata/test/test_system.py +++ b/src/allmydata/test/test_system.py @@ -1604,6 +1604,7 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, testutil.StallMixin, d.addCallback(run, "put", files[1], "subdir/tahoe-file1") # tahoe put bar tahoe:FOO d.addCallback(run, "put", files[2], "tahoe:file2") + d.addCallback(run, "put", "--mutable", files[3], "tahoe:file3") def _put_from_stdin(res, data, *args): args = nodeargs + list(args) @@ -1629,7 +1630,7 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, testutil.StallMixin, "tahoe:from-stdin") d.addCallback(run, "ls") - d.addCallback(_check_ls, ["tahoe-file0", "file2", "subdir", + d.addCallback(_check_ls, ["tahoe-file0", "file2", "file3", "subdir", "tahoe-file-stdin", "from-stdin"]) d.addCallback(run, "ls", "subdir") d.addCallback(_check_ls, ["tahoe-file1"]) @@ -1670,7 +1671,10 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, testutil.StallMixin, lines = out.split("\n") for l in lines: if "tahoe-file-stdin" in l: + self.failUnless(l.startswith("-r-- "), l) self.failUnless(" %d " % len(STDIN_DATA) in l) + if "file3" in l: + self.failUnless(l.startswith("-rw- "), l) # mutable d.addCallback(_check_ls_l) d.addCallback(run, "mv", "tahoe-file-stdin", "tahoe-moved") -- 2.45.2