transplant: added support for --stop flag
authorTaapas Agrawal <taapas2897@gmail.com>
Fri, 26 Jul 2019 01:19:43 +0530
changeset 42778 ac6121a24f27
parent 42777 5c285c8e4f98
child 42779 04c3b76fa7a3
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
hgext/transplant.py
tests/test-transplant.t
--- 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