@@ -99,7 +99,7 @@
def __init__(self, opname, fname, clearable, allowcommit, reportonly,
continueflag, stopflag, cmdmsg, cmdhint, statushint,
- abortfunc):
+ abortfunc, continuefunc):
self._opname = opname
self._fname = fname
self._clearable = clearable
@@ -111,6 +111,7 @@
self._cmdhint = cmdhint
self._statushint = statushint
self.abortfunc = abortfunc
+ self.continuefunc = continuefunc
def statusmsg(self):
"""returns the hint message corresponding to the command for
@@ -159,7 +160,8 @@
def addunfinished(opname, fname, clearable=False, allowcommit=False,
reportonly=False, continueflag=False, stopflag=False,
- cmdmsg="", cmdhint="", statushint="", abortfunc=None):
+ cmdmsg="", cmdhint="", statushint="", abortfunc=None,
+ continuefunc=None):
"""this registers a new command or operation to unfinishedstates
opname is the name the command or operation
fname is the file name in which data should be stored in .hg directory.
@@ -184,10 +186,12 @@
message of the format ('To continue: hg cmdname --continue'
'To abort: hg cmdname --abort') is not desired
abortfunc stores the function required to abort an unfinished state.
+ continuefunc stores the function required to finish an interrupted
+ operation.
"""
statecheckobj = _statecheck(opname, fname, clearable, allowcommit,
reportonly, continueflag, stopflag, cmdmsg,
- cmdhint, statushint, abortfunc)
+ cmdhint, statushint, abortfunc, continuefunc)
if opname == 'merge':
_unfinishedstates.append(statecheckobj)
else:
@@ -1893,6 +1893,32 @@
return 0
return 1
+@command('continue',
+ dryrunopts, helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
+ helpbasic=True)
+def continuecmd(ui, repo, **opts):
+ """finishes an interrupted operation (EXPERIMENTAL)
+
+ Finishes a multistep operation like graft, histedit, rebase, merge,
+ and unshelve if they are in an interrupted state.
+
+ use --dry-run/-n to dry run the command.
+ A new operation can be added to this by registering the operation and
+ continue logic in the unfinishedstates list under statemod.
+ """
+ dryrun = opts.get(r'dry_run')
+ contstate = cmdutil.getunfinishedstate(repo)
+ if not contstate:
+ raise error.Abort(_('no operation in progress'))
+ if not contstate.continuefunc:
+ raise error.Abort((_("%s in progress but does not support "
+ "'hg continue'") % (contstate._opname)),
+ hint=contstate.continuemsg())
+ if dryrun:
+ ui.status(_('%s in progress, will be resumed\n') % (contstate._opname))
+ return
+ return contstate.continuefunc(ui, repo)
+
@command('copy|cp',
[('A', 'after', None, _('record a copy that has already occurred')),
('f', 'force', None, _('forcibly copy over an existing managed file')),