taapas1128 edited the summary of this revision. taapas1128 retitled this revision from "abort: first prototype of hg abort" to "abort: added logic for of hg abort". taapas1128 updated this revision to Diff 15750.
REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D6566?vs=15731&id=15750 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D6566/new/ REVISION DETAIL https://phab.mercurial-scm.org/D6566 AFFECTED FILES mercurial/commands.py mercurial/state.py tests/test-commandserver.t tests/test-completion.t tests/test-globalopts.t tests/test-help-hide.t tests/test-help.t tests/test-hgweb-json.t CHANGE DETAILS diff --git a/tests/test-hgweb-json.t b/tests/test-hgweb-json.t --- a/tests/test-hgweb-json.t +++ b/tests/test-hgweb-json.t @@ -1875,6 +1875,10 @@ { "earlycommands": [ { + "summary": "abort an unfinished operation", + "topic": "abort" + }, + { "summary": "add the specified files on the next commit", "topic": "add" }, diff --git a/tests/test-help.t b/tests/test-help.t --- a/tests/test-help.t +++ b/tests/test-help.t @@ -5,6 +5,7 @@ basic commands: + abort abort an unfinished operation add add the specified files on the next commit annotate show changeset information by line for each file clone make a copy of an existing repository @@ -26,6 +27,7 @@ (use 'hg help' for the full list of commands or 'hg -v' for details) $ hg -q + abort abort an unfinished operation add add the specified files on the next commit annotate show changeset information by line for each file clone make a copy of an existing repository @@ -73,6 +75,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory @@ -201,6 +204,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory @@ -402,6 +406,7 @@ basic commands: + abort abort an unfinished operation add add the specified files on the next commit annotate, blame show changeset information by line for each file @@ -2353,6 +2358,13 @@ <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr> <tr><td> + <a href="/help/abort"> + abort + </a> + </td><td> + abort an unfinished operation + </td></tr> + <tr><td> <a href="/help/add"> add </a> diff --git a/tests/test-help-hide.t b/tests/test-help-hide.t --- a/tests/test-help-hide.t +++ b/tests/test-help-hide.t @@ -21,6 +21,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory @@ -157,6 +158,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory diff --git a/tests/test-globalopts.t b/tests/test-globalopts.t --- a/tests/test-globalopts.t +++ b/tests/test-globalopts.t @@ -317,6 +317,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory @@ -449,6 +450,7 @@ Change manipulation: + abort abort an unfinished operation backout reverse effect of earlier changeset graft copy changes from other branches onto the current branch merge merge another revision into working directory diff --git a/tests/test-completion.t b/tests/test-completion.t --- a/tests/test-completion.t +++ b/tests/test-completion.t @@ -1,5 +1,6 @@ Show all commands except debug commands $ hg debugcomplete + abort add addremove annotate @@ -59,6 +60,7 @@ Show all commands that start with "a" $ hg debugcomplete a + abort add addremove annotate @@ -235,6 +237,7 @@ Show all commands + options $ hg debugcommands + abort: no-backup, dry-run add: include, exclude, subrepos, dry-run addremove: similarity, subrepos, include, exclude, dry-run annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, include, exclude, template diff --git a/tests/test-commandserver.t b/tests/test-commandserver.t --- a/tests/test-commandserver.t +++ b/tests/test-commandserver.t @@ -62,6 +62,7 @@ basic commands: + abort abort an unfinished operation add add the specified files on the next commit annotate show changeset information by line for each file clone make a copy of an existing repository diff --git a/mercurial/state.py b/mercurial/state.py --- a/mercurial/state.py +++ b/mercurial/state.py @@ -98,7 +98,8 @@ """ def __init__(self, opname, fname, clearable, allowcommit, reportonly, - continueflag, stopflag, cmdmsg, cmdhint, statushint): + continueflag, stopflag, cmdmsg, cmdhint, statushint, + abortfunc): self._opname = opname self._fname = fname self._clearable = clearable @@ -109,6 +110,7 @@ self._cmdmsg = cmdmsg self._cmdhint = cmdhint self._statushint = statushint + self.abortfunc = abortfunc def statusmsg(self): """returns the hint message corresponding to the command for @@ -157,7 +159,7 @@ def addunfinished(opname, fname, clearable=False, allowcommit=False, reportonly=False, continueflag=False, stopflag=False, - cmdmsg="", cmdhint="", statushint=""): + cmdmsg="", cmdhint="", statushint="", abortfunc=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. @@ -181,10 +183,11 @@ statushint is used to pass a different status message in case standard 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. """ statecheckobj = _statecheck(opname, fname, clearable, allowcommit, reportonly, continueflag, stopflag, cmdmsg, - cmdhint, statushint) + cmdhint, statushint, abortfunc) if opname == 'merge': _unfinishedstates.append(statecheckobj) else: diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -132,6 +132,39 @@ # Commands start here, listed alphabetically +@command('abort', + [('', 'no-backup', False, _('do not save backup copies of files')), + ] + dryrunopts, helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, + helpbasic=True) +def abort(ui, repo, **opts): + """abort an unfinished operation + + Aborts an multistep operation like graft, histedit, rebase, merge, + and unshelve if they are in an unfinished state. + + use --dry-run/-n to dry run the command. + use --no-backup when no backup copies of files are needed when an + operation is aborted. + 'hg abort --no-backup --dry-run' can be used. In such cases dry + run will be given priority. + A new operation can be added to this by registering the operation and + abort logic in the unfinishedstates list under statemod. + """ + abortstate = None + dryrun = opts.get('dry_run') + for state in statemod._unfinishedstates: + if state.isunfinished(repo): + abortstate = state + break + if not abortstate: + raise error.Abort(_('no operation in progress')) + if not abortstate.abortfunc: + raise error.Abort((_("%s does not support 'hg abort'") % + (abortstate._opname)), hint=abortstate.hint()) + if dryrun: + ui.status(_('aborting %s\n') % (abortstate._opname)) + return abortstate.abortfunc(ui, repo, **opts) + @command('add', walkopts + subrepoopts + dryrunopts, _('[OPTION]... [FILE]...'), To: taapas1128, #hg-reviewers Cc: pulkit, martinvonz, mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel