]> thyrsus.com Git - src.git/commitdiff
Another step towards full branch support. Regresion test passes.
authorEric S. Raymond <esr@thyrsus.com>
Sun, 9 Nov 2014 18:07:21 +0000 (13:07 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Sun, 9 Nov 2014 18:08:13 +0000 (13:08 -0500)
src

diff --git a/src b/src
index d3fbeee48e2eb487726945d904637b5a0c211559..106b4c6aafdc06d776e8d0961047c8c2d103967d 100755 (executable)
--- a/src
+++ b/src
@@ -679,19 +679,28 @@ def tag_helper(args, legend, delete_method, set_method):
     (revspec, args) = preamble(legend, args)
     for arg in args:
         metadata = History(arg)
-        revspec = metadata.resolve(revspec)
-        if name in metadata.symbols:
-            croak("%s %s already set." % (legend, name))
-        if revspec is None:
-            revision = metadata.tip().revision
-            revno = metadata.tip().revno
-        elif len(revspec) == 1:
-            revision = metadata.revno_to_rcs(revspec[0])
-            revno = revspec[0]
+        # Semantics differs between tags and branches here
+        if legend == "tag":
+            revspec = metadata.resolve(revspec)
+            if name in metadata.symbols:
+                croak("%s %s already set." % (legend, name))
+            if revspec is None:
+                revision = metadata.tip().revision
+                revno = metadata.tip().revno
+            elif len(revspec) == 1:
+                revision = metadata.revno_to_rcs(revspec[0])
+                revno = revspec[0]
+            else:
+                croak("can't accept a range when %s setting" % legend)
+        elif legend == "branch":
+            if revspec is not None:
+                croak("cannot accept a revision after a branch name")
+            if name not in metadata.symbols:
+                backend.create_branch(metadata.new_branchpoint(metadata_current()))
         else:
-            croak("can't accept a range when %s setting" % legend)
+            croak("internal error - what is this thing called %s" % legend)
         with backend.lifter(arg):
-            set_method(name, revision, metadata.current(), arg)
+            set_method(name, revision, arg)
             if not quiet and len(args) > 1:
                 announce("%s %s = %s in " % (legend, name, revno, arg))
 
@@ -889,15 +898,18 @@ class RCS:
     def delete_tag(self, tagname, arg):
         "Delete a specified tag."
         do_or_die("rcs -n{0} {1}".format(tagname, arg))
-    def set_tag(self, tagname, revision, _baserev, arg):
+    def set_tag(self, tagname, revision, arg):
         "Set a specified tag."
         do_or_die("rcs -n{0}:{1} {2}".format(tagname, revision, arg))
+    def create_branch(self, name, revision, arg):
+        croak("branch creation is not yet supported")
     def delete_branch(self, branchname, arg):
         "Delete a specified branch."
         croak("branch deletion is not yet supported")
-    def set_branch(self, branchname, revision, baserev, arg):
-        "Set the specified branch to be default, creating if required."
-        croak("branch creation is not yet supported")
+    def set_branch(self, _name, revision, arg):
+        "Set the specified branch to be default."
+        croak("branch change is not yet supported")
+        #do_or_die("rcs -b%s %s" % (revision, name))
     def move(self, source, target):
         "Move a file and its history."
         do_or_die("mv {0} {1} && mv {2} {3}".format(source, target,