From: Eric S. Raymond Date: Sun, 9 Nov 2014 16:22:05 +0000 (-0500) Subject: src branch syntax is implemented, now we need to write two methods. X-Git-Tag: 0.3~9 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=1ff6be4bbf64329e05a16cd5cfa56d8ae1c31dc4;p=src.git src branch syntax is implemented, now we need to write two methods. Regression test passes. --- diff --git a/src b/src index e11add6..e4da321 100755 --- a/src +++ b/src @@ -630,7 +630,7 @@ def tag_helper(args, legend, delete_method, set_method): with backend.lifter(arg): delete_method(name, arg) if not quiet and len(args) > 1: - announce("tag %s removed from %s" % (name, arg)) + announce("%s %s removed from %s" % (legend, name, arg)) return if args[0] in ("-l", "list"): args.pop(0) @@ -641,8 +641,11 @@ def tag_helper(args, legend, delete_method, set_method): for arg in args: master = History(arg) sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "="))) + if legend == "branch": + sys.stdout.write("%s\n" % metadata.branch) for (key, value) in master.symbols.items(): - # FIXME: sort so trunk is top + if legend == "branch" and key == branch.metadata: + continue if master.isbranch(arg) == (legend == "branch"): sys.stdout.write("%4d\t%s\n" % (master.rcs_to_revno(value),key)) return @@ -651,13 +654,15 @@ def tag_helper(args, legend, delete_method, set_method): name = args.pop(0) (revspec, args) = preamble("tag", args) for arg in args: - master = History(arg) - revspec = master.resolve(revspec) + metadata = History(arg) + revspec = metadata.resolve(revspec) + if name in metadata.symbols: + croak("%s %s already set." % (legend, name)) if revspec is None: - revision = master.tip().revision - revno = master.tip().revno + revision = metadata.tip().revision + revno = metadata.tip().revno elif len(revspec) == 1: - revision = master.revno_to_rcs(revspec[0]) + revision = metadata.revno_to_rcs(revspec[0]) revno = revspec[0] else: croak("can't accept a range when %s setting" % legend) @@ -671,46 +676,8 @@ def tag_method(*args): tag_helper(args, "tag", backend.delete_tag, backend.set_tag) def branch_method(*args): - "Inspect, create, and delete branch." - if not os.path.exists(repodir): - croak("repository subdirectory %s does not exist" % repodir) - (revspec, args) = preamble("branch", args) - if len(args) == 1: - metadata = History(args[0]) - sys.stdout.write("%s\n" % metadata.branch) - for branchname in metadata.symbols: - if metadata.isbranch(key): - if key != metadata.branch: - sys.stdout.write("%s\n" % key) - return - deleteflag = False - if args[0] == '--': - args.pop(0) - elif args[0] in ("delete", "del", "-d"): - deleteflag = True - args.pop(0) - if not args: - croak("branch requires at least a tagname argument") - branchname = args.pop(0) - if not deleteflag: - if args: - revspec = metadata.resolve(args[0]) - if revspec[0] == revspec[1]: - revspec = master.revno_to_rcs(revspec[0]) - else: - croak("branch cannot accept a range") - # We have a tag name, and either the delete flag is on or - # we have a native revision. Remaining args are files. - for arg in args: - metadata = History(arg) - if deleteflag: - if branchname in metadata.symbols: - backend.delete_tag(branchname, arg) - # FIXME: delete all the branch revisions - if len(args) and not quiet: - announce("branch %s removed from %s" % (branchname, arg)) - else: - croak("%s is not a branch in %s" % (branchname, arg)) + "Inspect, create, and delete branches." + tag_helper(args, "branch", backend.delete_branch, backend.set_branch) def filecmd(legend, hook, args): (revspec, args) = preamble(legend, args) @@ -901,6 +868,12 @@ class RCS: def set_tag(self, tagname, revision, arg): "Set a specified tag." do_or_die("rcs -N{0}:{1} {2}".format(tagname, revision, arg)) + def delete_branch(self, branchname, arg): + "Delete a specified branch." + croak("branch deletion is not yet supported") + def set_branch(self, branchname, revision, arg): + "Set a specified branch." + croak("branch creation is not yet supported") def move(self, source, target): "Move a file and its history." do_or_die("mv {0} {1} && mv {2} {3}".format(source, target,