Browse Source
The previous patch didn't parse "rebase --onto A...B" correctly when A isn't an empty string. It also tried to be careful to notice a case in which there are more than one merge bases, but forgot to give --all option to merge-base, making the test pointless. Fix these problems and add a test script to verify. Improvements to the script to parse A...B syntax was taken from review comments by Johannes Schindelin. Signed-off-by: しらいし ななこ <nanako3@lavabit.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Nanako Shiraishi
15 years ago
committed by
Junio C Hamano
2 changed files with 94 additions and 14 deletions
@ -0,0 +1,75 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
test_description='git rebase --onto A...B' |
||||||
|
|
||||||
|
. ./test-lib.sh |
||||||
|
. "$TEST_DIRECTORY/lib-rebase.sh" |
||||||
|
|
||||||
|
# Rebase only the tip commit of "topic" on merge base between "master" |
||||||
|
# and "topic". Cannot do this for "side" with "master" because there |
||||||
|
# is no single merge base. |
||||||
|
# |
||||||
|
# |
||||||
|
# F---G topic G' |
||||||
|
# / / |
||||||
|
# A---B---C---D---E master --> A---B---C---D---E |
||||||
|
# \ \ / |
||||||
|
# \ x |
||||||
|
# \ / \ |
||||||
|
# H---I---J---K side |
||||||
|
|
||||||
|
test_expect_success setup ' |
||||||
|
test_commit A && |
||||||
|
test_commit B && |
||||||
|
git branch side && |
||||||
|
test_commit C && |
||||||
|
git branch topic && |
||||||
|
git checkout side && |
||||||
|
test_commit H && |
||||||
|
git checkout master && |
||||||
|
test_tick && |
||||||
|
git merge H && |
||||||
|
git tag D && |
||||||
|
test_commit E && |
||||||
|
git checkout topic && |
||||||
|
test_commit F && |
||||||
|
test_commit G && |
||||||
|
git checkout side && |
||||||
|
test_tick && |
||||||
|
git merge C && |
||||||
|
git tag I && |
||||||
|
test_commit J && |
||||||
|
test_commit K |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'rebase --onto master...topic' ' |
||||||
|
git reset --hard && |
||||||
|
git checkout topic && |
||||||
|
git reset --hard G && |
||||||
|
|
||||||
|
git rebase --onto master...topic F && |
||||||
|
git rev-parse HEAD^1 >actual && |
||||||
|
git rev-parse C^0 >expect && |
||||||
|
test_cmp expect actual |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'rebase --onto master...' ' |
||||||
|
git reset --hard && |
||||||
|
git checkout topic && |
||||||
|
git reset --hard G && |
||||||
|
|
||||||
|
git rebase --onto master... F && |
||||||
|
git rev-parse HEAD^1 >actual && |
||||||
|
git rev-parse C^0 >expect && |
||||||
|
test_cmp expect actual |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'rebase --onto master...side' ' |
||||||
|
git reset --hard && |
||||||
|
git checkout side && |
||||||
|
git reset --hard K && |
||||||
|
|
||||||
|
test_must_fail git rebase --onto master...side J |
||||||
|
' |
||||||
|
|
||||||
|
test_done |
Loading…
Reference in new issue