From eedb5a4807de43bf4e273994119f41c9d3619eff Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Sat, 15 Nov 2014 09:27:03 -0500 Subject: [PATCH] Refactor delete methods. Regression test passes. --- src | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src b/src index 07442a0..6dacd5b 100755 --- a/src +++ b/src @@ -1010,7 +1010,7 @@ def tag_helper(args, legend, validation_hook, delete_method, set_method): croak("in %s, %s is not a %s" % (arg, name, legend)) else: with backend.lifter(arg): - delete_method(name, arg) + delete_method(name, metadata) if not quiet and len(args) > 1: announce("in %s, %s %s removed" % (arg, legend, name)) return @@ -1066,7 +1066,7 @@ def tag_helper(args, legend, validation_hook, delete_method, set_method): # tag reference. with backend.lifter(arg): backend.set_tag(newname, metadata.symbols[name], metadata) - backend.delete_tag(name, arg) + backend.delete_tag(name, metadata) if not quiet and len(args) > 1: announce("in %s, %s -> %s" % (arg, name, newname)) return @@ -1377,13 +1377,13 @@ class RCS: if fn: arg += " >" + fn do_or_die("co -q -p -r{1} {0}".format(arg, revision), loud=True) - def delete_tag(self, tagname, arg): + def delete_tag(self, tagname, metadata): "Delete a specified tag." - do_or_die("rcs -n{0} {1}".format(tagname, arg)) + do_or_die("rcs -n{0} {1}".format(tagname, metadata.name)) def set_tag(self, tagname, revision, metadata): "Set a specified tag." do_or_die("rcs -n{0}:{1} {2}".format(tagname, revision, metadata.name)) - def delete_branch(self, branchname, arg): + def delete_branch(self, branchname, metadata): "Delete a specified branch." # From rcs(1): -orange deletes ("outdates") the revisions # given by range. A range consisting of a single revision @@ -1398,8 +1398,14 @@ class RCS: # What we need do is find the branch tip, then walk back to # just after the first point where it joins another branch, # then do a delete to end of branch from there. - croak("branch deletion is not yet supported") - #do_or_die("rcs -o{0}: {1}".format(revision, arg) + base = metadata.branch_to_tip(branchname) + while True: + if base is not None and metadata.by_native_d[base].branches: + break + else: + base = self.pred(base) + do_or_die("rcs -o{0}: {1}".format(self.succ(base), arg)) + self.delete_tag(branchname, metadata.name) def set_branch(self, name, revision, metadata): "Set the specified branch to be default, creating it if required." if name in metadata.symbols: -- 2.43.0