From 2f4d13ad7f9366010486f8b1c417a9906cf8dffd Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Mon, 10 Nov 2014 12:23:29 -0500 Subject: [PATCH] Purify tag_helper. --- src | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src b/src index fce15d3..7b34d31 100755 --- a/src +++ b/src @@ -601,7 +601,7 @@ def diff_method(*args): with backend.lifter(arg): backend.diff(diffspec1, diffspec2, diffopts, arg) -def tag_helper(args, legend, delete_method, set_method): +def tag_helper(args, legend, validation_hook, delete_method, set_method): "Dispatch to handlers for tag and branch manipulation." if not os.path.exists(repodir): croak("repository subdirectory %s does not exist" % repodir) @@ -669,32 +669,37 @@ def tag_helper(args, legend, delete_method, set_method): croak("can't accept a range when setting a %s" % legend) for arg in ctx.args: metadata = History(arg) - # Semantics differs between tags and branches here - if legend == "tag": - ctx.resolve(metadata) - if name in metadata.symbols: - croak("%s %s already set." % (legend, name)) - if ctx.is_empty(): - ctx.start = metadata.tip().revno - elif legend == "branch": - if not ctx.is_empty(): - croak("cannot accept a revision after a branch name") - if name not in metadata.symbols: - backend.create_branch(metadata.new_branchpoint(metadata_current())) - else: - croak("internal error - what is this thing called %s" % legend) + revision = validation_hook(ctx, metadata, name) with backend.lifter(arg): - set_method(name, metadata.revno_to_rcs(ctx.start), arg) + set_method(name, revision, arg) if not quiet and len(args) > 1: announce("%s %s = %s in " % (legend, name, revno, arg)) def tag_method(*args): "Inspect, create, and delete tags." - tag_helper(args, "tag", backend.delete_tag, backend.set_tag) + def tag_set_validate(ctx, metadata, name): + ctx.resolve(metadata) + if name in metadata.symbols: + croak("%s %s already set." % (legend, name)) + if ctx.is_empty(): + ctx.start = metadata.tip().revno + return metadata.revno_to_rcs(ctx.start) + tag_helper(args, "tag", + tag_set_validate, + backend.delete_tag, backend.set_tag) def branch_method(*args): "Inspect, create, and delete branches." - tag_helper(args, "branch", backend.delete_branch, backend.set_branch) + 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): + backend.create_branch(metadata.new_branchpoint(metadata_current())) + return None # Not ready yet + tag_helper(args, "branch", + branch_set_validate, + backend.delete_branch, backend.set_branch) def filecmd(legend, hook, args): ctx = CommandContext(legend, args, require_empty=True) -- 2.43.0