Mercurial > hg-stable
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' + +