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