mirror of
https://github.com/git/git.git
synced 2024-11-28 12:34:08 +08:00
96 lines
1.7 KiB
Bash
96 lines
1.7 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
test_description='merge-recursive backend test'
|
||
|
|
||
|
. ./test-lib.sh
|
||
|
|
||
|
# A <- create some files
|
||
|
# / \
|
||
|
# B C <- cause rename/delete conflicts between B and C
|
||
|
# / \
|
||
|
# |\ /|
|
||
|
# | D E |
|
||
|
# | \ / |
|
||
|
# | X |
|
||
|
# | / \ |
|
||
|
# | / \ |
|
||
|
# |/ \|
|
||
|
# F G <- merge E into B, D into C
|
||
|
# \ /
|
||
|
# \ /
|
||
|
# \ /
|
||
|
# H <- recursive merge crashes
|
||
|
#
|
||
|
|
||
|
# initialize
|
||
|
test_expect_success 'setup repo with criss-cross history' '
|
||
|
mkdir data &&
|
||
|
|
||
|
# create a bunch of files
|
||
|
n=1 &&
|
||
|
while test $n -le 10
|
||
|
do
|
||
|
echo $n > data/$n &&
|
||
|
n=$(($n+1)) ||
|
||
|
break
|
||
|
done &&
|
||
|
|
||
|
# check them in
|
||
|
git add data &&
|
||
|
git commit -m A &&
|
||
|
git branch A &&
|
||
|
|
||
|
# a file in one branch
|
||
|
git checkout -b B A &&
|
||
|
git rm data/9 &&
|
||
|
git add data &&
|
||
|
git commit -m B &&
|
||
|
|
||
|
# with a branch off of it
|
||
|
git branch D &&
|
||
|
|
||
|
# put some commits on D
|
||
|
git checkout D &&
|
||
|
echo testD > data/testD &&
|
||
|
git add data &&
|
||
|
git commit -m D &&
|
||
|
|
||
|
# back up to the top, create another branch and cause
|
||
|
# a rename conflict with the file we deleted earlier
|
||
|
git checkout -b C A &&
|
||
|
git mv data/9 data/new-9 &&
|
||
|
git add data &&
|
||
|
git commit -m C &&
|
||
|
|
||
|
# with a branch off of it
|
||
|
git branch E &&
|
||
|
|
||
|
# put a commit on E
|
||
|
git checkout E &&
|
||
|
echo testE > data/testE &&
|
||
|
git add data &&
|
||
|
git commit -m E &&
|
||
|
|
||
|
# now, merge E into B
|
||
|
git checkout B &&
|
||
|
test_must_fail git merge E &&
|
||
|
# force-resolve
|
||
|
git add data &&
|
||
|
git commit -m F &&
|
||
|
git branch F &&
|
||
|
|
||
|
# and merge D into C
|
||
|
git checkout C &&
|
||
|
test_must_fail git merge D &&
|
||
|
# force-resolve
|
||
|
git add data &&
|
||
|
git commit -m G &&
|
||
|
git branch G
|
||
|
'
|
||
|
|
||
|
test_expect_success 'recursive merge between F and G, causes segfault' '
|
||
|
git merge F
|
||
|
'
|
||
|
|
||
|
test_done
|