Browse Source
* do/maint-merge-recursive-fix: merge-recursive: never leave index unmerged while recursingmaint
Junio C Hamano
16 years ago
2 changed files with 101 additions and 5 deletions
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
#!/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 |
Loading…
Reference in new issue