D3668: graft: add a new `--stop` flag to stop interrupted graft
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Mon Jun 11 16:57:32 EDT 2018
pulkit updated this revision to Diff 9013.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D3668?vs=8923&id=9013
REVISION DETAIL
https://phab.mercurial-scm.org/D3668
AFFECTED FILES
mercurial/cmdutil.py
mercurial/commands.py
tests/test-completion.t
tests/test-graft.t
CHANGE DETAILS
diff --git a/tests/test-graft.t b/tests/test-graft.t
--- a/tests/test-graft.t
+++ b/tests/test-graft.t
@@ -244,7 +244,7 @@
$ hg ci -m 'commit interrupted graft'
abort: graft in progress
- (use 'hg graft --continue' or 'hg update' to abort)
+ (use 'hg graft --continue' or 'hg graft --stop' to abort)
[255]
Abort the graft and try committing:
@@ -1565,3 +1565,108 @@
o 3:9e887f7a939c bar to b
|
~
+
+ $ cd ..
+
+Testing the --stop flag of `hg graft` which stops the interrupted graft
+
+ $ hg init stopgraft
+ $ cd stopgraft
+ $ for ch in a b c d; do echo $ch > $ch; hg add $ch; hg ci -Aqm "added "$ch; done;
+
+ $ hg log -G
+ @ changeset: 3:9150fe93bec6
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: added d
+ |
+ o changeset: 2:155349b645be
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: added c
+ |
+ o changeset: 1:5f6d8a4bf34a
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: added b
+ |
+ o changeset: 0:9092f1db7931
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: added a
+
+ $ hg up '.^^'
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+ $ echo foo > d
+ $ hg ci -Aqm "added foo to d"
+
+ $ hg graft --stop
+ abort: no interrupted graft found
+ [255]
+
+ $ hg graft -r 3
+ grafting 3:9150fe93bec6 "added d"
+ merging d
+ warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
+ abort: unresolved conflicts, can't continue
+ (use 'hg resolve' and 'hg graft --continue')
+ [255]
+
+ $ hg graft --stop --continue
+ abort: cannot use '--continue' and '--abort' together
+ [255]
+
+ $ hg graft --stop -U
+ abort: cannot specify any other flag with '--abort'
+ [255]
+ $ hg graft --stop --rev 4
+ abort: cannot specify any other flag with '--abort'
+ [255]
+ $ hg graft --stop --log
+ abort: cannot specify any other flag with '--abort'
+ [255]
+
+ $ hg graft --stop
+ stopped the interrupted graft
+ working directory is now at a0deacecd59d
+
+ $ hg diff
+
+ $ hg log -Gr '.'
+ @ changeset: 4:a0deacecd59d
+ | tag: tip
+ ~ parent: 1:5f6d8a4bf34a
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: added foo to d
+
+ $ hg graft -r 2 -r 3
+ grafting 2:155349b645be "added c"
+ grafting 3:9150fe93bec6 "added d"
+ merging d
+ warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
+ abort: unresolved conflicts, can't continue
+ (use 'hg resolve' and 'hg graft --continue')
+ [255]
+
+ $ hg graft --stop
+ stopped the interrupted graft
+ working directory is now at 75b447541a9e
+
+ $ hg diff
+
+ $ hg log -G -T "{rev}:{node|short} {desc}"
+ @ 5:75b447541a9e added c
+ |
+ o 4:a0deacecd59d added foo to d
+ |
+ | o 3:9150fe93bec6 added d
+ | |
+ | o 2:155349b645be added c
+ |/
+ o 1:5f6d8a4bf34a added b
+ |
+ o 0:9092f1db7931 added a
+
diff --git a/tests/test-completion.t b/tests/test-completion.t
--- a/tests/test-completion.t
+++ b/tests/test-completion.t
@@ -312,7 +312,7 @@
debugwireargs: three, four, five, ssh, remotecmd, insecure
debugwireproto: localssh, peer, noreadstderr, nologhandshake, ssh, remotecmd, insecure
files: rev, print0, include, exclude, template, subrepos
- graft: rev, continue, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
+ graft: rev, continue, stop, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
grep: print0, all, text, follow, ignore-case, files-with-matches, line-number, rev, user, date, template, include, exclude
heads: rev, topo, active, closed, style, template
help: extension, command, keyword, system
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2126,6 +2126,7 @@
'graft',
[('r', 'rev', [], _('revisions to graft'), _('REV')),
('c', 'continue', False, _('resume interrupted graft')),
+ ('', 'stop', False, _('stop interrupted graft')),
('e', 'edit', False, _('invoke editor on commit messages')),
('', 'log', None, _('append graft info to log message')),
('f', 'force', False, _('force graft')),
@@ -2219,6 +2220,15 @@
cont = False
graftstate = statemod.cmdstate(repo, 'graftstate')
+ if opts.get('stop'):
+ if opts.get('continue'):
+ raise error.Abort(_("cannot use '--continue' and"
+ " '--abort' together"))
+ if any((opts.get('edit'), opts.get('log'), opts.get('user'),
+ opts.get('date'), opts.get('currentdate'),
+ opts.get('currentuser'), opts.get('rev'))):
+ raise error.Abort(_("cannot specify any other flag with '--abort'"))
+ return _stopgraft(ui, repo, graftstate)
if opts.get('continue'):
cont = True
if revs:
@@ -2395,6 +2405,17 @@
nodes = repo.vfs.read('graftstate').splitlines()
return {'nodes': nodes}
+def _stopgraft(ui, repo, graftstate):
+ """stop the interrupted graft"""
+ if not graftstate.exists():
+ raise error.Abort(_("no interrupted graft found"))
+ pctx = repo['.']
+ hg.updaterepo(repo, pctx.node(), True)
+ graftstate.delete()
+ ui.status(_("stopped the interrupted graft\n"))
+ ui.status(_("working directory is now at %s\n") % pctx.hex()[:12])
+ return 0
+
@command('grep',
[('0', 'print0', None, _('end fields with NUL')),
('', 'all', None, _('print all revisions that match')),
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3177,7 +3177,7 @@
# (state file, clearable, allowcommit, error, hint)
unfinishedstates = [
('graftstate', True, False, _('graft in progress'),
- _("use 'hg graft --continue' or 'hg update' to abort")),
+ _("use 'hg graft --continue' or 'hg graft --stop' to abort")),
('updatestate', True, False, _('last update was interrupted'),
_("use 'hg update' to get a consistent checkout"))
]
To: pulkit, #hg-reviewers
Cc: yuja, mercurial-devel
More information about the Mercurial-devel
mailing list