Merge branch 'cc/trailers-corner-case-fix' into maint
[git/git.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 multiline title in the message' '
116 cat >expected <<-\EOF &&
117 place of
118 code: change
119
120 Reviewed-by: Peff
121 Acked-by: Johan
122 EOF
123 printf "%s\n" "place of" "code: change" |
124 git interpret-trailers --trailer "Reviewed-by: Peff" \
125 --trailer "Acked-by: Johan" >actual &&
126 test_cmp expected actual
127 '
128
129 test_expect_success 'with config setup' '
130 git config trailer.ack.key "Acked-by: " &&
131 cat >expected <<-\EOF &&
132
133 Acked-by: Peff
134 EOF
135 git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
136 test_cmp expected actual &&
137 git interpret-trailers --trim-empty --trailer "Acked-by = Peff" empty >actual &&
138 test_cmp expected actual &&
139 git interpret-trailers --trim-empty --trailer "Acked-by :Peff" empty >actual &&
140 test_cmp expected actual
141 '
142
143 test_expect_success 'with config setup and ":=" as separators' '
144 git config trailer.separators ":=" &&
145 git config trailer.ack.key "Acked-by= " &&
146 cat >expected <<-\EOF &&
147
148 Acked-by= Peff
149 EOF
150 git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
151 test_cmp expected actual &&
152 git interpret-trailers --trim-empty --trailer "Acked-by= Peff" empty >actual &&
153 test_cmp expected actual &&
154 git interpret-trailers --trim-empty --trailer "Acked-by : Peff" empty >actual &&
155 test_cmp expected actual
156 '
157
158 test_expect_success 'with config setup and "%" as separators' '
159 git config trailer.separators "%" &&
160 cat >expected <<-\EOF &&
161
162 bug% 42
163 count% 10
164 bug% 422
165 EOF
166 git interpret-trailers --trim-empty --trailer "bug = 42" \
167 --trailer count%10 --trailer "test: stuff" \
168 --trailer "bug % 422" empty >actual &&
169 test_cmp expected actual
170 '
171
172 test_expect_success 'with "%" as separators and a message with trailers' '
173 cat >special_message <<-\EOF &&
174 Special Message
175
176 bug% 42
177 count% 10
178 bug% 422
179 EOF
180 cat >expected <<-\EOF &&
181 Special Message
182
183 bug% 42
184 count% 10
185 bug% 422
186 count% 100
187 EOF
188 git interpret-trailers --trailer count%100 \
189 special_message >actual &&
190 test_cmp expected actual
191 '
192
193 test_expect_success 'with config setup and ":=#" as separators' '
194 git config trailer.separators ":=#" &&
195 git config trailer.bug.key "Bug #" &&
196 cat >expected <<-\EOF &&
197
198 Bug #42
199 EOF
200 git interpret-trailers --trim-empty --trailer "bug = 42" empty >actual &&
201 test_cmp expected actual
202 '
203
204 test_expect_success 'with commit basic message' '
205 cat basic_message >expected &&
206 echo >>expected &&
207 git interpret-trailers <basic_message >actual &&
208 test_cmp expected actual
209 '
210
211 test_expect_success 'with basic patch' '
212 cat basic_message >input &&
213 cat basic_patch >>input &&
214 cat basic_message >expected &&
215 echo >>expected &&
216 cat basic_patch >>expected &&
217 git interpret-trailers <input >actual &&
218 test_cmp expected actual
219 '
220
221 test_expect_success 'with commit complex message as argument' '
222 cat complex_message_body complex_message_trailers >complex_message &&
223 cat complex_message_body >expected &&
224 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
225 Fixes: Z
226 Acked-by= Z
227 Reviewed-by: Z
228 Signed-off-by: Z
229 EOF
230 git interpret-trailers complex_message >actual &&
231 test_cmp expected actual
232 '
233
234 test_expect_success 'with 2 files arguments' '
235 cat basic_message >>expected &&
236 echo >>expected &&
237 cat basic_patch >>expected &&
238 git interpret-trailers complex_message input >actual &&
239 test_cmp expected actual
240 '
241
242 test_expect_success 'with message that has comments' '
243 cat basic_message >message_with_comments &&
244 sed -e "s/ Z\$/ /" >>message_with_comments <<-\EOF &&
245 # comment
246
247 # other comment
248 Cc: Z
249 # yet another comment
250 Reviewed-by: Johan
251 Reviewed-by: Z
252 # last comment
253
254 EOF
255 cat basic_patch >>message_with_comments &&
256 cat basic_message >expected &&
257 cat >>expected <<-\EOF &&
258 # comment
259
260 Reviewed-by: Johan
261 Cc: Peff
262 # last comment
263
264 EOF
265 cat basic_patch >>expected &&
266 git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
267 test_cmp expected actual
268 '
269
270 test_expect_success 'with message that has an old style conflict block' '
271 cat basic_message >message_with_comments &&
272 sed -e "s/ Z\$/ /" >>message_with_comments <<-\EOF &&
273 # comment
274
275 # other comment
276 Cc: Z
277 # yet another comment
278 Reviewed-by: Johan
279 Reviewed-by: Z
280 # last comment
281
282 Conflicts:
283
284 EOF
285 cat basic_message >expected &&
286 cat >>expected <<-\EOF &&
287 # comment
288
289 Reviewed-by: Johan
290 Cc: Peff
291 # last comment
292
293 Conflicts:
294
295 EOF
296 git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
297 test_cmp expected actual
298 '
299
300 test_expect_success 'with commit complex message and trailer args' '
301 cat complex_message_body >expected &&
302 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
303 Fixes: Z
304 Acked-by= Z
305 Reviewed-by: Z
306 Signed-off-by: Z
307 Acked-by= Peff
308 Bug #42
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 'with complex patch, args and --trim-empty' '
316 cat complex_message >complex_patch &&
317 cat basic_patch >>complex_patch &&
318 cat complex_message_body >expected &&
319 cat >>expected <<-\EOF &&
320 Acked-by= Peff
321 Bug #42
322 EOF
323 cat basic_patch >>expected &&
324 git interpret-trailers --trim-empty --trailer "ack: Peff" \
325 --trailer "bug: 42" <complex_patch >actual &&
326 test_cmp expected actual
327 '
328
329 test_expect_success 'using "where = before"' '
330 git config trailer.bug.where "before" &&
331 cat complex_message_body >expected &&
332 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
333 Bug #42
334 Fixes: Z
335 Acked-by= Z
336 Reviewed-by: Z
337 Signed-off-by: Z
338 Acked-by= Peff
339 EOF
340 git interpret-trailers --trailer "ack: Peff" \
341 --trailer "bug: 42" complex_message >actual &&
342 test_cmp expected actual
343 '
344
345 test_expect_success 'using "where = after"' '
346 git config trailer.ack.where "after" &&
347 cat complex_message_body >expected &&
348 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
349 Bug #42
350 Fixes: Z
351 Acked-by= Z
352 Acked-by= Peff
353 Reviewed-by: Z
354 Signed-off-by: Z
355 EOF
356 git interpret-trailers --trailer "ack: Peff" \
357 --trailer "bug: 42" complex_message >actual &&
358 test_cmp expected actual
359 '
360
361 test_expect_success 'using "where = end"' '
362 git config trailer.review.key "Reviewed-by" &&
363 git config trailer.review.where "end" &&
364 cat complex_message_body >expected &&
365 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
366 Fixes: Z
367 Acked-by= Z
368 Acked-by= Peff
369 Reviewed-by: Z
370 Signed-off-by: Z
371 Reviewed-by: Junio
372 Reviewed-by: Johannes
373 EOF
374 git interpret-trailers --trailer "ack: Peff" \
375 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
376 complex_message >actual &&
377 test_cmp expected actual
378 '
379
380 test_expect_success 'using "where = start"' '
381 git config trailer.review.key "Reviewed-by" &&
382 git config trailer.review.where "start" &&
383 cat complex_message_body >expected &&
384 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
385 Reviewed-by: Johannes
386 Reviewed-by: Junio
387 Fixes: Z
388 Acked-by= Z
389 Acked-by= Peff
390 Reviewed-by: Z
391 Signed-off-by: Z
392 EOF
393 git interpret-trailers --trailer "ack: Peff" \
394 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
395 complex_message >actual &&
396 test_cmp expected actual
397 '
398
399 test_expect_success 'using "where = before" for a token in the middle of the message' '
400 git config trailer.review.key "Reviewed-by:" &&
401 git config trailer.review.where "before" &&
402 cat complex_message_body >expected &&
403 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
404 Bug #42
405 Fixes: Z
406 Acked-by= Z
407 Acked-by= Peff
408 Reviewed-by:Johan
409 Reviewed-by:
410 Signed-off-by: Z
411 EOF
412 git interpret-trailers --trailer "ack: Peff" --trailer "bug: 42" \
413 --trailer "review: Johan" <complex_message >actual &&
414 test_cmp expected actual
415 '
416
417 test_expect_success 'using "where = before" and --trim-empty' '
418 cat complex_message_body >expected &&
419 cat >>expected <<-\EOF &&
420 Bug #46
421 Bug #42
422 Acked-by= Peff
423 Reviewed-by:Johan
424 EOF
425 git interpret-trailers --trim-empty --trailer "ack: Peff" \
426 --trailer "bug: 42" --trailer "review: Johan" \
427 --trailer "Bug: 46" <complex_message >actual &&
428 test_cmp expected actual
429 '
430
431 test_expect_success 'the default is "ifExists = addIfDifferentNeighbor"' '
432 cat complex_message_body >expected &&
433 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
434 Bug #42
435 Fixes: Z
436 Acked-by= Z
437 Acked-by= Peff
438 Acked-by= Junio
439 Acked-by= Peff
440 Reviewed-by:
441 Signed-off-by: Z
442 EOF
443 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
444 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
445 --trailer "ack: Peff" <complex_message >actual &&
446 test_cmp expected actual
447 '
448
449 test_expect_success 'default "ifExists" is now "addIfDifferent"' '
450 git config trailer.ifexists "addIfDifferent" &&
451 cat complex_message_body >expected &&
452 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
453 Bug #42
454 Fixes: Z
455 Acked-by= Z
456 Acked-by= Peff
457 Acked-by= Junio
458 Reviewed-by:
459 Signed-off-by: Z
460 EOF
461 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
462 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
463 --trailer "ack: Peff" <complex_message >actual &&
464 test_cmp expected actual
465 '
466
467 test_expect_success 'using "ifExists = addIfDifferent" with "where = end"' '
468 git config trailer.ack.ifExists "addIfDifferent" &&
469 git config trailer.ack.where "end" &&
470 cat complex_message_body >expected &&
471 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
472 Bug #42
473 Fixes: Z
474 Acked-by= Z
475 Reviewed-by:
476 Signed-off-by: Z
477 Acked-by= Peff
478 EOF
479 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
480 --trailer "bug: 42" --trailer "ack: Peff" \
481 <complex_message >actual &&
482 test_cmp expected actual
483 '
484
485 test_expect_success 'using "ifExists = addIfDifferent" with "where = before"' '
486 git config trailer.ack.ifExists "addIfDifferent" &&
487 git config trailer.ack.where "before" &&
488 cat complex_message_body >expected &&
489 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
490 Bug #42
491 Fixes: Z
492 Acked-by= Peff
493 Acked-by= Z
494 Reviewed-by:
495 Signed-off-by: Z
496 EOF
497 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
498 --trailer "bug: 42" --trailer "ack: Peff" \
499 <complex_message >actual &&
500 test_cmp expected actual
501 '
502
503 test_expect_success 'using "ifExists = addIfDifferentNeighbor" with "where = end"' '
504 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
505 git config trailer.ack.where "end" &&
506 cat complex_message_body >expected &&
507 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
508 Bug #42
509 Fixes: Z
510 Acked-by= Z
511 Reviewed-by:
512 Signed-off-by: Z
513 Acked-by= Peff
514 Acked-by= Junio
515 Tested-by: Jakub
516 Acked-by= Junio
517 Acked-by= Peff
518 EOF
519 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
520 --trailer "ack: Junio" --trailer "bug: 42" \
521 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
522 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
523 test_cmp expected actual
524 '
525
526 test_expect_success 'using "ifExists = addIfDifferentNeighbor" with "where = after"' '
527 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
528 git config trailer.ack.where "after" &&
529 cat complex_message_body >expected &&
530 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
531 Bug #42
532 Fixes: Z
533 Acked-by= Z
534 Acked-by= Peff
535 Acked-by= Junio
536 Acked-by= Peff
537 Reviewed-by:
538 Signed-off-by: Z
539 Tested-by: Jakub
540 EOF
541 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
542 --trailer "ack: Junio" --trailer "bug: 42" \
543 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
544 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
545 test_cmp expected actual
546 '
547
548 test_expect_success 'using "ifExists = addIfDifferentNeighbor" and --trim-empty' '
549 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
550 cat complex_message_body >expected &&
551 cat >>expected <<-\EOF &&
552 Bug #42
553 Acked-by= Peff
554 Acked-by= Junio
555 Acked-by= Peff
556 EOF
557 git interpret-trailers --trim-empty --trailer "ack: Peff" \
558 --trailer "Acked-by= Peff" --trailer "review:" \
559 --trailer "ack: Junio" --trailer "bug: 42" \
560 --trailer "ack: Peff" <complex_message >actual &&
561 test_cmp expected actual
562 '
563
564 test_expect_success 'using "ifExists = add" with "where = end"' '
565 git config trailer.ack.ifExists "add" &&
566 git config trailer.ack.where "end" &&
567 cat complex_message_body >expected &&
568 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
569 Bug #42
570 Fixes: Z
571 Acked-by= Z
572 Reviewed-by:
573 Signed-off-by: Z
574 Acked-by= Peff
575 Acked-by= Peff
576 Tested-by: Jakub
577 Acked-by= Junio
578 Tested-by: Johannes
579 Acked-by= Peff
580 EOF
581 git interpret-trailers --trailer "ack: Peff" \
582 --trailer "Acked-by= Peff" --trailer "review:" \
583 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
584 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
585 --trailer "ack: Peff" <complex_message >actual &&
586 test_cmp expected actual
587 '
588
589 test_expect_success 'using "ifExists = add" with "where = after"' '
590 git config trailer.ack.ifExists "add" &&
591 git config trailer.ack.where "after" &&
592 cat complex_message_body >expected &&
593 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
594 Bug #42
595 Fixes: Z
596 Acked-by= Z
597 Acked-by= Peff
598 Acked-by= Peff
599 Acked-by= Junio
600 Acked-by= Peff
601 Reviewed-by:
602 Signed-off-by: Z
603 EOF
604 git interpret-trailers --trailer "ack: Peff" \
605 --trailer "Acked-by= Peff" --trailer "review:" \
606 --trailer "ack: Junio" --trailer "bug: 42" \
607 --trailer "ack: Peff" <complex_message >actual &&
608 test_cmp expected actual
609 '
610
611 test_expect_success 'using "ifExists = replace"' '
612 git config trailer.fix.key "Fixes: " &&
613 git config trailer.fix.ifExists "replace" &&
614 cat complex_message_body >expected &&
615 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
616 Bug #42
617 Acked-by= Z
618 Acked-by= Junio
619 Acked-by= Peff
620 Reviewed-by:
621 Signed-off-by: Z
622 Fixes: 22
623 EOF
624 git interpret-trailers --trailer "review:" \
625 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
626 --trailer "bug: 42" --trailer "ack: Peff" \
627 <complex_message >actual &&
628 test_cmp expected actual
629 '
630
631 test_expect_success 'using "ifExists = replace" with "where = after"' '
632 git config trailer.fix.where "after" &&
633 cat complex_message_body >expected &&
634 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
635 Bug #42
636 Fixes: 22
637 Acked-by= Z
638 Acked-by= Junio
639 Acked-by= Peff
640 Reviewed-by:
641 Signed-off-by: Z
642 EOF
643 git interpret-trailers --trailer "review:" \
644 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
645 --trailer "bug: 42" --trailer "ack: Peff" \
646 <complex_message >actual &&
647 test_cmp expected actual
648 '
649
650 test_expect_success 'using "ifExists = doNothing"' '
651 git config trailer.fix.ifExists "doNothing" &&
652 cat complex_message_body >expected &&
653 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
654 Bug #42
655 Fixes: Z
656 Acked-by= Z
657 Acked-by= Junio
658 Acked-by= Peff
659 Reviewed-by:
660 Signed-off-by: Z
661 EOF
662 git interpret-trailers --trailer "review:" --trailer "fix=53" \
663 --trailer "ack: Junio" --trailer "fix=22" \
664 --trailer "bug: 42" --trailer "ack: Peff" \
665 <complex_message >actual &&
666 test_cmp expected actual
667 '
668
669 test_expect_success 'the default is "ifMissing = add"' '
670 git config trailer.cc.key "Cc: " &&
671 git config trailer.cc.where "before" &&
672 cat complex_message_body >expected &&
673 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
674 Bug #42
675 Cc: Linus
676 Fixes: Z
677 Acked-by= Z
678 Acked-by= Junio
679 Acked-by= Peff
680 Reviewed-by:
681 Signed-off-by: Z
682 EOF
683 git interpret-trailers --trailer "review:" --trailer "fix=53" \
684 --trailer "cc=Linus" --trailer "ack: Junio" \
685 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
686 <complex_message >actual &&
687 test_cmp expected actual
688 '
689
690 test_expect_success 'when default "ifMissing" is "doNothing"' '
691 git config trailer.ifmissing "doNothing" &&
692 cat complex_message_body >expected &&
693 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
694 Fixes: Z
695 Acked-by= Z
696 Acked-by= Junio
697 Acked-by= Peff
698 Reviewed-by:
699 Signed-off-by: Z
700 EOF
701 git interpret-trailers --trailer "review:" --trailer "fix=53" \
702 --trailer "cc=Linus" --trailer "ack: Junio" \
703 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
704 <complex_message >actual &&
705 test_cmp expected actual &&
706 git config trailer.ifmissing "add"
707 '
708
709 test_expect_success 'using "ifMissing = add" with "where = end"' '
710 git config trailer.cc.key "Cc: " &&
711 git config trailer.cc.where "end" &&
712 git config trailer.cc.ifMissing "add" &&
713 cat complex_message_body >expected &&
714 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
715 Bug #42
716 Fixes: Z
717 Acked-by= Z
718 Acked-by= Junio
719 Acked-by= Peff
720 Reviewed-by:
721 Signed-off-by: Z
722 Cc: Linus
723 EOF
724 git interpret-trailers --trailer "review:" --trailer "fix=53" \
725 --trailer "ack: Junio" --trailer "fix=22" \
726 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
727 <complex_message >actual &&
728 test_cmp expected actual
729 '
730
731 test_expect_success 'using "ifMissing = add" with "where = before"' '
732 git config trailer.cc.key "Cc: " &&
733 git config trailer.cc.where "before" &&
734 git config trailer.cc.ifMissing "add" &&
735 cat complex_message_body >expected &&
736 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
737 Cc: Linus
738 Bug #42
739 Fixes: Z
740 Acked-by= Z
741 Acked-by= Junio
742 Acked-by= Peff
743 Reviewed-by:
744 Signed-off-by: Z
745 EOF
746 git interpret-trailers --trailer "review:" --trailer "fix=53" \
747 --trailer "ack: Junio" --trailer "fix=22" \
748 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
749 <complex_message >actual &&
750 test_cmp expected actual
751 '
752
753 test_expect_success 'using "ifMissing = doNothing"' '
754 git config trailer.cc.ifMissing "doNothing" &&
755 cat complex_message_body >expected &&
756 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
757 Bug #42
758 Fixes: Z
759 Acked-by= Z
760 Acked-by= Junio
761 Acked-by= Peff
762 Reviewed-by:
763 Signed-off-by: Z
764 EOF
765 git interpret-trailers --trailer "review:" --trailer "fix=53" \
766 --trailer "cc=Linus" --trailer "ack: Junio" \
767 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
768 <complex_message >actual &&
769 test_cmp expected actual
770 '
771
772 test_expect_success 'default "where" is now "after"' '
773 git config trailer.where "after" &&
774 git config --unset trailer.ack.where &&
775 cat complex_message_body >expected &&
776 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
777 Bug #42
778 Fixes: Z
779 Acked-by= Z
780 Acked-by= Peff
781 Acked-by= Peff
782 Acked-by= Junio
783 Acked-by= Peff
784 Reviewed-by:
785 Signed-off-by: Z
786 Tested-by: Jakub
787 Tested-by: Johannes
788 EOF
789 git interpret-trailers --trailer "ack: Peff" \
790 --trailer "Acked-by= Peff" --trailer "review:" \
791 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
792 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
793 --trailer "ack: Peff" <complex_message >actual &&
794 test_cmp expected actual
795 '
796
797 test_expect_success 'with simple command' '
798 git config trailer.sign.key "Signed-off-by: " &&
799 git config trailer.sign.where "after" &&
800 git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
801 git config trailer.sign.command "echo \"A U Thor <author@example.com>\"" &&
802 cat complex_message_body >expected &&
803 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
804 Fixes: Z
805 Acked-by= Z
806 Reviewed-by:
807 Signed-off-by: Z
808 Signed-off-by: A U Thor <author@example.com>
809 EOF
810 git interpret-trailers --trailer "review:" --trailer "fix=22" \
811 <complex_message >actual &&
812 test_cmp expected actual
813 '
814
815 test_expect_success 'with command using commiter information' '
816 git config trailer.sign.ifExists "addIfDifferent" &&
817 git config trailer.sign.command "echo \"\$GIT_COMMITTER_NAME <\$GIT_COMMITTER_EMAIL>\"" &&
818 cat complex_message_body >expected &&
819 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
820 Fixes: Z
821 Acked-by= Z
822 Reviewed-by:
823 Signed-off-by: Z
824 Signed-off-by: C O Mitter <committer@example.com>
825 EOF
826 git interpret-trailers --trailer "review:" --trailer "fix=22" \
827 <complex_message >actual &&
828 test_cmp expected actual
829 '
830
831 test_expect_success 'with command using author information' '
832 git config trailer.sign.key "Signed-off-by: " &&
833 git config trailer.sign.where "after" &&
834 git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
835 git config trailer.sign.command "echo \"\$GIT_AUTHOR_NAME <\$GIT_AUTHOR_EMAIL>\"" &&
836 cat complex_message_body >expected &&
837 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
838 Fixes: Z
839 Acked-by= Z
840 Reviewed-by:
841 Signed-off-by: Z
842 Signed-off-by: A U Thor <author@example.com>
843 EOF
844 git interpret-trailers --trailer "review:" --trailer "fix=22" \
845 <complex_message >actual &&
846 test_cmp expected actual
847 '
848
849 test_expect_success 'setup a commit' '
850 echo "Content of the first commit." > a.txt &&
851 git add a.txt &&
852 git commit -m "Add file a.txt"
853 '
854
855 test_expect_success 'with command using $ARG' '
856 git config trailer.fix.ifExists "replace" &&
857 git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" &&
858 FIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) &&
859 cat complex_message_body >expected &&
860 sed -e "s/ Z\$/ /" >>expected <<-EOF &&
861 Fixes: $FIXED
862 Acked-by= Z
863 Reviewed-by:
864 Signed-off-by: Z
865 Signed-off-by: A U Thor <author@example.com>
866 EOF
867 git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
868 <complex_message >actual &&
869 test_cmp expected actual
870 '
871
872 test_expect_success 'with failing command using $ARG' '
873 git config trailer.fix.ifExists "replace" &&
874 git config trailer.fix.command "false \$ARG" &&
875 cat complex_message_body >expected &&
876 sed -e "s/ Z\$/ /" >>expected <<-EOF &&
877 Fixes: Z
878 Acked-by= Z
879 Reviewed-by:
880 Signed-off-by: Z
881 Signed-off-by: A U Thor <author@example.com>
882 EOF
883 git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
884 <complex_message >actual &&
885 test_cmp expected actual
886 '
887
888 test_expect_success 'with empty tokens' '
889 git config --unset trailer.fix.command &&
890 cat >expected <<-EOF &&
891
892 Signed-off-by: A U Thor <author@example.com>
893 EOF
894 git interpret-trailers --trailer ":" --trailer ":test" >actual <<-EOF &&
895 EOF
896 test_cmp expected actual
897 '
898
899 test_expect_success 'with command but no key' '
900 git config --unset trailer.sign.key &&
901 cat >expected <<-EOF &&
902
903 sign: A U Thor <author@example.com>
904 EOF
905 git interpret-trailers >actual <<-EOF &&
906 EOF
907 test_cmp expected actual
908 '
909
910 test_expect_success 'with no command and no key' '
911 git config --unset trailer.review.key &&
912 cat >expected <<-EOF &&
913
914 review: Junio
915 sign: A U Thor <author@example.com>
916 EOF
917 git interpret-trailers --trailer "review:Junio" >actual <<-EOF &&
918 EOF
919 test_cmp expected actual
920 '
921
922 test_done