[PATCH STABLE] rebase: treat nullmerge as a special case in rebasestate (issue3046)

Stefano Tortarolo stefano.tortarolo at gmail.com
Sun Nov 6 16:45:18 CST 2011


# HG changeset patch
# User Stefano Tortarolo <stefano.tortarolo at gmail.com>
# Date 1320618933 -3600
# Branch stable
# Node ID 1f7d83466899d98403793cbecc90d7253201b067
# Parent  54c0517c0fe8af4f8851a1bbb5bb229f0e7dd853
rebase: treat nullmerge as a special case in rebasestate (issue3046)

When storing/restoring a nullmerge (-2), a 'standard' conversion was made
and an existing changeset was wrongly used.
Nullmerge should instead be treated as a special case.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -479,7 +479,10 @@
     f.write('%d\n' % int(keepbranches))
     for d, v in state.iteritems():
         oldrev = repo[d].hex()
-        newrev = repo[v].hex()
+        if v != nullmerge:
+            newrev = repo[v].hex()
+        else:
+            newrev = v
         f.write("%s:%s\n" % (oldrev, newrev))
     f.close()
     repo.ui.debug('rebase status stored\n')
@@ -512,7 +515,10 @@
                 keepbranches = bool(int(l))
             else:
                 oldrev, newrev = l.split(':')
-                state[repo[oldrev].rev()] = repo[newrev].rev()
+                if newrev != str(nullmerge):
+                    state[repo[oldrev].rev()] = repo[newrev].rev()
+                else:
+                    state[repo[oldrev].rev()] = int(newrev)
         skipped = set()
         # recompute the set of skipped revs
         if not collapse:
diff --git a/tests/test-rebase-detach.t b/tests/test-rebase-detach.t
--- a/tests/test-rebase-detach.t
+++ b/tests/test-rebase-detach.t
@@ -303,3 +303,41 @@
   |/
   o  0: 'A'
   
+  $ cd ..
+
+Ensure --continue restores a correct state (issue3046):
+  $ hg clone -q a a6
+  $ cd a6
+  $ hg up -q 3
+  $ echo 'H2' > H
+  $ hg ci -A -m 'H2'
+  adding H
+  $ hg rebase -s 8 -d 7 --detach --config ui.merge=internal:fail
+  merging H
+  warning: conflicts during merge.
+  merging H failed!
+  abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
+  [255]
+  $ hg resolve --all -t internal:local
+  $ hg rebase -c
+  saved backup bundle to $TESTTMP/a6/.hg/strip-backup/6215fafa5447-backup.hg
+  $ hg tglog
+  @  8: 'H2'
+  |
+  o  7: 'H'
+  |
+  | o  6: 'G'
+  |/|
+  o |  5: 'F'
+  | |
+  | o  4: 'E'
+  |/
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+


More information about the Mercurial-devel mailing list