From f10a2c0902549684f85122b4529879f8f7c8c95e Mon Sep 17 00:00:00 2001
From: david-sarah <david-sarah@jacaranda.org>
Date: Thu, 13 Jan 2011 19:44:14 -0800
Subject: [PATCH] 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

---
 NEWS                                     |  2 ++
 docs/frontends/CLI.rst                   |  9 ++++++---
 src/allmydata/scripts/cli.py             |  8 ++++++--
 src/allmydata/scripts/tahoe_add_alias.py | 18 ++++++++++++++----
 4 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/NEWS b/NEWS
index 18f90bac..6ff38003 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@
  - 'top' on some Unix platforms, e.g. Linux, now shows node processes as
    'tahoe' instead of 'python'. (#174)
  - Improve HTML formatting of the WUI. (#1219)
+ - The 'tahoe create-alias' and 'tahoe add-alias' commands now accept a
+   trailing colon on the alias. (#1305)
 
 ** Removals
 
diff --git a/docs/frontends/CLI.rst b/docs/frontends/CLI.rst
index 2026416e..4b518e18 100644
--- a/docs/frontends/CLI.rst
+++ b/docs/frontends/CLI.rst
@@ -247,9 +247,9 @@ access to your files and directories.
 Command Syntax Summary
 ----------------------
 
-``tahoe add-alias ALIAS DIRCAP``
+``tahoe add-alias ALIAS[:] DIRCAP``
 
-``tahoe create-alias ALIAS``
+``tahoe create-alias ALIAS[:]``
 
 ``tahoe list-aliases``
 
@@ -290,7 +290,7 @@ In these summaries, ``PATH``, ``TOPATH`` or ``FROMPATH`` can be one of:
 Command Examples
 ----------------
 
-``tahoe add-alias ALIAS DIRCAP``
+``tahoe add-alias ALIAS[:] DIRCAP``
 
  An example would be::
 
@@ -301,6 +301,9 @@ Command Examples
  directory. Use "``tahoe add-alias tahoe DIRCAP``" to set the contents of the
  default ``tahoe:`` alias.
 
+ Since Tahoe-LAFS v1.8.2, the alias name can be given with or without the
+ trailing colon.
+
 ``tahoe create-alias fun``
 
  This combines "``tahoe mkdir``" and "``tahoe add-alias``" into a single step.
diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py
index 8a3d4180..51119c1a 100644
--- a/src/allmydata/scripts/cli.py
+++ b/src/allmydata/scripts/cli.py
@@ -57,19 +57,23 @@ class MakeDirectoryOptions(VDriveOptions):
 class AddAliasOptions(VDriveOptions):
     def parseArgs(self, alias, cap):
         self.alias = argv_to_unicode(alias)
+        if self.alias.endswith(u':'):
+            self.alias = self.alias[:-1]
         self.cap = cap
 
     def getSynopsis(self):
-        return "%s add-alias ALIAS DIRCAP" % (os.path.basename(sys.argv[0]),)
+        return "%s add-alias ALIAS[:] DIRCAP" % (os.path.basename(sys.argv[0]),)
 
     longdesc = """Add a new alias for an existing directory."""
 
 class CreateAliasOptions(VDriveOptions):
     def parseArgs(self, alias):
         self.alias = argv_to_unicode(alias)
+        if self.alias.endswith(u':'):
+            self.alias = self.alias[:-1]
 
     def getSynopsis(self):
-        return "%s create-alias ALIAS" % (os.path.basename(sys.argv[0]),)
+        return "%s create-alias ALIAS[:]" % (os.path.basename(sys.argv[0]),)
 
     longdesc = """Create a new directory and add an alias for it."""
 
diff --git a/src/allmydata/scripts/tahoe_add_alias.py b/src/allmydata/scripts/tahoe_add_alias.py
index a3ae1843..f3ed15c4 100644
--- a/src/allmydata/scripts/tahoe_add_alias.py
+++ b/src/allmydata/scripts/tahoe_add_alias.py
@@ -32,8 +32,13 @@ def add_alias(options):
     cap = options.cap
     stdout = options.stdout
     stderr = options.stderr
-    assert ":" not in alias
-    assert " " not in alias
+    if u":" in alias:
+        # a single trailing colon will already have been stripped if present
+        print >>stderr, "Alias names cannot contain colons."
+        return 1
+    if u" " in alias:
+        print >>stderr, "Alias names cannot contain spaces."
+        return 1
 
     old_aliases = get_aliases(nodedir)
     if alias in old_aliases:
@@ -53,8 +58,13 @@ def create_alias(options):
     alias = options.alias
     stdout = options.stdout
     stderr = options.stderr
-    assert ":" not in alias
-    assert " " not in alias
+    if u":" in alias:
+        # a single trailing colon will already have been stripped if present
+        print >>stderr, "Alias names cannot contain colons."
+        return 1
+    if u" " in alias:
+        print >>stderr, "Alias names cannot contain spaces."
+        return 1
 
     old_aliases = get_aliases(nodedir)
     if alias in old_aliases:
-- 
2.45.2