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.
95 lines
1.7 KiB
95 lines
1.7 KiB
#!/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)) || |
|
return 1 |
|
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 does not cause segfault' ' |
|
git merge F |
|
' |
|
|
|
test_done
|
|
|