]> thyrsus.com Git - src.git/commitdiff
It looks like the back end for branching can be simpler.
authorEric S. Raymond <esr@thyrsus.com>
Mon, 10 Nov 2014 18:01:36 +0000 (13:01 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Mon, 10 Nov 2014 18:01:36 +0000 (13:01 -0500)
src

diff --git a/src b/src
index 0b04a1973f8101ee68a12803b9f2e4ad8ad844d5..5b32d7747a4e14d079ce1af2a36f707849b43477 100755 (executable)
--- a/src
+++ b/src
@@ -671,7 +671,7 @@ def tag_helper(args, legend, validation_hook, delete_method, set_method):
         metadata = History(arg)
         revision = validation_hook(ctx, metadata, name)
         with backend.lifter(arg):
-            set_method(name, revision, arg)
+            set_method(name, revision, metadata, arg)
             if not quiet and len(args) > 1:
                 # FIXME: Misleading message when creating a branch.
                 announce("%s %s = %s in " % (legend, name, revno, arg))
@@ -694,9 +694,6 @@ def branch_method(*args):
     def branch_set_validate(ctx, metadata, name):
         if not ctx.is_empty():
             croak("cannot accept a revision after a branch name")
-        if name not in metadata.symbols:
-            with backend.lifter(arg):
-                return backend.create_branch(metadata)
     tag_helper(args, "branch",
                branch_set_validate,
                backend.delete_branch, backend.set_branch)
@@ -911,19 +908,21 @@ 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, arg):
+    def set_tag(self, tagname, revision, _metadata, 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 create_branch(self, metadata, arg):
-        "Create a new branch starting from the locked revision."
-        croak("branch creation is not yet supported")
-    def set_branch(self, _name, revision, arg):
-        "Set the specified branch to be default."
+    def set_branch(self, name, revision, metadata, arg):
+        "Set the specified branch to be default, creating it if required."
+        def branchfrom(c, p):
+            "Is c a branch child (not direct descendant) of parent p?"
+            c = c.split(".")
+            p = p.split(".")
+            return len(c) == len(p) + 2 and c[len(p):] == p
+        newsib = len(item for item in metatdata.revlist \
+                     if branchfrom(item.revision, baserev))
         croak("branch change is not yet supported")
         #do_or_die("rcs -b%s %s" % (revision, name))
     def move(self, source, target):