]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3031-merge-criscross.sh
hashmap_entry: remove first member requirement from docs
[thirdparty/git.git] / t / t3031-merge-criscross.sh
CommitLineData
bf74106a
DO
1#!/bin/sh
2
3test_description='merge-recursive backend test'
4
5. ./test-lib.sh
6
7# A <- create some files
8# / \
9# B C <- cause rename/delete conflicts between B and C
10# / \
11# |\ /|
12# | D E |
13# | \ / |
14# | X |
15# | / \ |
16# | / \ |
17# |/ \|
18# F G <- merge E into B, D into C
19# \ /
20# \ /
21# \ /
22# H <- recursive merge crashes
23#
24
25# initialize
26test_expect_success 'setup repo with criss-cross history' '
27 mkdir data &&
28
29 # create a bunch of files
30 n=1 &&
31 while test $n -le 10
32 do
33 echo $n > data/$n &&
34 n=$(($n+1)) ||
e6821d09 35 return 1
bf74106a
DO
36 done &&
37
38 # check them in
39 git add data &&
40 git commit -m A &&
41 git branch A &&
42
43 # a file in one branch
44 git checkout -b B A &&
45 git rm data/9 &&
46 git add data &&
47 git commit -m B &&
48
49 # with a branch off of it
50 git branch D &&
51
52 # put some commits on D
53 git checkout D &&
54 echo testD > data/testD &&
55 git add data &&
56 git commit -m D &&
57
58 # back up to the top, create another branch and cause
59 # a rename conflict with the file we deleted earlier
60 git checkout -b C A &&
61 git mv data/9 data/new-9 &&
62 git add data &&
63 git commit -m C &&
64
65 # with a branch off of it
66 git branch E &&
67
68 # put a commit on E
69 git checkout E &&
70 echo testE > data/testE &&
71 git add data &&
72 git commit -m E &&
73
74 # now, merge E into B
75 git checkout B &&
76 test_must_fail git merge E &&
77 # force-resolve
78 git add data &&
79 git commit -m F &&
80 git branch F &&
81
82 # and merge D into C
83 git checkout C &&
84 test_must_fail git merge D &&
85 # force-resolve
86 git add data &&
87 git commit -m G &&
88 git branch G
89'
90
69885ab0 91test_expect_success 'recursive merge between F and G does not cause segfault' '
bf74106a
DO
92 git merge F
93'
94
95test_done