changeset 15464:3411a83e232a stable

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.
author Stefano Tortarolo <stefano.tortarolo@gmail.com>
date Sun, 06 Nov 2011 23:35:33 +0100
parents e1005da0ae04
children ad336e093a59
files hgext/rebase.py tests/test-rebase-detach.t
diffstat 2 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/rebase.py	Tue Nov 08 21:31:39 2011 +0100
+++ b/hgext/rebase.py	Sun Nov 06 23:35:33 2011 +0100
@@ -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:
--- a/tests/test-rebase-detach.t	Tue Nov 08 21:31:39 2011 +0100
+++ b/tests/test-rebase-detach.t	Sun Nov 06 23:35:33 2011 +0100
@@ -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'
+  
+