trailer: retitle a test and correct an in-comment message
[git] / t / t7513-interpret-trailers.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2013, 2014 Christian Couder
4 #
5
6 test_description='git interpret-trailers'
7
8 . ./test-lib.sh
9
10 # When we want one trailing space at the end of each line, let's use sed
11 # to make sure that these spaces are not removed by any automatic tool.
12
13 test_expect_success 'setup' '
14         : >empty &&
15         cat >basic_message <<-\EOF &&
16                 subject
17
18                 body
19         EOF
20         cat >complex_message_body <<-\EOF &&
21                 my subject
22
23                 my body which is long
24                 and contains some special
25                 chars like : = ? !
26
27         EOF
28         sed -e "s/ Z\$/ /" >complex_message_trailers <<-\EOF &&
29                 Fixes: Z
30                 Acked-by: Z
31                 Reviewed-by: Z
32                 Signed-off-by: Z
33         EOF
34         cat >basic_patch <<-\EOF
35                 ---
36                  foo.txt | 2 +-
37                  1 file changed, 1 insertion(+), 1 deletion(-)
38
39                 diff --git a/foo.txt b/foo.txt
40                 index 0353767..1d91aa1 100644
41                 --- a/foo.txt
42                 +++ b/foo.txt
43                 @@ -1,3 +1,3 @@
44
45                 -bar
46                 +baz
47
48                 --
49                 1.9.rc0.11.ga562ddc
50
51         EOF
52 '
53
54 test_expect_success 'without config' '
55         sed -e "s/ Z\$/ /" >expected <<-\EOF &&
56
57                 ack: Peff
58                 Reviewed-by: Z
59                 Acked-by: Johan
60         EOF
61         git interpret-trailers --trailer "ack = Peff" --trailer "Reviewed-by" \
62                 --trailer "Acked-by: Johan" empty >actual &&
63         test_cmp expected actual
64 '
65
66 test_expect_success 'without config in another order' '
67         sed -e "s/ Z\$/ /" >expected <<-\EOF &&
68
69                 Acked-by: Johan
70                 Reviewed-by: Z
71                 ack: Peff
72         EOF
73         git interpret-trailers --trailer "Acked-by: Johan" --trailer "Reviewed-by" \
74                 --trailer "ack = Peff" empty >actual &&
75         test_cmp expected actual
76 '
77
78 test_expect_success '--trim-empty without config' '
79         cat >expected <<-\EOF &&
80
81                 ack: Peff
82                 Acked-by: Johan
83         EOF
84         git interpret-trailers --trim-empty --trailer ack=Peff \
85                 --trailer "Reviewed-by" --trailer "Acked-by: Johan" \
86                 --trailer "sob:" empty >actual &&
87         test_cmp expected actual
88 '
89
90 test_expect_success 'with config option on the command line' '
91         cat >expected <<-\EOF &&
92
93                 Acked-by: Johan
94                 Reviewed-by: Peff
95         EOF
96         { echo; echo "Acked-by: Johan"; } |
97         git -c "trailer.Acked-by.ifexists=addifdifferent" interpret-trailers \
98                 --trailer "Reviewed-by: Peff" --trailer "Acked-by: Johan" >actual &&
99         test_cmp expected actual
100 '
101
102 test_expect_success 'with only a title in the message' '
103         cat >expected <<-\EOF &&
104                 area: change
105
106                 Reviewed-by: Peff
107                 Acked-by: Johan
108         EOF
109         echo "area: change" |
110         git interpret-trailers --trailer "Reviewed-by: Peff" \
111                 --trailer "Acked-by: Johan" >actual &&
112         test_cmp expected actual
113 '
114
115 test_expect_success 'with config setup' '
116         git config trailer.ack.key "Acked-by: " &&
117         cat >expected <<-\EOF &&
118
119                 Acked-by: Peff
120         EOF
121         git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
122         test_cmp expected actual &&
123         git interpret-trailers --trim-empty --trailer "Acked-by = Peff" empty >actual &&
124         test_cmp expected actual &&
125         git interpret-trailers --trim-empty --trailer "Acked-by :Peff" empty >actual &&
126         test_cmp expected actual
127 '
128
129 test_expect_success 'with config setup and ":=" as separators' '
130         git config trailer.separators ":=" &&
131         git config trailer.ack.key "Acked-by= " &&
132         cat >expected <<-\EOF &&
133
134                 Acked-by= Peff
135         EOF
136         git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
137         test_cmp expected actual &&
138         git interpret-trailers --trim-empty --trailer "Acked-by= Peff" empty >actual &&
139         test_cmp expected actual &&
140         git interpret-trailers --trim-empty --trailer "Acked-by : Peff" empty >actual &&
141         test_cmp expected actual
142 '
143
144 test_expect_success 'with config setup and "%" as separators' '
145         git config trailer.separators "%" &&
146         cat >expected <<-\EOF &&
147
148                 bug% 42
149                 count% 10
150                 bug% 422
151         EOF
152         git interpret-trailers --trim-empty --trailer "bug = 42" \
153                 --trailer count%10 --trailer "test: stuff" \
154                 --trailer "bug % 422" empty >actual &&
155         test_cmp expected actual
156 '
157
158 test_expect_success 'with "%" as separators and a message with trailers' '
159         cat >special_message <<-\EOF &&
160                 Special Message
161
162                 bug% 42
163                 count% 10
164                 bug% 422
165         EOF
166         cat >expected <<-\EOF &&
167                 Special Message
168
169                 bug% 42
170                 count% 10
171                 bug% 422
172                 count% 100
173         EOF
174         git interpret-trailers --trailer count%100 \
175                 special_message >actual &&
176         test_cmp expected actual
177 '
178
179 test_expect_success 'with config setup and ":=#" as separators' '
180         git config trailer.separators ":=#" &&
181         git config trailer.bug.key "Bug #" &&
182         cat >expected <<-\EOF &&
183
184                 Bug #42
185         EOF
186         git interpret-trailers --trim-empty --trailer "bug = 42" empty >actual &&
187         test_cmp expected actual
188 '
189
190 test_expect_success 'with commit basic message' '
191         cat basic_message >expected &&
192         echo >>expected &&
193         git interpret-trailers <basic_message >actual &&
194         test_cmp expected actual
195 '
196
197 test_expect_success 'with basic patch' '
198         cat basic_message >input &&
199         cat basic_patch >>input &&
200         cat basic_message >expected &&
201         echo >>expected &&
202         cat basic_patch >>expected &&
203         git interpret-trailers <input >actual &&
204         test_cmp expected actual
205 '
206
207 test_expect_success 'with commit complex message as argument' '
208         cat complex_message_body complex_message_trailers >complex_message &&
209         cat complex_message_body >expected &&
210         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
211                 Fixes: Z
212                 Acked-by= Z
213                 Reviewed-by: Z
214                 Signed-off-by: Z
215         EOF
216         git interpret-trailers complex_message >actual &&
217         test_cmp expected actual
218 '
219
220 test_expect_success 'with 2 files arguments' '
221         cat basic_message >>expected &&
222         echo >>expected &&
223         cat basic_patch >>expected &&
224         git interpret-trailers complex_message input >actual &&
225         test_cmp expected actual
226 '
227
228 test_expect_success 'with message that has comments' '
229         cat basic_message >>message_with_comments &&
230         sed -e "s/ Z\$/ /" >>message_with_comments <<-\EOF &&
231                 # comment
232
233                 # other comment
234                 Cc: Z
235                 # yet another comment
236                 Reviewed-by: Johan
237                 Reviewed-by: Z
238                 # last comment
239
240         EOF
241         cat basic_patch >>message_with_comments &&
242         cat basic_message >expected &&
243         cat >>expected <<-\EOF &&
244                 # comment
245
246                 Reviewed-by: Johan
247                 Cc: Peff
248         EOF
249         cat basic_patch >>expected &&
250         git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
251         test_cmp expected actual
252 '
253
254 test_expect_success 'with commit complex message and trailer args' '
255         cat complex_message_body >expected &&
256         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
257                 Fixes: Z
258                 Acked-by= Z
259                 Reviewed-by: Z
260                 Signed-off-by: Z
261                 Acked-by= Peff
262                 Bug #42
263         EOF
264         git interpret-trailers --trailer "ack: Peff" \
265                 --trailer "bug: 42" <complex_message >actual &&
266         test_cmp expected actual
267 '
268
269 test_expect_success 'with complex patch, args and --trim-empty' '
270         cat complex_message >complex_patch &&
271         cat basic_patch >>complex_patch &&
272         cat complex_message_body >expected &&
273         cat >>expected <<-\EOF &&
274                 Acked-by= Peff
275                 Bug #42
276         EOF
277         cat basic_patch >>expected &&
278         git interpret-trailers --trim-empty --trailer "ack: Peff" \
279                 --trailer "bug: 42" <complex_patch >actual &&
280         test_cmp expected actual
281 '
282
283 test_expect_success 'using "where = before"' '
284         git config trailer.bug.where "before" &&
285         cat complex_message_body >expected &&
286         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
287                 Bug #42
288                 Fixes: Z
289                 Acked-by= Z
290                 Reviewed-by: Z
291                 Signed-off-by: Z
292                 Acked-by= Peff
293         EOF
294         git interpret-trailers --trailer "ack: Peff" \
295                 --trailer "bug: 42" complex_message >actual &&
296         test_cmp expected actual
297 '
298
299 test_expect_success 'using "where = after"' '
300         git config trailer.ack.where "after" &&
301         cat complex_message_body >expected &&
302         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
303                 Bug #42
304                 Fixes: Z
305                 Acked-by= Z
306                 Acked-by= Peff
307                 Reviewed-by: Z
308                 Signed-off-by: Z
309         EOF
310         git interpret-trailers --trailer "ack: Peff" \
311                 --trailer "bug: 42" complex_message >actual &&
312         test_cmp expected actual
313 '
314
315 test_expect_success 'using "where = end"' '
316         git config trailer.review.key "Reviewed-by" &&
317         git config trailer.review.where "end" &&
318         cat complex_message_body >expected &&
319         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
320                 Fixes: Z
321                 Acked-by= Z
322                 Acked-by= Peff
323                 Reviewed-by: Z
324                 Signed-off-by: Z
325                 Reviewed-by: Junio
326                 Reviewed-by: Johannes
327         EOF
328         git interpret-trailers --trailer "ack: Peff" \
329                 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
330                 complex_message >actual &&
331         test_cmp expected actual
332 '
333
334 test_expect_success 'using "where = start"' '
335         git config trailer.review.key "Reviewed-by" &&
336         git config trailer.review.where "start" &&
337         cat complex_message_body >expected &&
338         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
339                 Reviewed-by: Johannes
340                 Reviewed-by: Junio
341                 Fixes: Z
342                 Acked-by= Z
343                 Acked-by= Peff
344                 Reviewed-by: Z
345                 Signed-off-by: Z
346         EOF
347         git interpret-trailers --trailer "ack: Peff" \
348                 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
349                 complex_message >actual &&
350         test_cmp expected actual
351 '
352
353 test_expect_success 'using "where = before" for a token in the middle of the message' '
354         git config trailer.review.key "Reviewed-by:" &&
355         git config trailer.review.where "before" &&
356         cat complex_message_body >expected &&
357         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
358                 Bug #42
359                 Fixes: Z
360                 Acked-by= Z
361                 Acked-by= Peff
362                 Reviewed-by:Johan
363                 Reviewed-by:
364                 Signed-off-by: Z
365         EOF
366         git interpret-trailers --trailer "ack: Peff" --trailer "bug: 42" \
367                 --trailer "review: Johan" <complex_message >actual &&
368         test_cmp expected actual
369 '
370
371 test_expect_success 'using "where = before" and --trim-empty' '
372         cat complex_message_body >expected &&
373         cat >>expected <<-\EOF &&
374                 Bug #46
375                 Bug #42
376                 Acked-by= Peff
377                 Reviewed-by:Johan
378         EOF
379         git interpret-trailers --trim-empty --trailer "ack: Peff" \
380                 --trailer "bug: 42" --trailer "review: Johan" \
381                 --trailer "Bug: 46" <complex_message >actual &&
382         test_cmp expected actual
383 '
384
385 test_expect_success 'the default is "ifExists = addIfDifferentNeighbor"' '
386         cat complex_message_body >expected &&
387         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
388                 Bug #42
389                 Fixes: Z
390                 Acked-by= Z
391                 Acked-by= Peff
392                 Acked-by= Junio
393                 Acked-by= Peff
394                 Reviewed-by:
395                 Signed-off-by: Z
396         EOF
397         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
398                 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
399                 --trailer "ack: Peff" <complex_message >actual &&
400         test_cmp expected actual
401 '
402
403 test_expect_success 'default "ifExists" is now "addIfDifferent"' '
404         git config trailer.ifexists "addIfDifferent" &&
405         cat complex_message_body >expected &&
406         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
407                 Bug #42
408                 Fixes: Z
409                 Acked-by= Z
410                 Acked-by= Peff
411                 Acked-by= Junio
412                 Reviewed-by:
413                 Signed-off-by: Z
414         EOF
415         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
416                 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
417                 --trailer "ack: Peff" <complex_message >actual &&
418         test_cmp expected actual
419 '
420
421 test_expect_success 'using "ifExists = addIfDifferent" with "where = end"' '
422         git config trailer.ack.ifExists "addIfDifferent" &&
423         git config trailer.ack.where "end" &&
424         cat complex_message_body >expected &&
425         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
426                 Bug #42
427                 Fixes: Z
428                 Acked-by= Z
429                 Reviewed-by:
430                 Signed-off-by: Z
431                 Acked-by= Peff
432         EOF
433         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
434                 --trailer "bug: 42" --trailer "ack: Peff" \
435                 <complex_message >actual &&
436         test_cmp expected actual
437 '
438
439 test_expect_success 'using "ifExists = addIfDifferent" with "where = before"' '
440         git config trailer.ack.ifExists "addIfDifferent" &&
441         git config trailer.ack.where "before" &&
442         cat complex_message_body >expected &&
443         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
444                 Bug #42
445                 Fixes: Z
446                 Acked-by= Peff
447                 Acked-by= Z
448                 Reviewed-by:
449                 Signed-off-by: Z
450         EOF
451         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
452                 --trailer "bug: 42" --trailer "ack: Peff" \
453                 <complex_message >actual &&
454         test_cmp expected actual
455 '
456
457 test_expect_success 'using "ifExists = addIfDifferentNeighbor" with "where = end"' '
458         git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
459         git config trailer.ack.where "end" &&
460         cat complex_message_body >expected &&
461         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
462                 Bug #42
463                 Fixes: Z
464                 Acked-by= Z
465                 Reviewed-by:
466                 Signed-off-by: Z
467                 Acked-by= Peff
468                 Acked-by= Junio
469                 Tested-by: Jakub
470                 Acked-by= Junio
471                 Acked-by= Peff
472         EOF
473         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
474                 --trailer "ack: Junio" --trailer "bug: 42" \
475                 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
476                 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
477         test_cmp expected actual
478 '
479
480 test_expect_success 'using "ifExists = addIfDifferentNeighbor"  with "where = after"' '
481         git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
482         git config trailer.ack.where "after" &&
483         cat complex_message_body >expected &&
484         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
485                 Bug #42
486                 Fixes: Z
487                 Acked-by= Z
488                 Acked-by= Peff
489                 Acked-by= Junio
490                 Acked-by= Peff
491                 Reviewed-by:
492                 Signed-off-by: Z
493                 Tested-by: Jakub
494         EOF
495         git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
496                 --trailer "ack: Junio" --trailer "bug: 42" \
497                 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
498                 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
499         test_cmp expected actual
500 '
501
502 test_expect_success 'using "ifExists = addIfDifferentNeighbor" and --trim-empty' '
503         git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
504         cat complex_message_body >expected &&
505         cat >>expected <<-\EOF &&
506                 Bug #42
507                 Acked-by= Peff
508                 Acked-by= Junio
509                 Acked-by= Peff
510         EOF
511         git interpret-trailers --trim-empty --trailer "ack: Peff" \
512                 --trailer "Acked-by= Peff" --trailer "review:" \
513                 --trailer "ack: Junio" --trailer "bug: 42" \
514                 --trailer "ack: Peff" <complex_message >actual &&
515         test_cmp expected actual
516 '
517
518 test_expect_success 'using "ifExists = add" with "where = end"' '
519         git config trailer.ack.ifExists "add" &&
520         git config trailer.ack.where "end" &&
521         cat complex_message_body >expected &&
522         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
523                 Bug #42
524                 Fixes: Z
525                 Acked-by= Z
526                 Reviewed-by:
527                 Signed-off-by: Z
528                 Acked-by= Peff
529                 Acked-by= Peff
530                 Tested-by: Jakub
531                 Acked-by= Junio
532                 Tested-by: Johannes
533                 Acked-by= Peff
534         EOF
535         git interpret-trailers --trailer "ack: Peff" \
536                 --trailer "Acked-by= Peff" --trailer "review:" \
537                 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
538                 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
539                 --trailer "ack: Peff" <complex_message >actual &&
540         test_cmp expected actual
541 '
542
543 test_expect_success 'using "ifExists = add" with "where = after"' '
544         git config trailer.ack.ifExists "add" &&
545         git config trailer.ack.where "after" &&
546         cat complex_message_body >expected &&
547         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
548                 Bug #42
549                 Fixes: Z
550                 Acked-by= Z
551                 Acked-by= Peff
552                 Acked-by= Peff
553                 Acked-by= Junio
554                 Acked-by= Peff
555                 Reviewed-by:
556                 Signed-off-by: Z
557         EOF
558         git interpret-trailers --trailer "ack: Peff" \
559                 --trailer "Acked-by= Peff" --trailer "review:" \
560                 --trailer "ack: Junio" --trailer "bug: 42" \
561                 --trailer "ack: Peff" <complex_message >actual &&
562         test_cmp expected actual
563 '
564
565 test_expect_success 'using "ifExists = replace"' '
566         git config trailer.fix.key "Fixes: " &&
567         git config trailer.fix.ifExists "replace" &&
568         cat complex_message_body >expected &&
569         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
570                 Bug #42
571                 Acked-by= Z
572                 Acked-by= Junio
573                 Acked-by= Peff
574                 Reviewed-by:
575                 Signed-off-by: Z
576                 Fixes: 22
577         EOF
578         git interpret-trailers --trailer "review:" \
579                 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
580                 --trailer "bug: 42" --trailer "ack: Peff" \
581                 <complex_message >actual &&
582         test_cmp expected actual
583 '
584
585 test_expect_success 'using "ifExists = replace" with "where = after"' '
586         git config trailer.fix.where "after" &&
587         cat complex_message_body >expected &&
588         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
589                 Bug #42
590                 Fixes: 22
591                 Acked-by= Z
592                 Acked-by= Junio
593                 Acked-by= Peff
594                 Reviewed-by:
595                 Signed-off-by: Z
596         EOF
597         git interpret-trailers --trailer "review:" \
598                 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
599                 --trailer "bug: 42" --trailer "ack: Peff" \
600                 <complex_message >actual &&
601         test_cmp expected actual
602 '
603
604 test_expect_success 'using "ifExists = doNothing"' '
605         git config trailer.fix.ifExists "doNothing" &&
606         cat complex_message_body >expected &&
607         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
608                 Bug #42
609                 Fixes: Z
610                 Acked-by= Z
611                 Acked-by= Junio
612                 Acked-by= Peff
613                 Reviewed-by:
614                 Signed-off-by: Z
615         EOF
616         git interpret-trailers --trailer "review:" --trailer "fix=53" \
617                 --trailer "ack: Junio" --trailer "fix=22" \
618                 --trailer "bug: 42" --trailer "ack: Peff" \
619                 <complex_message >actual &&
620         test_cmp expected actual
621 '
622
623 test_expect_success 'the default is "ifMissing = add"' '
624         git config trailer.cc.key "Cc: " &&
625         git config trailer.cc.where "before" &&
626         cat complex_message_body >expected &&
627         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
628                 Bug #42
629                 Cc: Linus
630                 Fixes: Z
631                 Acked-by= Z
632                 Acked-by= Junio
633                 Acked-by= Peff
634                 Reviewed-by:
635                 Signed-off-by: Z
636         EOF
637         git interpret-trailers --trailer "review:" --trailer "fix=53" \
638                 --trailer "cc=Linus" --trailer "ack: Junio" \
639                 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
640                 <complex_message >actual &&
641         test_cmp expected actual
642 '
643
644 test_expect_success 'when default "ifMissing" is "doNothing"' '
645         git config trailer.ifmissing "doNothing" &&
646         cat complex_message_body >expected &&
647         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
648                 Fixes: Z
649                 Acked-by= Z
650                 Acked-by= Junio
651                 Acked-by= Peff
652                 Reviewed-by:
653                 Signed-off-by: Z
654         EOF
655         git interpret-trailers --trailer "review:" --trailer "fix=53" \
656                 --trailer "cc=Linus" --trailer "ack: Junio" \
657                 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
658                 <complex_message >actual &&
659         test_cmp expected actual &&
660         git config trailer.ifmissing "add"
661 '
662
663 test_expect_success 'using "ifMissing = add" with "where = end"' '
664         git config trailer.cc.key "Cc: " &&
665         git config trailer.cc.where "end" &&
666         git config trailer.cc.ifMissing "add" &&
667         cat complex_message_body >expected &&
668         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
669                 Bug #42
670                 Fixes: Z
671                 Acked-by= Z
672                 Acked-by= Junio
673                 Acked-by= Peff
674                 Reviewed-by:
675                 Signed-off-by: Z
676                 Cc: Linus
677         EOF
678         git interpret-trailers --trailer "review:" --trailer "fix=53" \
679                 --trailer "ack: Junio" --trailer "fix=22" \
680                 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
681                 <complex_message >actual &&
682         test_cmp expected actual
683 '
684
685 test_expect_success 'using "ifMissing = add" with "where = before"' '
686         git config trailer.cc.key "Cc: " &&
687         git config trailer.cc.where "before" &&
688         git config trailer.cc.ifMissing "add" &&
689         cat complex_message_body >expected &&
690         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
691                 Cc: Linus
692                 Bug #42
693                 Fixes: Z
694                 Acked-by= Z
695                 Acked-by= Junio
696                 Acked-by= Peff
697                 Reviewed-by:
698                 Signed-off-by: Z
699         EOF
700         git interpret-trailers --trailer "review:" --trailer "fix=53" \
701                 --trailer "ack: Junio" --trailer "fix=22" \
702                 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
703                 <complex_message >actual &&
704         test_cmp expected actual
705 '
706
707 test_expect_success 'using "ifMissing = doNothing"' '
708         git config trailer.cc.ifMissing "doNothing" &&
709         cat complex_message_body >expected &&
710         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
711                 Bug #42
712                 Fixes: Z
713                 Acked-by= Z
714                 Acked-by= Junio
715                 Acked-by= Peff
716                 Reviewed-by:
717                 Signed-off-by: Z
718         EOF
719         git interpret-trailers --trailer "review:" --trailer "fix=53" \
720                 --trailer "cc=Linus" --trailer "ack: Junio" \
721                 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
722                 <complex_message >actual &&
723         test_cmp expected actual
724 '
725
726 test_expect_success 'default "where" is now "after"' '
727         git config trailer.where "after" &&
728         git config --unset trailer.ack.where &&
729         cat complex_message_body >expected &&
730         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
731                 Bug #42
732                 Fixes: Z
733                 Acked-by= Z
734                 Acked-by= Peff
735                 Acked-by= Peff
736                 Acked-by= Junio
737                 Acked-by= Peff
738                 Reviewed-by:
739                 Signed-off-by: Z
740                 Tested-by: Jakub
741                 Tested-by: Johannes
742         EOF
743         git interpret-trailers --trailer "ack: Peff" \
744                 --trailer "Acked-by= Peff" --trailer "review:" \
745                 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
746                 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
747                 --trailer "ack: Peff" <complex_message >actual &&
748         test_cmp expected actual
749 '
750
751 test_expect_success 'with simple command' '
752         git config trailer.sign.key "Signed-off-by: " &&
753         git config trailer.sign.where "after" &&
754         git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
755         git config trailer.sign.command "echo \"A U Thor <author@example.com>\"" &&
756         cat complex_message_body >expected &&
757         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
758                 Fixes: Z
759                 Acked-by= Z
760                 Reviewed-by:
761                 Signed-off-by: Z
762                 Signed-off-by: A U Thor <author@example.com>
763         EOF
764         git interpret-trailers --trailer "review:" --trailer "fix=22" \
765                 <complex_message >actual &&
766         test_cmp expected actual
767 '
768
769 test_expect_success 'with command using commiter information' '
770         git config trailer.sign.ifExists "addIfDifferent" &&
771         git config trailer.sign.command "echo \"\$GIT_COMMITTER_NAME <\$GIT_COMMITTER_EMAIL>\"" &&
772         cat complex_message_body >expected &&
773         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
774                 Fixes: Z
775                 Acked-by= Z
776                 Reviewed-by:
777                 Signed-off-by: Z
778                 Signed-off-by: C O Mitter <committer@example.com>
779         EOF
780         git interpret-trailers --trailer "review:" --trailer "fix=22" \
781                 <complex_message >actual &&
782         test_cmp expected actual
783 '
784
785 test_expect_success 'with command using author information' '
786         git config trailer.sign.key "Signed-off-by: " &&
787         git config trailer.sign.where "after" &&
788         git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
789         git config trailer.sign.command "echo \"\$GIT_AUTHOR_NAME <\$GIT_AUTHOR_EMAIL>\"" &&
790         cat complex_message_body >expected &&
791         sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
792                 Fixes: Z
793                 Acked-by= Z
794                 Reviewed-by:
795                 Signed-off-by: Z
796                 Signed-off-by: A U Thor <author@example.com>
797         EOF
798         git interpret-trailers --trailer "review:" --trailer "fix=22" \
799                 <complex_message >actual &&
800         test_cmp expected actual
801 '
802
803 test_expect_success 'setup a commit' '
804         echo "Content of the first commit." > a.txt &&
805         git add a.txt &&
806         git commit -m "Add file a.txt"
807 '
808
809 test_expect_success 'with command using $ARG' '
810         git config trailer.fix.ifExists "replace" &&
811         git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" &&
812         FIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) &&
813         cat complex_message_body >expected &&
814         sed -e "s/ Z\$/ /" >>expected <<-EOF &&
815                 Fixes: $FIXED
816                 Acked-by= Z
817                 Reviewed-by:
818                 Signed-off-by: Z
819                 Signed-off-by: A U Thor <author@example.com>
820         EOF
821         git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
822                 <complex_message >actual &&
823         test_cmp expected actual
824 '
825
826 test_expect_success 'with failing command using $ARG' '
827         git config trailer.fix.ifExists "replace" &&
828         git config trailer.fix.command "false \$ARG" &&
829         cat complex_message_body >expected &&
830         sed -e "s/ Z\$/ /" >>expected <<-EOF &&
831                 Fixes: Z
832                 Acked-by= Z
833                 Reviewed-by:
834                 Signed-off-by: Z
835                 Signed-off-by: A U Thor <author@example.com>
836         EOF
837         git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
838                 <complex_message >actual &&
839         test_cmp expected actual
840 '
841
842 test_expect_success 'with empty tokens' '
843         git config --unset trailer.fix.command &&
844         cat >expected <<-EOF &&
845
846                 Signed-off-by: A U Thor <author@example.com>
847         EOF
848         git interpret-trailers --trailer ":" --trailer ":test" >actual <<-EOF &&
849         EOF
850         test_cmp expected actual
851 '
852
853 test_expect_success 'with command but no key' '
854         git config --unset trailer.sign.key &&
855         cat >expected <<-EOF &&
856
857                 sign: A U Thor <author@example.com>
858         EOF
859         git interpret-trailers >actual <<-EOF &&
860         EOF
861         test_cmp expected actual
862 '
863
864 test_expect_success 'with no command and no key' '
865         git config --unset trailer.review.key &&
866         cat >expected <<-EOF &&
867
868                 review: Junio
869                 sign: A U Thor <author@example.com>
870         EOF
871         git interpret-trailers --trailer "review:Junio" >actual <<-EOF &&
872         EOF
873         test_cmp expected actual
874 '
875
876 test_done