Merge branch 'jc/diff-merge-base-multi'
[git] / t / t6200-fmt-merge-msg.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006, Junio C Hamano
4 #
5
6 test_description='fmt-merge-msg test'
7
8 . ./test-lib.sh
9
10 test_expect_success setup '
11         echo one >one &&
12         git add one &&
13         test_tick &&
14         git commit -m "Initial" &&
15
16         git clone . remote &&
17
18         echo uno >one &&
19         echo dos >two &&
20         git add two &&
21         test_tick &&
22         git commit -a -m "Second" &&
23
24         git checkout -b left &&
25
26         echo "c1" >one &&
27         test_tick &&
28         git commit -a -m "Common #1" &&
29
30         echo "c2" >one &&
31         test_tick &&
32         git commit -a -m "Common #2" &&
33
34         git branch right &&
35
36         echo "l3" >two &&
37         test_tick &&
38         git commit -a -m "Left #3" &&
39
40         echo "l4" >two &&
41         test_tick &&
42         git commit -a -m "Left #4" &&
43
44         echo "l5" >two &&
45         test_tick &&
46         git commit -a -m "Left #5" &&
47         git tag tag-l5 &&
48
49         git checkout right &&
50
51         echo "r3" >three &&
52         git add three &&
53         test_tick &&
54         git commit -a -m "Right #3" &&
55         git tag tag-r3 &&
56
57         echo "r4" >three &&
58         test_tick &&
59         git commit -a -m "Right #4" &&
60
61         echo "r5" >three &&
62         test_tick &&
63         git commit -a -m "Right #5" &&
64
65         git checkout -b long &&
66         i=0 &&
67         while test $i -lt 30
68         do
69                 test_commit $i one &&
70                 i=$(($i+1))
71         done &&
72
73         git show-branch
74 '
75
76 cat >expected <<\EOF
77 Merge branch 'left'
78 EOF
79
80 test_expect_success 'merge-msg test #1' '
81
82         git checkout master &&
83         git fetch . left &&
84
85         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
86         test_cmp expected actual
87 '
88
89 cat >expected <<EOF
90 Merge branch 'left' of $(pwd)
91 EOF
92
93 test_expect_success 'merge-msg test #2' '
94
95         git checkout master &&
96         git fetch "$(pwd)" left &&
97
98         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
99         test_cmp expected actual
100 '
101
102 cat >expected <<\EOF
103 Merge branch 'left'
104
105 * left:
106   Left #5
107   Left #4
108   Left #3
109   Common #2
110   Common #1
111 EOF
112
113 test_expect_success 'merge-msg test #3-1' '
114
115         git config --unset-all merge.log
116         git config --unset-all merge.summary
117         git config merge.log true &&
118
119         git checkout master &&
120         test_tick &&
121         git fetch . left &&
122
123         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
124         test_cmp expected actual
125 '
126
127 test_expect_success 'merge-msg test #3-2' '
128
129         git config --unset-all merge.log
130         git config --unset-all merge.summary
131         git config merge.summary true &&
132
133         git checkout master &&
134         test_tick &&
135         git fetch . left &&
136
137         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
138         test_cmp expected actual
139 '
140
141 cat >expected <<\EOF
142 Merge branches 'left' and 'right'
143
144 * left:
145   Left #5
146   Left #4
147   Left #3
148   Common #2
149   Common #1
150
151 * right:
152   Right #5
153   Right #4
154   Right #3
155   Common #2
156   Common #1
157 EOF
158
159 test_expect_success 'merge-msg test #4-1' '
160
161         git config --unset-all merge.log
162         git config --unset-all merge.summary
163         git config merge.log true &&
164
165         git checkout master &&
166         test_tick &&
167         git fetch . left right &&
168
169         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
170         test_cmp expected actual
171 '
172
173 test_expect_success 'merge-msg test #4-2' '
174
175         git config --unset-all merge.log
176         git config --unset-all merge.summary
177         git config merge.summary true &&
178
179         git checkout master &&
180         test_tick &&
181         git fetch . left right &&
182
183         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
184         test_cmp expected actual
185 '
186
187 test_expect_success 'merge-msg test #5-1' '
188
189         git config --unset-all merge.log
190         git config --unset-all merge.summary
191         git config merge.log yes &&
192
193         git checkout master &&
194         test_tick &&
195         git fetch . left right &&
196
197         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
198         test_cmp expected actual
199 '
200
201 test_expect_success 'merge-msg test #5-2' '
202
203         git config --unset-all merge.log
204         git config --unset-all merge.summary
205         git config merge.summary yes &&
206
207         git checkout master &&
208         test_tick &&
209         git fetch . left right &&
210
211         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
212         test_cmp expected actual
213 '
214
215 test_expect_success 'merge-msg -F' '
216
217         git config --unset-all merge.log
218         git config --unset-all merge.summary
219         git config merge.summary yes &&
220
221         git checkout master &&
222         test_tick &&
223         git fetch . left right &&
224
225         git fmt-merge-msg -F .git/FETCH_HEAD >actual &&
226         test_cmp expected actual
227 '
228
229 test_expect_success 'merge-msg -F in subdirectory' '
230
231         git config --unset-all merge.log
232         git config --unset-all merge.summary
233         git config merge.summary yes &&
234
235         git checkout master &&
236         test_tick &&
237         git fetch . left right &&
238         mkdir sub &&
239         cp .git/FETCH_HEAD sub/FETCH_HEAD &&
240         (
241                 cd sub &&
242                 git fmt-merge-msg -F FETCH_HEAD >../actual
243         ) &&
244         test_cmp expected actual
245 '
246
247 test_expect_success 'merge-msg with nothing to merge' '
248
249         git config --unset-all merge.log
250         git config --unset-all merge.summary
251         git config merge.summary yes &&
252
253         (
254                 cd remote &&
255                 git checkout -b unrelated &&
256                 test_tick &&
257                 git fetch origin &&
258                 git fmt-merge-msg <.git/FETCH_HEAD >../actual
259         ) &&
260
261         test_cmp /dev/null actual
262 '
263
264 cat >expected <<\EOF
265 Merge tag 'tag-r3'
266
267 * tag 'tag-r3':
268   Right #3
269   Common #2
270   Common #1
271 EOF
272
273 test_expect_success 'merge-msg tag' '
274
275         git config --unset-all merge.log
276         git config --unset-all merge.summary
277         git config merge.summary yes &&
278
279         git checkout master &&
280         test_tick &&
281         git fetch . tag tag-r3 &&
282
283         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
284         test_cmp expected actual
285 '
286
287 cat >expected <<\EOF
288 Merge tags 'tag-r3' and 'tag-l5'
289
290 * tag 'tag-r3':
291   Right #3
292   Common #2
293   Common #1
294
295 * tag 'tag-l5':
296   Left #5
297   Left #4
298   Left #3
299   Common #2
300   Common #1
301 EOF
302
303 test_expect_success 'merge-msg two tags' '
304
305         git config --unset-all merge.log
306         git config --unset-all merge.summary
307         git config merge.summary yes &&
308
309         git checkout master &&
310         test_tick &&
311         git fetch . tag tag-r3 tag tag-l5 &&
312
313         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
314         test_cmp expected actual
315 '
316
317 cat >expected <<\EOF
318 Merge branch 'left', tag 'tag-r3'
319
320 * tag 'tag-r3':
321   Right #3
322   Common #2
323   Common #1
324
325 * left:
326   Left #5
327   Left #4
328   Left #3
329   Common #2
330   Common #1
331 EOF
332
333 test_expect_success 'merge-msg tag and branch' '
334
335         git config --unset-all merge.log
336         git config --unset-all merge.summary
337         git config merge.summary yes &&
338
339         git checkout master &&
340         test_tick &&
341         git fetch . tag tag-r3 left &&
342
343         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
344         test_cmp expected actual
345 '
346
347 cat >expected <<\EOF
348 Merge branch 'long'
349
350 * long: (35 commits)
351 EOF
352
353 test_expect_success 'merge-msg lots of commits' '
354
355         git checkout master &&
356         test_tick &&
357         git fetch . long &&
358
359         i=29 &&
360         while test $i -gt 9
361         do
362                 echo "  $i" &&
363                 i=$(($i-1))
364         done >>expected &&
365         echo "  ..." >>expected
366
367         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
368         test_cmp expected actual
369 '
370
371 test_done