rebase: rerun a rebase on-disk if IMM merge conflicts arise
authorPhil Cohen <phillco@fb.com>
Fri, 08 Dec 2017 12:14:38 -0800
changeset 35320 d901a88891fe
parent 35319 228916ca12b5
child 35321 2e1c32a9c97b
rebase: rerun a rebase on-disk if IMM merge conflicts arise Differential Revision: https://phab.mercurial-scm.org/D1249
hgext/rebase.py
--- a/hgext/rebase.py	Thu Dec 07 22:35:43 2017 -0800
+++ b/hgext/rebase.py	Fri Dec 08 12:14:38 2017 -0800
@@ -759,6 +759,25 @@
     unresolved conflicts.
 
     """
+    if opts.get('continue') or opts.get('abort'):
+        # in-memory rebase is not compatible with resuming rebases.
+        opts['inmemory'] = False
+
+    if opts.get('inmemory', False):
+        try:
+            # in-memory merge doesn't support conflicts, so if we hit any, abort
+            # and re-run as an on-disk merge.
+            return _origrebase(ui, repo, **opts)
+        except error.InMemoryMergeConflictsError:
+            ui.warn(_('hit merge conflicts; re-running rebase without in-memory'
+                      ' merge\n'))
+            _origrebase(ui, repo, **{'abort': True})
+            opts['inmemory'] = False
+            return _origrebase(ui, repo, **opts)
+    else:
+        return _origrebase(ui, repo, **opts)
+
+def _origrebase(ui, repo, **opts):
     opts = pycompat.byteskwargs(opts)
     if 'inmemory' not in opts:
         opts['inmemory'] = False