transplant: added support for --stop flag
This adds fuctionality for `--stop` flag to `transplant`.
A new method `stop` is added to `transplanter` class
containing logic to abort transplant.
Tests are updated as shown.
Differential Revision: https://phab.mercurial-scm.org/D6695
--- a/hgext/transplant.py Thu Aug 15 20:43:25 2019 +0530
+++ b/hgext/transplant.py Fri Jul 26 01:19:43 2019 +0530
@@ -412,6 +412,17 @@
# this is kept only to reduce changes in a patch.
pass
+ def stop(self, ui, repo):
+ """logic to stop an interrupted transplant"""
+ if self.canresume():
+ startctx = repo['.']
+ hg.updaterepo(repo, startctx.node(), overwrite=True)
+ ui.status(_("stopped the interrupted transplant\n"))
+ ui.status(_("working directory is now at %s\n") %
+ startctx.hex()[:12])
+ self.unlog()
+ return 0
+
def readseries(self):
nodes = []
merges = []
@@ -559,6 +570,7 @@
_('parent to choose when transplanting merge'), _('REV')),
('e', 'edit', False, _('invoke editor on commit messages')),
('', 'log', None, _('append transplant info to log message')),
+ ('', 'stop', False, _('stop interrupted transplant')),
('c', 'continue', None, _('continue last transplant session '
'after fixing conflicts')),
('', 'filter', '',
@@ -646,6 +658,11 @@
raise error.Abort(_('--continue is incompatible with '
'--branch, --all and --merge'))
return
+ if opts.get('stop'):
+ if opts.get('branch') or opts.get('all') or opts.get('merge'):
+ raise error.Abort(_('--stop is incompatible with '
+ '--branch, --all and --merge'))
+ return
if not (opts.get('source') or revs or
opts.get('merge') or opts.get('branch')):
raise error.Abort(_('no source URL, branch revision, or revision '
@@ -676,6 +693,10 @@
if not tp.canresume():
raise error.Abort(_('no transplant to continue'))
else:
+ if opts.get('stop'):
+ if not tp.canresume():
+ raise error.Abort(_('no interrupted transplant found'))
+ return tp.stop(ui, repo)
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
@@ -769,8 +790,8 @@
'transplant', fname='transplant/journal', clearable=True,
continuefunc=continuecmd,
statushint=_('To continue: hg transplant --continue\n'
- 'To abort: hg update'),
- cmdhint=_("use 'hg transplant --continue' or 'hg update' to abort")
+ 'To stop: hg transplant --stop'),
+ cmdhint=_("use 'hg transplant --continue' or 'hg transplant --stop'")
)
# tell hggettext to extract docstrings from these functions:
--- a/tests/test-transplant.t Thu Aug 15 20:43:25 2019 +0530
+++ b/tests/test-transplant.t Fri Jul 26 01:19:43 2019 +0530
@@ -2,6 +2,7 @@
$ cat <<EOF >> $HGRCPATH
> [extensions]
> transplant=
+ > graphlog=
> EOF
#if continueflag
@@ -19,6 +20,9 @@
$ hg transplant --continue --all
abort: --continue is incompatible with --branch, --all and --merge
[255]
+ $ hg transplant --stop --all
+ abort: --stop is incompatible with --branch, --all and --merge
+ [255]
$ hg transplant --all tip
abort: --all requires a branch revision
[255]
@@ -376,7 +380,8 @@
applying 722f4667af76
722f4667af76 transplanted to 76e321915884
-transplant --continue
+
+transplant --continue and --stop behaviour
$ hg init ../tc
$ cd ../tc
@@ -416,6 +421,36 @@
$ echo foobar > foo
$ hg ci -mfoobar
created new head
+
+Repo log before transplant
+ $ hg glog
+ @ changeset: 4:e8643552fde5
+ | tag: tip
+ | parent: 0:493149fa1541
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foobar
+ |
+ | o changeset: 3:1dab759070cf
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: bar2
+ | |
+ | o changeset: 2:9d6d6b5a8275
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: bar
+ | |
+ | o changeset: 1:46ae92138f3c
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foo2
+ |
+ o changeset: 0:493149fa1541
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: foo
+
$ hg transplant 1:3
applying 46ae92138f3c
patching file foo
@@ -425,6 +460,49 @@
abort: fix up the working directory and run hg transplant --continue
[255]
+ $ hg transplant --stop
+ stopped the interrupted transplant
+ working directory is now at e8643552fde5
+Repo log after abort
+ $ hg glog
+ @ changeset: 4:e8643552fde5
+ | tag: tip
+ | parent: 0:493149fa1541
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foobar
+ |
+ | o changeset: 3:1dab759070cf
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: bar2
+ | |
+ | o changeset: 2:9d6d6b5a8275
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: bar
+ | |
+ | o changeset: 1:46ae92138f3c
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foo2
+ |
+ o changeset: 0:493149fa1541
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: foo
+
+ $ hg transplant 1:3
+ applying 46ae92138f3c
+ file added already exists
+ 1 out of 1 hunks FAILED -- saving rejects to file added.rej
+ patching file foo
+ Hunk #1 FAILED at 0
+ 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
+ patch failed to apply
+ abort: fix up the working directory and run hg transplant --continue
+ [255]
+
transplant -c shouldn't use an old changeset
$ hg up -C
@@ -436,6 +514,9 @@
abort: no transplant to continue (continueflag !)
abort: no operation in progress (no-continueflag !)
[255]
+ $ hg transplant --stop
+ abort: no interrupted transplant found
+ [255]
$ hg transplant 1
applying 46ae92138f3c
patching file foo
@@ -489,23 +570,23 @@
[255]
$ hg transplant 1:3
abort: transplant in progress
- (use 'hg transplant --continue' or 'hg update' to abort)
+ (use 'hg transplant --continue' or 'hg transplant --stop')
[255]
$ hg status -v
A bar
+ ? added.rej
? baz.rej
? foo.rej
# The repository is in an unfinished *transplant* state.
# To continue: hg transplant --continue
- # To abort: hg update
+ # To stop: hg transplant --stop
$ echo fixed > baz
$ hg continue
9d6d6b5a8275 transplanted as d80c49962290
applying 1dab759070cf
1dab759070cf transplanted to aa0ffe6bd5ae
-
$ cd ..
Issue1111: Test transplant --merge