D6566: abort: added logic for of hg abort
taapas1128 (Taapas Agrawal)
phabricator at mercurial-scm.org
Mon Jul 8 18:19:55 UTC 2019
taapas1128 edited the summary of this revision.
taapas1128 updated this revision to Diff 15802.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6566?vs=15777&id=15802
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-blackbox.t
tests/test-completion.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(EXPERIMENTAL)",
+ "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
@@ -402,6 +402,7 @@
basic commands:
+ abort abort an unfinished operation(EXPERIMENTAL)
add add the specified files on the next commit
annotate, blame
show changeset information by line for each file
@@ -2353,6 +2354,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(EXPERIMENTAL)
+ </td></tr>
+ <tr><td>
<a href="/help/add">
add
</a>
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: 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-blackbox.t b/tests/test-blackbox.t
--- a/tests/test-blackbox.t
+++ b/tests/test-blackbox.t
@@ -7,7 +7,7 @@
> @command(b'crash', [], b'hg crash')
> def crash(ui, *args, **kwargs):
> raise Exception("oops")
- > @command(b'abort', [], b'hg abort')
+ > @command(b'abortcmd', [], b'hg abortcmd')
> def abort(ui, *args, **kwargs):
> raise error.Abort(b"oops")
> EOF
@@ -52,10 +52,10 @@
abort exit code
$ rm ./.hg/blackbox.log
- $ hg abort 2> /dev/null
+ $ hg abortcmd 2> /dev/null
[255]
$ hg blackbox -l 2
- 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> abort exited 255 after * seconds (glob)
+ 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> abortcmd exited 255 after * seconds (glob)
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> blackbox -l 2
unhandled exception
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,31 @@
# Commands start here, listed alphabetically
+ at command('abort',
+ dryrunopts, helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
+ helpbasic=True)
+def abort(ui, repo, **opts):
+ """abort an unfinished operation(EXPERIMENTAL)
+
+ Aborts a 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.
+ A new operation can be added to this by registering the operation and
+ abort logic in the unfinishedstates list under statemod.
+ """
+ dryrun = opts.get(r'dry_run')
+ abortstate = cmdutil.getunfinishedstate(repo)
+ 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(_('%s in progress, will be aborted\n') % (abortstate._opname))
+ return
+ return abortstate.abortfunc(ui, repo, **opts)
+
@command('add',
walkopts + subrepoopts + dryrunopts,
_('[OPTION]... [FILE]...'),
To: taapas1128, #hg-reviewers
Cc: pulkit, martinvonz, mercurial-devel
More information about the Mercurial-devel
mailing list