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)
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)