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.
--- 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'
+
+