hgext/rebase.py
changeset 39093 cc37009e95ca
parent 38816 2b728789edfd
child 39094 2cf0b8b830ba
--- a/hgext/rebase.py	Fri Jun 01 11:36:06 2018 +0200
+++ b/hgext/rebase.py	Wed Jul 18 00:25:52 2018 +0530
@@ -673,6 +673,7 @@
     ('D', 'detach', False, _('(DEPRECATED)')),
     ('i', 'interactive', False, _('(DEPRECATED)')),
     ('t', 'tool', '', _('specify merge tool')),
+    ('', 'stop', False, _('stop interrupted rebase')),
     ('c', 'continue', False, _('continue an interrupted rebase')),
     ('a', 'abort', False, _('abort an interrupted rebase')),
     ('', 'auto-orphans', '', _('automatically rebase orphan revisions '
@@ -803,6 +804,7 @@
     opts = pycompat.byteskwargs(opts)
     inmemory = ui.configbool('rebase', 'experimental.inmemory')
     dryrun = opts.get('dry_run')
+    stop = opts.get('stop')
     if dryrun:
         if opts.get('abort'):
             raise error.Abort(_('cannot specify both --dry-run and --abort'))
@@ -835,6 +837,27 @@
 
     if dryrun:
         return _dryrunrebase(ui, repo, opts)
+    elif stop:
+        rbsrt = rebaseruntime(repo, ui)
+        rbsrt.restorestatus()
+
+        #todo: raise error for conflicting options
+        if rbsrt.collapsef:
+            raise error.Abort(_("cannot stop in --collapse session"))
+        allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt)
+        if not (rbsrt.keepf or allowunstable):
+            raise error.Abort(_("cannot remove original changesets with"
+                                " unrebased descendants"),
+                hint=_('either enable obsmarkers to allow unstable '
+                       'revisions or use --keep to keep original '
+                       'changesets'))
+        with repo.wlock(), repo.lock():
+            if needupdate(repo, rbsrt.state):
+                # update to the current working revision
+                # to clear interrupted merge
+                hg.updaterepo(repo, rbsrt.originalwd, overwrite=True)
+            rbsrt._finishrebase()
+            return 0
     elif inmemory:
         try:
             # in-memory merge doesn't support conflicts, so if we hit any, abort