From: Eric S. Raymond Date: Sat, 15 Nov 2014 14:27:03 +0000 (-0500) Subject: Refactor delete methods. Regression test passes. X-Git-Tag: 0.9~22 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=eedb5a4807de43bf4e273994119f41c9d3619eff;p=src.git Refactor delete methods. Regression test passes. --- 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: