# HG changeset patch # User Stefano Tortarolo # Date 1320618933 -3600 # Node ID 3411a83e232ae0c4f0733fba0ecec4d7885c0f1f # Parent e1005da0ae04520fb28cbd91bfea0ad99618726b 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 -r e1005da0ae04 -r 3411a83e232a hgext/rebase.py --- 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: diff -r e1005da0ae04 -r 3411a83e232a tests/test-rebase-detach.t --- 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' + +