140 lines
2.9 KiB
Bash
140 lines
2.9 KiB
Bash
|
#!/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
|