-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git rebase --abort: always restore the right commit
Previously, --abort would end by git resetting to ORIG_HEAD, but some commands, such as git reset --hard (which happened in git rebase --skip, but could just as well be typed by the user), would have already modified ORIG_HEAD. Just use the orig-head we store in $dotest instead. [jc: cherry-picked from 48411d and 4947cf9 on 'master'] Signed-off-by: Mike Hommey <mh@glandium.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Mike Hommey
authored and
Junio C Hamano
committed
Mar 12, 2008
1 parent
92aeb99
commit 4201bb5
Showing
2 changed files
with
73 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
#!/bin/sh | ||
|
||
test_description='git rebase --abort tests' | ||
|
||
. ./test-lib.sh | ||
|
||
test_expect_success setup ' | ||
echo a > a && | ||
git add a && | ||
git commit -m a && | ||
git branch to-rebase && | ||
echo b > a && | ||
git commit -a -m b && | ||
echo c > a && | ||
git commit -a -m c && | ||
git checkout to-rebase && | ||
echo d > a && | ||
git commit -a -m "merge should fail on this" && | ||
echo e > a && | ||
git commit -a -m "merge should fail on this, too" && | ||
git branch pre-rebase | ||
' | ||
|
||
testrebase() { | ||
type=$1 | ||
dotest=$2 | ||
|
||
test_expect_success "rebase$type --abort" ' | ||
# Clean up the state from the previous one | ||
git reset --hard pre-rebase | ||
test_must_fail git rebase'"$type"' master && | ||
test -d '$dotest' && | ||
git rebase --abort && | ||
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) && | ||
test ! -d '$dotest' | ||
' | ||
|
||
test_expect_success "rebase$type --abort after --skip" ' | ||
# Clean up the state from the previous one | ||
git reset --hard pre-rebase | ||
test_must_fail git rebase'"$type"' master && | ||
test -d '$dotest' && | ||
test_must_fail git rebase --skip && | ||
test $(git rev-parse HEAD) = $(git rev-parse master) && | ||
git-rebase --abort && | ||
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) && | ||
test ! -d '$dotest' | ||
' | ||
|
||
test_expect_success "rebase$type --abort after --continue" ' | ||
# Clean up the state from the previous one | ||
git reset --hard pre-rebase | ||
test_must_fail git rebase'"$type"' master && | ||
test -d '$dotest' && | ||
echo c > a && | ||
echo d >> a && | ||
git add a && | ||
test_must_fail git rebase --continue && | ||
test $(git rev-parse HEAD) != $(git rev-parse master) && | ||
git rebase --abort && | ||
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) && | ||
test ! -d '$dotest' | ||
' | ||
} | ||
|
||
testrebase "" .dotest | ||
testrebase " --merge" .git/.dotest-merge | ||
|
||
test_done |