You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.1 KiB
90 lines
2.1 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2008 Stephen Haberman |
|
# |
|
|
|
test_description='git rebase preserve merges |
|
|
|
This test runs git rebase with preserve merges and ensures commits |
|
dropped by the --cherry-pick flag have their childrens parents |
|
rewritten. |
|
' |
|
. ./test-lib.sh |
|
|
|
if ! test_have_prereq REBASE_P; then |
|
skip_all='skipping git rebase -p tests, as asked for' |
|
test_done |
|
fi |
|
|
|
# set up two branches like this: |
|
# |
|
# A - B - C - D - E |
|
# \ |
|
# F - G - H |
|
# \ |
|
# I |
|
# |
|
# where B, D and G touch the same file. |
|
|
|
test_expect_success 'setup' ' |
|
test_commit A file1 && |
|
test_commit B file1 1 && |
|
test_commit C file2 && |
|
test_commit D file1 2 && |
|
test_commit E file3 && |
|
git checkout A && |
|
test_commit F file4 && |
|
test_commit G file1 3 && |
|
test_commit H file5 && |
|
git checkout F && |
|
test_commit I file6 |
|
' |
|
|
|
# A - B - C - D - E |
|
# \ \ \ |
|
# F - G - H -- L \ --> L |
|
# \ | \ |
|
# I -- G2 -- J -- K I -- K |
|
# G2 = same changes as G |
|
test_expect_success 'skip same-resolution merges with -p' ' |
|
git checkout H && |
|
test_must_fail git merge E && |
|
test_commit L file1 23 && |
|
git checkout I && |
|
test_commit G2 file1 3 && |
|
test_must_fail git merge E && |
|
test_commit J file1 23 && |
|
test_commit K file7 file7 && |
|
git rebase -i -p L && |
|
test $(git rev-parse HEAD^^) = $(git rev-parse L) && |
|
test "23" = "$(cat file1)" && |
|
test "I" = "$(cat file6)" && |
|
test "file7" = "$(cat file7)" |
|
' |
|
|
|
# A - B - C - D - E |
|
# \ \ \ |
|
# F - G - H -- L2 \ --> L2 |
|
# \ | \ |
|
# I -- G3 --- J2 -- K2 I -- G3 -- K2 |
|
# G2 = different changes as G |
|
test_expect_success 'keep different-resolution merges with -p' ' |
|
git checkout H && |
|
test_must_fail git merge E && |
|
test_commit L2 file1 23 && |
|
git checkout I && |
|
test_commit G3 file1 4 && |
|
test_must_fail git merge E && |
|
test_commit J2 file1 24 && |
|
test_commit K2 file7 file7 && |
|
test_must_fail git rebase -i -p L2 && |
|
echo 234 > file1 && |
|
git add file1 && |
|
git rebase --continue && |
|
test $(git rev-parse HEAD^^^) = $(git rev-parse L2) && |
|
test "234" = "$(cat file1)" && |
|
test "I" = "$(cat file6)" && |
|
test "file7" = "$(cat file7)" |
|
' |
|
|
|
test_done
|
|
|