blob: e59b0a32d67ec86074059eee7a64c4b7bae6c145 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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)) ||
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, causes segfault' '
git merge F
'
test_done
|