From 114cc40532ac272fcf0c3f74f9cfd5b0bdb05eea Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Mon, 10 Nov 2014 13:01:36 -0500 Subject: [PATCH] It looks like the back end for branching can be simpler. --- src | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src b/src index 0b04a19..5b32d77 100755 --- 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): -- 2.43.0