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