D6566: abort: added logic for of hg abort
taapas1128 (Taapas Agrawal)
phabricator at mercurial-scm.org
Thu Jul 4 11:00:47 EDT 2019
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
+ at 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
More information about the Mercurial-devel
mailing list