]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7603-merge-reduce-heads.sh
hashmap: use *_entry APIs for iteration
[thirdparty/git.git] / t / t7603-merge-reduce-heads.sh
CommitLineData
f4022fa3
MV
1#!/bin/sh
2
47a528ad 3test_description='git merge
f4022fa3
MV
4
5Testing octopus merge when reducing parents to independent branches.'
6
7. ./test-lib.sh
8
9# 0 - 1
10# \ 2
11# \ 3
12# \ 4 - 5
13#
14# So 1, 2, 3 and 5 should be kept, 4 should be avoided.
15
16test_expect_success 'setup' '
17 echo c0 > c0.c &&
18 git add c0.c &&
19 git commit -m c0 &&
20 git tag c0 &&
21 echo c1 > c1.c &&
22 git add c1.c &&
23 git commit -m c1 &&
24 git tag c1 &&
25 git reset --hard c0 &&
26 echo c2 > c2.c &&
27 git add c2.c &&
28 git commit -m c2 &&
29 git tag c2 &&
30 git reset --hard c0 &&
31 echo c3 > c3.c &&
32 git add c3.c &&
33 git commit -m c3 &&
34 git tag c3 &&
35 git reset --hard c0 &&
36 echo c4 > c4.c &&
37 git add c4.c &&
38 git commit -m c4 &&
39 git tag c4 &&
40 echo c5 > c5.c &&
41 git add c5.c &&
42 git commit -m c5 &&
43 git tag c5
44'
45
46test_expect_success 'merge c1 with c2, c3, c4, c5' '
47 git reset --hard c1 &&
48 git merge c2 c3 c4 c5 &&
49 test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
50 test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
51 test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
52 test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
53 test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
54 git diff --exit-code &&
55 test -f c0.c &&
56 test -f c1.c &&
57 test -f c2.c &&
58 test -f c3.c &&
59 test -f c4.c &&
5802f81b
JH
60 test -f c5.c &&
61 git show --format=%s -s >actual &&
62 ! grep c1 actual &&
63 grep c2 actual &&
64 grep c3 actual &&
65 ! grep c4 actual &&
66 grep c5 actual
67'
68
69test_expect_success 'pull c2, c3, c4, c5 into c1' '
70 git reset --hard c1 &&
71 git pull . c2 c3 c4 c5 &&
72 test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
73 test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
74 test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
75 test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
76 test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
77 git diff --exit-code &&
78 test -f c0.c &&
79 test -f c1.c &&
80 test -f c2.c &&
81 test -f c3.c &&
82 test -f c4.c &&
83 test -f c5.c &&
84 git show --format=%s -s >actual &&
85 ! grep c1 actual &&
86 grep c2 actual &&
87 grep c3 actual &&
88 ! grep c4 actual &&
89 grep c5 actual
f4022fa3
MV
90'
91
7a172b0d
MV
92test_expect_success 'setup' '
93 for i in A B C D E
94 do
95 echo $i > $i.c &&
96 git add $i.c &&
97 git commit -m $i &&
98 git tag $i
99 done &&
100 git reset --hard A &&
101 for i in F G H I
102 do
103 echo $i > $i.c &&
104 git add $i.c &&
105 git commit -m $i &&
106 git tag $i
107 done
108'
109
110test_expect_success 'merge E and I' '
111 git reset --hard A &&
112 git merge E I
113'
114
115test_expect_success 'verify merge result' '
116 test $(git rev-parse HEAD^1) = $(git rev-parse E) &&
117 test $(git rev-parse HEAD^2) = $(git rev-parse I)
118'
119
120test_expect_success 'add conflicts' '
121 git reset --hard E &&
122 echo foo > file.c &&
123 git add file.c &&
124 git commit -m E2 &&
125 git tag E2 &&
126 git reset --hard I &&
127 echo bar >file.c &&
128 git add file.c &&
129 git commit -m I2 &&
130 git tag I2
131'
132
133test_expect_success 'merge E2 and I2, causing a conflict and resolve it' '
134 git reset --hard A &&
135 test_must_fail git merge E2 I2 &&
136 echo baz > file.c &&
137 git add file.c &&
138 git commit -m "resolve conflict"
139'
140
141test_expect_success 'verify merge result' '
142 test $(git rev-parse HEAD^1) = $(git rev-parse E2) &&
143 test $(git rev-parse HEAD^2) = $(git rev-parse I2)
144'
833abdc9
MK
145
146test_expect_success 'fast-forward to redundant refs' '
147 git reset --hard c0 &&
148 git merge c4 c5
149'
150
e78cbf8c 151test_expect_success 'verify merge result' '
833abdc9
MK
152 test $(git rev-parse HEAD) = $(git rev-parse c5)
153'
154
155test_expect_success 'merge up-to-date redundant refs' '
156 git reset --hard c5 &&
157 git merge c0 c4
158'
159
160test_expect_success 'verify merge result' '
161 test $(git rev-parse HEAD) = $(git rev-parse c5)
162'
163
f4022fa3 164test_done