]> thyrsus.com Git - src.git/commitdiff
Tag-command refactoring is done.
authorEric S. Raymond <esr@thyrsus.com>
Sun, 9 Nov 2014 14:11:27 +0000 (09:11 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Sun, 9 Nov 2014 14:11:27 +0000 (09:11 -0500)
src

diff --git a/src b/src
index 2a7b054a426fb20ba65ff41ea53fe06b69068ec8..e11add6a6d93822a8321c67621bb381fa18ff003 100755 (executable)
--- a/src
+++ b/src
@@ -604,53 +604,48 @@ def diff_method(*args):
         with backend.lifter(arg):
             backend.diff(diffspec1, diffspec2, diffopts, arg)
 
-def list_tags(*args):
-    (revspec, args) = preamble("tag", args)
-    if revspec is not None:
-        croak("can't accept a revision-spec when deleting tags.")
-    width = screenwidth()
-    for arg in args:
-        master = History(arg)
-        sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
-        for (key, value) in master.symbols.items():
-            if not master.isbranch(arg):
-                sys.stdout.write("%4d\t%s\n" % (master.rcs_to_revno(value),key))
-
-def delete_tags(args):
-    if not args:
-        croak("deleting tags requires a tagname argument")
-    tagname = args.pop(0)
-    (revspec, args) = preamble("tag", args)
-    if revspec is not None:
-        croak("can't accept a revision-spec when deleting tags.")
-    for arg in args:
-        master = History(arg)
-        if tagname not in master.symbols:
-            croak("%s is not a tag in %s" % (tagname, arg))
-        else:
-            with backend.lifter(arg):
-                backend.delete_tag(tagname, arg)
-            if not quiet and len(args) > 1:
-                announce("tag %s removed from %s" % (tagname, arg))
-
-def tag_helper(args, legend, list_tags, delete_tags, set_method):
+def tag_helper(args, legend, delete_method, set_method):
     "Dispatch to handlers for tag and branch manipulation."
     if not os.path.exists(repodir):
         croak("repository subdirectory %s does not exist" % repodir)
     args = list(args)
     if not args:
-        list_tags()
-        return
+        args = ["list"] + args
     if args[0] == '--':
         args.pop(0)
     else:
         if args[0] in ("-d", "del", "delete"):
-            delete_tags(args[1:])
-            return
+            args.pop(0)
+            if not args:
+                croak("%s deletion requires a name argument" % legend)
+            name = args.pop(0)
+            (revspec, args) = preamble(legend, args)
+            if revspec is not None:
+                croak("can't accept a revision-spec when %s deleting." % legend)
+            for arg in args:
+                master = History(arg)
+                if name not in master.symbols:
+                    croak("%s is not a %s in %s" % (name, legend, arg))
+                else:
+                    with backend.lifter(arg):
+                        delete_method(name, arg)
+                    if not quiet and len(args) > 1:
+                        announce("tag %s removed from %s" % (name, arg))
+                return
         if args[0] in ("-l", "list"):
-            list_tags(*args[1:])
+            args.pop(0)
+            (revspec, args) = preamble(legend, args)
+            if revspec is not None:
+                croak("can't accept a revision-spec when %s listing." % legend)
+            width = screenwidth()
+            for arg in args:
+                master = History(arg)
+                sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
+                for (key, value) in master.symbols.items():
+                    # FIXME: sort so trunk is top
+                    if master.isbranch(arg) == (legend == "branch"):
+                        sys.stdout.write("%4d\t%s\n" % (master.rcs_to_revno(value),key))
             return
-    # set_tags case
     if not args:
         croak("%s setting requires a name argument" % legend)
     name = args.pop(0)
@@ -673,7 +668,7 @@ def tag_helper(args, legend, list_tags, delete_tags, set_method):
 
 def tag_method(*args):
     "Inspect, create, and delete tags."
-    tag_helper(args, "tag", list_tags, delete_tags, backend.set_tag)
+    tag_helper(args, "tag", backend.delete_tag, backend.set_tag)
 
 def branch_method(*args):
     "Inspect, create, and delete branch."