# HG changeset patch # User Stefano Tortarolo # Date 1276012867 -7200 # Node ID 7fa3968004c18a30ee32bcda2a407171c1631c3f # Parent 666b62c527678b4655a7c293ee636eef25a65b8f 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. diff -r 666b62c52767 -r 7fa3968004c1 hgext/rebase.py --- 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 diff -r 666b62c52767 -r 7fa3968004c1 tests/test-rebase-abort --- 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' + diff -r 666b62c52767 -r 7fa3968004c1 tests/test-rebase-abort.out --- 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 +