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
+