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.
139 lines
2.9 KiB
139 lines
2.9 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 |
|
|
|
# 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' ' |
|
: > file1 && |
|
git add file1 && |
|
test_tick && |
|
git commit -m A && |
|
git tag A && |
|
echo 1 > file1 && |
|
test_tick && |
|
git commit -m B file1 && |
|
: > file2 && |
|
git add file2 && |
|
test_tick && |
|
git commit -m C && |
|
echo 2 > file1 && |
|
test_tick && |
|
git commit -m D file1 && |
|
: > file3 && |
|
git add file3 && |
|
test_tick && |
|
git commit -m E && |
|
git tag E && |
|
git checkout -b branch1 A && |
|
: > file4 && |
|
git add file4 && |
|
test_tick && |
|
git commit -m F && |
|
git tag F && |
|
echo 3 > file1 && |
|
test_tick && |
|
git commit -m G file1 && |
|
git tag G && |
|
: > file5 && |
|
git add file5 && |
|
test_tick && |
|
git commit -m H && |
|
git tag H && |
|
git checkout -b branch2 F && |
|
: > file6 && |
|
git add file6 && |
|
test_tick && |
|
git commit -m I && |
|
git tag I |
|
' |
|
|
|
# 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 branch1 && |
|
! git merge E && |
|
echo 23 > file1 && |
|
git add file1 && |
|
git commit -m L && |
|
git checkout branch2 && |
|
echo 3 > file1 && |
|
git commit -a -m G2 && |
|
! git merge E && |
|
echo 23 > file1 && |
|
git add file1 && |
|
git commit -m J && |
|
echo file7 > file7 && |
|
git add file7 && |
|
git commit -m K && |
|
GIT_EDITOR=: git rebase -i -p branch1 && |
|
test $(git rev-parse branch2^^) = $(git rev-parse branch1) && |
|
test "23" = "$(cat file1)" && |
|
test "" = "$(cat file6)" && |
|
test "file7" = "$(cat file7)" && |
|
|
|
git checkout branch1 && |
|
git reset --hard H && |
|
git checkout branch2 && |
|
git reset --hard I |
|
' |
|
|
|
# A - B - C - D - E |
|
# \ \ \ |
|
# F - G - H -- L \ --> L |
|
# \ | \ |
|
# I -- G2 -- J -- K I -- G2 -- K |
|
# G2 = different changes as G |
|
test_expect_success 'keep different-resolution merges with -p' ' |
|
git checkout branch1 && |
|
! git merge E && |
|
echo 23 > file1 && |
|
git add file1 && |
|
git commit -m L && |
|
git checkout branch2 && |
|
echo 4 > file1 && |
|
git commit -a -m G2 && |
|
! git merge E && |
|
echo 24 > file1 && |
|
git add file1 && |
|
git commit -m J && |
|
echo file7 > file7 && |
|
git add file7 && |
|
git commit -m K && |
|
! GIT_EDITOR=: git rebase -i -p branch1 && |
|
echo 234 > file1 && |
|
git add file1 && |
|
GIT_EDITOR=: git rebase --continue && |
|
test $(git rev-parse branch2^^^) = $(git rev-parse branch1) && |
|
test "234" = "$(cat file1)" && |
|
test "" = "$(cat file6)" && |
|
test "file7" = "$(cat file7)" && |
|
|
|
git checkout branch1 && |
|
git reset --hard H && |
|
git checkout branch2 && |
|
git reset --hard I |
|
' |
|
|
|
test_done
|
|
|