Merge branch 'maint' into master
[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_COMMITTER_NAME="Another Committer" \
39         GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #3" &&
40
41         echo "l4" >two &&
42         test_tick &&
43         GIT_COMMITTER_NAME="Another Committer" \
44         GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #4" &&
45
46         echo "l5" >two &&
47         test_tick &&
48         GIT_COMMITTER_NAME="Another Committer" \
49         GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #5" &&
50         git tag tag-l5 &&
51
52         git checkout right &&
53
54         echo "r3" >three &&
55         git add three &&
56         test_tick &&
57         git commit -a -m "Right #3" &&
58         git tag tag-r3 &&
59
60         echo "r4" >three &&
61         test_tick &&
62         git commit -a -m "Right #4" &&
63
64         echo "r5" >three &&
65         test_tick &&
66         git commit -a -m "Right #5" &&
67
68         git checkout -b long &&
69         i=0 &&
70         while test $i -lt 30
71         do
72                 test_commit $i one &&
73                 i=$(($i+1))
74         done &&
75
76         git show-branch &&
77
78         apos="'\''"
79 '
80
81 test_expect_success 'message for merging local branch' '
82         echo "Merge branch ${apos}left${apos}" >expected &&
83
84         git checkout master &&
85         git fetch . left &&
86
87         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
88         test_cmp expected actual
89 '
90
91 test_expect_success 'message for merging external branch' '
92         echo "Merge branch ${apos}left${apos} of $(pwd)" >expected &&
93
94         git checkout master &&
95         git fetch "$(pwd)" left &&
96
97         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
98         test_cmp expected actual
99 '
100
101 test_expect_success '[merge] summary/log configuration' '
102         cat >expected <<-EOF &&
103         Merge branch ${apos}left${apos}
104
105         By Another Author (3) and A U Thor (2)
106         via Another Committer
107         * left:
108           Left #5
109           Left #4
110           Left #3
111           Common #2
112           Common #1
113         EOF
114
115         git config merge.log true &&
116         test_might_fail git config --unset-all merge.summary &&
117
118         git checkout master &&
119         test_tick &&
120         git fetch . left &&
121
122         git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
123
124         test_might_fail git config --unset-all merge.log &&
125         git config merge.summary true &&
126
127         git checkout master &&
128         test_tick &&
129         git fetch . left &&
130
131         git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&
132
133         test_cmp expected actual1 &&
134         test_cmp expected actual2
135 '
136
137 test_expect_success 'setup: clear [merge] configuration' '
138         test_might_fail git config --unset-all merge.log &&
139         test_might_fail git config --unset-all merge.summary
140 '
141
142 test_expect_success 'setup FETCH_HEAD' '
143         git checkout master &&
144         test_tick &&
145         git fetch . left
146 '
147
148 test_expect_success 'merge.log=3 limits shortlog length' '
149         cat >expected <<-EOF &&
150         Merge branch ${apos}left${apos}
151
152         By Another Author (3) and A U Thor (2)
153         via Another Committer
154         * left: (5 commits)
155           Left #5
156           Left #4
157           Left #3
158           ...
159         EOF
160
161         git -c merge.log=3 fmt-merge-msg <.git/FETCH_HEAD >actual &&
162         test_cmp expected actual
163 '
164
165 test_expect_success 'merge.log=5 shows all 5 commits' '
166         cat >expected <<-EOF &&
167         Merge branch ${apos}left${apos}
168
169         By Another Author (3) and A U Thor (2)
170         via Another Committer
171         * left:
172           Left #5
173           Left #4
174           Left #3
175           Common #2
176           Common #1
177         EOF
178
179         git -c merge.log=5 fmt-merge-msg <.git/FETCH_HEAD >actual &&
180         test_cmp expected actual
181 '
182
183 test_expect_success 'merge.log=0 disables shortlog' '
184         echo "Merge branch ${apos}left${apos}" >expected
185         git -c merge.log=0 fmt-merge-msg <.git/FETCH_HEAD >actual &&
186         test_cmp expected actual
187 '
188
189 test_expect_success '--log=3 limits shortlog length' '
190         cat >expected <<-EOF &&
191         Merge branch ${apos}left${apos}
192
193         By Another Author (3) and A U Thor (2)
194         via Another Committer
195         * left: (5 commits)
196           Left #5
197           Left #4
198           Left #3
199           ...
200         EOF
201
202         git fmt-merge-msg --log=3 <.git/FETCH_HEAD >actual &&
203         test_cmp expected actual
204 '
205
206 test_expect_success '--log=5 shows all 5 commits' '
207         cat >expected <<-EOF &&
208         Merge branch ${apos}left${apos}
209
210         By Another Author (3) and A U Thor (2)
211         via Another Committer
212         * left:
213           Left #5
214           Left #4
215           Left #3
216           Common #2
217           Common #1
218         EOF
219
220         git fmt-merge-msg --log=5 <.git/FETCH_HEAD >actual &&
221         test_cmp expected actual
222 '
223
224 test_expect_success '--no-log disables shortlog' '
225         echo "Merge branch ${apos}left${apos}" >expected &&
226         git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
227         test_cmp expected actual
228 '
229
230 test_expect_success '--log=0 disables shortlog' '
231         echo "Merge branch ${apos}left${apos}" >expected &&
232         git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
233         test_cmp expected actual
234 '
235
236 test_expect_success 'fmt-merge-msg -m' '
237         echo "Sync with left" >expected &&
238         cat >expected.log <<-EOF &&
239         Sync with left
240
241         By Another Author (3) and A U Thor (2)
242         via Another Committer
243         * ${apos}left${apos} of $(pwd):
244           Left #5
245           Left #4
246           Left #3
247           Common #2
248           Common #1
249         EOF
250
251         test_might_fail git config --unset merge.log &&
252         test_might_fail git config --unset merge.summary &&
253         git checkout master &&
254         git fetch "$(pwd)" left &&
255         git fmt-merge-msg -m "Sync with left" <.git/FETCH_HEAD >actual &&
256         git fmt-merge-msg --log -m "Sync with left" \
257                                         <.git/FETCH_HEAD >actual.log &&
258         git config merge.log true &&
259         git fmt-merge-msg -m "Sync with left" \
260                                         <.git/FETCH_HEAD >actual.log-config &&
261         git fmt-merge-msg --no-log -m "Sync with left" \
262                                         <.git/FETCH_HEAD >actual.nolog &&
263
264         test_cmp expected actual &&
265         test_cmp expected.log actual.log &&
266         test_cmp expected.log actual.log-config &&
267         test_cmp expected actual.nolog
268 '
269
270 test_expect_success 'setup: expected shortlog for two branches' '
271         cat >expected <<-EOF
272         Merge branches ${apos}left${apos} and ${apos}right${apos}
273
274         By Another Author (3) and A U Thor (2)
275         via Another Committer
276         * left:
277           Left #5
278           Left #4
279           Left #3
280           Common #2
281           Common #1
282
283         * right:
284           Right #5
285           Right #4
286           Right #3
287           Common #2
288           Common #1
289         EOF
290 '
291
292 test_expect_success 'shortlog for two branches' '
293         git config merge.log true &&
294         test_might_fail git config --unset-all merge.summary &&
295         git checkout master &&
296         test_tick &&
297         git fetch . left right &&
298         git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
299
300         test_might_fail git config --unset-all merge.log &&
301         git config merge.summary true &&
302         git checkout master &&
303         test_tick &&
304         git fetch . left right &&
305         git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&
306
307         git config merge.log yes &&
308         test_might_fail git config --unset-all merge.summary &&
309         git checkout master &&
310         test_tick &&
311         git fetch . left right &&
312         git fmt-merge-msg <.git/FETCH_HEAD >actual3 &&
313
314         test_might_fail git config --unset-all merge.log &&
315         git config merge.summary yes &&
316         git checkout master &&
317         test_tick &&
318         git fetch . left right &&
319         git fmt-merge-msg <.git/FETCH_HEAD >actual4 &&
320
321         test_cmp expected actual1 &&
322         test_cmp expected actual2 &&
323         test_cmp expected actual3 &&
324         test_cmp expected actual4
325 '
326
327 test_expect_success 'merge-msg -F' '
328         test_might_fail git config --unset-all merge.log &&
329         git config merge.summary yes &&
330         git checkout master &&
331         test_tick &&
332         git fetch . left right &&
333         git fmt-merge-msg -F .git/FETCH_HEAD >actual &&
334         test_cmp expected actual
335 '
336
337 test_expect_success 'merge-msg -F in subdirectory' '
338         test_might_fail git config --unset-all merge.log &&
339         git config merge.summary yes &&
340         git checkout master &&
341         test_tick &&
342         git fetch . left right &&
343         mkdir sub &&
344         cp .git/FETCH_HEAD sub/FETCH_HEAD &&
345         (
346                 cd sub &&
347                 git fmt-merge-msg -F FETCH_HEAD >../actual
348         ) &&
349         test_cmp expected actual
350 '
351
352 test_expect_success 'merge-msg with nothing to merge' '
353         test_might_fail git config --unset-all merge.log &&
354         git config merge.summary yes &&
355
356         >empty &&
357
358         (
359                 cd remote &&
360                 git checkout -b unrelated &&
361                 test_tick &&
362                 git fetch origin &&
363                 git fmt-merge-msg <.git/FETCH_HEAD >../actual
364         ) &&
365
366         test_cmp empty actual
367 '
368
369 test_expect_success 'merge-msg tag' '
370         cat >expected <<-EOF &&
371         Merge tag ${apos}tag-r3${apos}
372
373         * tag ${apos}tag-r3${apos}:
374           Right #3
375           Common #2
376           Common #1
377         EOF
378
379         test_might_fail git config --unset-all merge.log &&
380         git config merge.summary yes &&
381
382         git checkout master &&
383         test_tick &&
384         git fetch . tag tag-r3 &&
385
386         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
387         test_cmp expected actual
388 '
389
390 test_expect_success 'merge-msg two tags' '
391         cat >expected <<-EOF &&
392         Merge tags ${apos}tag-r3${apos} and ${apos}tag-l5${apos}
393
394         * tag ${apos}tag-r3${apos}:
395           Right #3
396           Common #2
397           Common #1
398
399         By Another Author (3) and A U Thor (2)
400         via Another Committer
401         * tag ${apos}tag-l5${apos}:
402           Left #5
403           Left #4
404           Left #3
405           Common #2
406           Common #1
407         EOF
408
409         test_might_fail git config --unset-all merge.log &&
410         git config merge.summary yes &&
411
412         git checkout master &&
413         test_tick &&
414         git fetch . tag tag-r3 tag tag-l5 &&
415
416         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
417         test_cmp expected actual
418 '
419
420 test_expect_success 'merge-msg tag and branch' '
421         cat >expected <<-EOF &&
422         Merge branch ${apos}left${apos}, tag ${apos}tag-r3${apos}
423
424         * tag ${apos}tag-r3${apos}:
425           Right #3
426           Common #2
427           Common #1
428
429         By Another Author (3) and A U Thor (2)
430         via Another Committer
431         * left:
432           Left #5
433           Left #4
434           Left #3
435           Common #2
436           Common #1
437         EOF
438
439         test_might_fail git config --unset-all merge.log &&
440         git config merge.summary yes &&
441
442         git checkout master &&
443         test_tick &&
444         git fetch . tag tag-r3 left &&
445
446         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
447         test_cmp expected actual
448 '
449
450 test_expect_success 'merge-msg lots of commits' '
451         {
452                 cat <<-EOF &&
453                 Merge branch ${apos}long${apos}
454
455                 * long: (35 commits)
456                 EOF
457
458                 i=29 &&
459                 while test $i -gt 9
460                 do
461                         echo "  $i" &&
462                         i=$(($i-1))
463                 done &&
464                 echo "  ..."
465         } >expected &&
466
467         git checkout master &&
468         test_tick &&
469         git fetch . long &&
470
471         git fmt-merge-msg <.git/FETCH_HEAD >actual &&
472         test_cmp expected actual
473 '
474
475 test_done