Patchwork D6695: transplant: added support for --abort flag

login
register
mail settings
Submitter phabricator
Date Aug. 8, 2019, 5:34 p.m.
Message ID <ddba17f79b35e8498ff7a3c1f35fb80c@localhost.localdomain>
Download mbox | patch
Permalink /patch/41232/
State Not Applicable
Headers show

Comments

phabricator - Aug. 8, 2019, 5:34 p.m.
taapas1128 updated this revision to Diff 16162.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6695?vs=16159&id=16162

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6695/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6695

AFFECTED FILES
  hgext/transplant.py
  tests/test-transplant.t

CHANGE DETAILS




To: taapas1128, #hg-reviewers
Cc: pulkit, mjpieters, mercurial-devel

Patch

diff --git a/tests/test-transplant.t b/tests/test-transplant.t
--- a/tests/test-transplant.t
+++ b/tests/test-transplant.t
@@ -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 --abort --all
+  abort: --abort 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 --abort 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 --abort
+  transplant aborted
+  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 --abort
+  abort: no transplant to abort
+  [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 --abort')
   [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 abort:       hg transplant --abort
   
   $ echo fixed > baz
   $ hg continue
   9d6d6b5a8275 transplanted as d80c49962290
   applying 1dab759070cf
   1dab759070cf transplanted to aa0ffe6bd5ae
-
   $ cd ..
 
 Issue1111: Test transplant --merge
diff --git a/hgext/transplant.py b/hgext/transplant.py
--- a/hgext/transplant.py
+++ b/hgext/transplant.py
@@ -412,6 +412,17 @@ 
             # this is kept only to reduce changes in a patch.
             pass
 
+    def abort(self, ui, repo):
+        """logic to abort an interrupted transplant"""
+        if self.canresume():
+            startctx = repo['.']
+            hg.updaterepo(repo, startctx.node(), overwrite=True)
+            ui.status(_("transplant aborted\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')),
+    ('', 'abort', False, _('abort 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('abort'):
+            if opts.get('branch') or opts.get('all') or opts.get('merge'):
+                raise error.Abort(_('--abort 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('abort'):
+            if not tp.canresume():
+                raise error.Abort(_('no transplant to abort'))
+            return tp.abort(ui, repo)
         cmdutil.checkunfinished(repo)
         cmdutil.bailifchanged(repo)
 
@@ -768,9 +789,6 @@ 
     statemod.addunfinished (
         '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")
     )
 
 # tell hggettext to extract docstrings from these functions: