Mercurial > hg-stable
changeset 11316:7fa3968004c1
rebase: --abort doesn't strip away the target changeset (issue2220)
When a changeset is skipped, rebase keeps the previous target as next
target and if the skipped cset is the first one, the recorded target is
actually the original target.
--abort did not detect this situation but simply stripped away the cset.
author | Stefano Tortarolo <stefano.tortarolo@gmail.com> |
---|---|
date | Tue, 08 Jun 2010 18:01:07 +0200 |
parents | 666b62c52767 |
children | b66e414d38b0 |
files | hgext/rebase.py tests/test-rebase-abort tests/test-rebase-abort.out |
diffstat | 3 files changed, 97 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/rebase.py Wed Jun 09 17:22:59 2010 +0200 +++ b/hgext/rebase.py Tue Jun 08 18:01:07 2010 +0200 @@ -427,7 +427,7 @@ else: # Strip from the first rebased revision merge.update(repo, repo[originalwd].rev(), False, True, False) - rebased = filter(lambda x: x > -1, state.values()) + rebased = filter(lambda x: x > -1 and x != target, state.values()) if rebased: strippoint = min(rebased) # no backup of rebased cset versions needed
--- a/tests/test-rebase-abort Wed Jun 09 17:22:59 2010 +0200 +++ b/tests/test-rebase-abort Tue Jun 08 18:01:07 2010 +0200 @@ -6,35 +6,71 @@ echo "graphlog=" >> $HGRCPATH echo "rebase=" >> $HGRCPATH -hg init a -cd a -echo 'c1' >common -hg add common -hg commit -d '0 0' -m "C1" +createrepo() { + rm -rf repo + hg init repo + cd repo + echo 'c1' >common + hg add common + hg commit -d '0 0' -m "C1" -echo 'c2' >>common -hg commit -d '1 0' -m "C2" + echo 'c2' >>common + hg commit -d '1 0' -m "C2" + + echo 'c3' >>common + hg commit -d '2 0' -m "C3" -echo 'c3' >>common -hg commit -d '2 0' -m "C3" + hg update -C 1 + echo 'l1' >>extra + hg add extra + hg commit -d '3 0' -m "L1" -hg update -C 1 -echo 'l1' >>extra -hg add extra -hg commit -d '3 0' -m "L1" + sed -e 's/c2/l2/' common > common.new + mv common.new common + hg commit -d '4 0' -m "L2" +} -sed -e 's/c2/l2/' common > common.new -mv common.new common -hg commit -d '4 0' -m "L2" - -hg glog --template '{rev}: {desc}\n' +echo +createrepo > /dev/null 2>&1 +hg --config extensions.hgext.graphlog= glog --template '{rev}: {desc}\n' echo echo '% Conflicting rebase' -hg rebase -s 3 -d 2 | cleanrebase +hg --config extensions.hgext.rebase= rebase -s 3 -d 2 | cleanrebase echo echo '% Abort' -hg rebase --abort | cleanrebase +hg --config extensions.hgext.rebase= rebase --abort | cleanrebase + +hg --config extensions.hgext.graphlog= glog --template '{rev}: {desc}\n' -hg glog --template '{rev}: {desc}\n' +createrepo() { + rm -rf repo + hg init repo + cd repo + echo "a">a + hg ci -A -m'A' + echo "b">b + hg ci -A -m'B' + echo "c">c + hg ci -A -m'C' + hg up 0 + echo "b">b + hg ci -A -m'B bis' + echo "c1">c + hg ci -A -m'C1' +} +echo +echo '% Rebase and abort without generating new changesets' + +echo +createrepo > /dev/null 2>&1 +hg --config extensions.hgext.graphlog= glog --template '{rev}:{desc|short}\n' + +hg --config extensions.hgext.rebase= rebase -b 4 -d 2 | cleanrebase + +hg --config extensions.hgext.graphlog= glog --template '{rev}:{desc|short}\n' + +hg rebase -a | cleanrebase +hg glog --template '{rev}:{desc|short}\n' +
--- a/tests/test-rebase-abort.out Wed Jun 09 17:22:59 2010 +0200 +++ b/tests/test-rebase-abort.out Tue Jun 08 18:01:07 2010 +0200 @@ -1,5 +1,4 @@ -1 files updated, 0 files merged, 0 files removed, 0 files unresolved -created new head + @ 4: L2 | o 3: L1 @@ -30,3 +29,41 @@ | o 0: C1 + +% Rebase and abort without generating new changesets + +@ 4:C1 +| +o 3:B bis +| +| o 2:C +| | +| o 1:B +|/ +o 0:A + +warning: conflicts during merge. +merging c failed! +abort: fix unresolved conflicts with hg resolve then run hg rebase --continue +merging c +@ 4:C1 +| +o 3:B bis +| +| @ 2:C +| | +| o 1:B +|/ +o 0:A + +rebase aborted +@ 4:C1 +| +o 3:B bis +| +| o 2:C +| | +| o 1:B +|/ +o 0:A +