]> git.ipfire.org Git - thirdparty/git.git/blob - t/t7513-interpret-trailers.sh
sequencer: lib'ify read_and_refresh_cache()
[thirdparty/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 'in-place editing with basic patch' '
330 cat basic_message >message &&
331 cat basic_patch >>message &&
332 cat basic_message >expected &&
333 echo >>expected &&
334 cat basic_patch >>expected &&
335 git interpret-trailers --in-place message &&
336 test_cmp expected message
337 '
338
339 test_expect_success 'in-place editing with additional trailer' '
340 cat basic_message >message &&
341 cat basic_patch >>message &&
342 cat basic_message >expected &&
343 echo >>expected &&
344 cat >>expected <<-\EOF &&
345 Reviewed-by: Alice
346 EOF
347 cat basic_patch >>expected &&
348 git interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&
349 test_cmp expected message
350 '
351
352 test_expect_success 'in-place editing on stdin disallowed' '
353 test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place < basic_message
354 '
355
356 test_expect_success 'in-place editing on non-existing file' '
357 test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place nonexisting &&
358 test_path_is_missing nonexisting
359 '
360
361 test_expect_success POSIXPERM,SANITY "in-place editing doesn't clobber original file on error" '
362 cat basic_message >message &&
363 chmod -r message &&
364 test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&
365 chmod +r message &&
366 test_cmp message basic_message
367 '
368
369 test_expect_success 'using "where = before"' '
370 git config trailer.bug.where "before" &&
371 cat complex_message_body >expected &&
372 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
373 Bug #42
374 Fixes: Z
375 Acked-by= Z
376 Reviewed-by: Z
377 Signed-off-by: Z
378 Acked-by= Peff
379 EOF
380 git interpret-trailers --trailer "ack: Peff" \
381 --trailer "bug: 42" complex_message >actual &&
382 test_cmp expected actual
383 '
384
385 test_expect_success 'using "where = after"' '
386 git config trailer.ack.where "after" &&
387 cat complex_message_body >expected &&
388 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
389 Bug #42
390 Fixes: Z
391 Acked-by= Z
392 Acked-by= Peff
393 Reviewed-by: Z
394 Signed-off-by: Z
395 EOF
396 git interpret-trailers --trailer "ack: Peff" \
397 --trailer "bug: 42" complex_message >actual &&
398 test_cmp expected actual
399 '
400
401 test_expect_success 'using "where = end"' '
402 git config trailer.review.key "Reviewed-by" &&
403 git config trailer.review.where "end" &&
404 cat complex_message_body >expected &&
405 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
406 Fixes: Z
407 Acked-by= Z
408 Acked-by= Peff
409 Reviewed-by: Z
410 Signed-off-by: Z
411 Reviewed-by: Junio
412 Reviewed-by: Johannes
413 EOF
414 git interpret-trailers --trailer "ack: Peff" \
415 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
416 complex_message >actual &&
417 test_cmp expected actual
418 '
419
420 test_expect_success 'using "where = start"' '
421 git config trailer.review.key "Reviewed-by" &&
422 git config trailer.review.where "start" &&
423 cat complex_message_body >expected &&
424 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
425 Reviewed-by: Johannes
426 Reviewed-by: Junio
427 Fixes: Z
428 Acked-by= Z
429 Acked-by= Peff
430 Reviewed-by: Z
431 Signed-off-by: Z
432 EOF
433 git interpret-trailers --trailer "ack: Peff" \
434 --trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
435 complex_message >actual &&
436 test_cmp expected actual
437 '
438
439 test_expect_success 'using "where = before" for a token in the middle of the message' '
440 git config trailer.review.key "Reviewed-by:" &&
441 git config trailer.review.where "before" &&
442 cat complex_message_body >expected &&
443 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
444 Bug #42
445 Fixes: Z
446 Acked-by= Z
447 Acked-by= Peff
448 Reviewed-by:Johan
449 Reviewed-by:
450 Signed-off-by: Z
451 EOF
452 git interpret-trailers --trailer "ack: Peff" --trailer "bug: 42" \
453 --trailer "review: Johan" <complex_message >actual &&
454 test_cmp expected actual
455 '
456
457 test_expect_success 'using "where = before" and --trim-empty' '
458 cat complex_message_body >expected &&
459 cat >>expected <<-\EOF &&
460 Bug #46
461 Bug #42
462 Acked-by= Peff
463 Reviewed-by:Johan
464 EOF
465 git interpret-trailers --trim-empty --trailer "ack: Peff" \
466 --trailer "bug: 42" --trailer "review: Johan" \
467 --trailer "Bug: 46" <complex_message >actual &&
468 test_cmp expected actual
469 '
470
471 test_expect_success 'the default is "ifExists = addIfDifferentNeighbor"' '
472 cat complex_message_body >expected &&
473 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
474 Bug #42
475 Fixes: Z
476 Acked-by= Z
477 Acked-by= Peff
478 Acked-by= Junio
479 Acked-by= Peff
480 Reviewed-by:
481 Signed-off-by: Z
482 EOF
483 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
484 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
485 --trailer "ack: Peff" <complex_message >actual &&
486 test_cmp expected actual
487 '
488
489 test_expect_success 'default "ifExists" is now "addIfDifferent"' '
490 git config trailer.ifexists "addIfDifferent" &&
491 cat complex_message_body >expected &&
492 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
493 Bug #42
494 Fixes: Z
495 Acked-by= Z
496 Acked-by= Peff
497 Acked-by= Junio
498 Reviewed-by:
499 Signed-off-by: Z
500 EOF
501 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
502 --trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
503 --trailer "ack: Peff" <complex_message >actual &&
504 test_cmp expected actual
505 '
506
507 test_expect_success 'using "ifExists = addIfDifferent" with "where = end"' '
508 git config trailer.ack.ifExists "addIfDifferent" &&
509 git config trailer.ack.where "end" &&
510 cat complex_message_body >expected &&
511 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
512 Bug #42
513 Fixes: Z
514 Acked-by= Z
515 Reviewed-by:
516 Signed-off-by: Z
517 Acked-by= Peff
518 EOF
519 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
520 --trailer "bug: 42" --trailer "ack: Peff" \
521 <complex_message >actual &&
522 test_cmp expected actual
523 '
524
525 test_expect_success 'using "ifExists = addIfDifferent" with "where = before"' '
526 git config trailer.ack.ifExists "addIfDifferent" &&
527 git config trailer.ack.where "before" &&
528 cat complex_message_body >expected &&
529 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
530 Bug #42
531 Fixes: Z
532 Acked-by= Peff
533 Acked-by= Z
534 Reviewed-by:
535 Signed-off-by: Z
536 EOF
537 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
538 --trailer "bug: 42" --trailer "ack: Peff" \
539 <complex_message >actual &&
540 test_cmp expected actual
541 '
542
543 test_expect_success 'using "ifExists = addIfDifferentNeighbor" with "where = end"' '
544 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
545 git config trailer.ack.where "end" &&
546 cat complex_message_body >expected &&
547 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
548 Bug #42
549 Fixes: Z
550 Acked-by= Z
551 Reviewed-by:
552 Signed-off-by: Z
553 Acked-by= Peff
554 Acked-by= Junio
555 Tested-by: Jakub
556 Acked-by= Junio
557 Acked-by= Peff
558 EOF
559 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
560 --trailer "ack: Junio" --trailer "bug: 42" \
561 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
562 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
563 test_cmp expected actual
564 '
565
566 test_expect_success 'using "ifExists = addIfDifferentNeighbor" with "where = after"' '
567 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
568 git config trailer.ack.where "after" &&
569 cat complex_message_body >expected &&
570 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
571 Bug #42
572 Fixes: Z
573 Acked-by= Z
574 Acked-by= Peff
575 Acked-by= Junio
576 Acked-by= Peff
577 Reviewed-by:
578 Signed-off-by: Z
579 Tested-by: Jakub
580 EOF
581 git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
582 --trailer "ack: Junio" --trailer "bug: 42" \
583 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
584 --trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
585 test_cmp expected actual
586 '
587
588 test_expect_success 'using "ifExists = addIfDifferentNeighbor" and --trim-empty' '
589 git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
590 cat complex_message_body >expected &&
591 cat >>expected <<-\EOF &&
592 Bug #42
593 Acked-by= Peff
594 Acked-by= Junio
595 Acked-by= Peff
596 EOF
597 git interpret-trailers --trim-empty --trailer "ack: Peff" \
598 --trailer "Acked-by= Peff" --trailer "review:" \
599 --trailer "ack: Junio" --trailer "bug: 42" \
600 --trailer "ack: Peff" <complex_message >actual &&
601 test_cmp expected actual
602 '
603
604 test_expect_success 'using "ifExists = add" with "where = end"' '
605 git config trailer.ack.ifExists "add" &&
606 git config trailer.ack.where "end" &&
607 cat complex_message_body >expected &&
608 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
609 Bug #42
610 Fixes: Z
611 Acked-by= Z
612 Reviewed-by:
613 Signed-off-by: Z
614 Acked-by= Peff
615 Acked-by= Peff
616 Tested-by: Jakub
617 Acked-by= Junio
618 Tested-by: Johannes
619 Acked-by= Peff
620 EOF
621 git interpret-trailers --trailer "ack: Peff" \
622 --trailer "Acked-by= Peff" --trailer "review:" \
623 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
624 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
625 --trailer "ack: Peff" <complex_message >actual &&
626 test_cmp expected actual
627 '
628
629 test_expect_success 'using "ifExists = add" with "where = after"' '
630 git config trailer.ack.ifExists "add" &&
631 git config trailer.ack.where "after" &&
632 cat complex_message_body >expected &&
633 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
634 Bug #42
635 Fixes: Z
636 Acked-by= Z
637 Acked-by= Peff
638 Acked-by= Peff
639 Acked-by= Junio
640 Acked-by= Peff
641 Reviewed-by:
642 Signed-off-by: Z
643 EOF
644 git interpret-trailers --trailer "ack: Peff" \
645 --trailer "Acked-by= Peff" --trailer "review:" \
646 --trailer "ack: Junio" --trailer "bug: 42" \
647 --trailer "ack: Peff" <complex_message >actual &&
648 test_cmp expected actual
649 '
650
651 test_expect_success 'using "ifExists = replace"' '
652 git config trailer.fix.key "Fixes: " &&
653 git config trailer.fix.ifExists "replace" &&
654 cat complex_message_body >expected &&
655 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
656 Bug #42
657 Acked-by= Z
658 Acked-by= Junio
659 Acked-by= Peff
660 Reviewed-by:
661 Signed-off-by: Z
662 Fixes: 22
663 EOF
664 git interpret-trailers --trailer "review:" \
665 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
666 --trailer "bug: 42" --trailer "ack: Peff" \
667 <complex_message >actual &&
668 test_cmp expected actual
669 '
670
671 test_expect_success 'using "ifExists = replace" with "where = after"' '
672 git config trailer.fix.where "after" &&
673 cat complex_message_body >expected &&
674 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
675 Bug #42
676 Fixes: 22
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:" \
684 --trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
685 --trailer "bug: 42" --trailer "ack: Peff" \
686 <complex_message >actual &&
687 test_cmp expected actual
688 '
689
690 test_expect_success 'using "ifExists = doNothing"' '
691 git config trailer.fix.ifExists "doNothing" &&
692 cat complex_message_body >expected &&
693 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
694 Bug #42
695 Fixes: Z
696 Acked-by= Z
697 Acked-by= Junio
698 Acked-by= Peff
699 Reviewed-by:
700 Signed-off-by: Z
701 EOF
702 git interpret-trailers --trailer "review:" --trailer "fix=53" \
703 --trailer "ack: Junio" --trailer "fix=22" \
704 --trailer "bug: 42" --trailer "ack: Peff" \
705 <complex_message >actual &&
706 test_cmp expected actual
707 '
708
709 test_expect_success 'the default is "ifMissing = add"' '
710 git config trailer.cc.key "Cc: " &&
711 git config trailer.cc.where "before" &&
712 cat complex_message_body >expected &&
713 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
714 Bug #42
715 Cc: Linus
716 Fixes: Z
717 Acked-by= Z
718 Acked-by= Junio
719 Acked-by= Peff
720 Reviewed-by:
721 Signed-off-by: Z
722 EOF
723 git interpret-trailers --trailer "review:" --trailer "fix=53" \
724 --trailer "cc=Linus" --trailer "ack: Junio" \
725 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
726 <complex_message >actual &&
727 test_cmp expected actual
728 '
729
730 test_expect_success 'when default "ifMissing" is "doNothing"' '
731 git config trailer.ifmissing "doNothing" &&
732 cat complex_message_body >expected &&
733 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
734 Fixes: Z
735 Acked-by= Z
736 Acked-by= Junio
737 Acked-by= Peff
738 Reviewed-by:
739 Signed-off-by: Z
740 EOF
741 git interpret-trailers --trailer "review:" --trailer "fix=53" \
742 --trailer "cc=Linus" --trailer "ack: Junio" \
743 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
744 <complex_message >actual &&
745 test_cmp expected actual &&
746 git config trailer.ifmissing "add"
747 '
748
749 test_expect_success 'using "ifMissing = add" with "where = end"' '
750 git config trailer.cc.key "Cc: " &&
751 git config trailer.cc.where "end" &&
752 git config trailer.cc.ifMissing "add" &&
753 cat complex_message_body >expected &&
754 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
755 Bug #42
756 Fixes: Z
757 Acked-by= Z
758 Acked-by= Junio
759 Acked-by= Peff
760 Reviewed-by:
761 Signed-off-by: Z
762 Cc: Linus
763 EOF
764 git interpret-trailers --trailer "review:" --trailer "fix=53" \
765 --trailer "ack: Junio" --trailer "fix=22" \
766 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
767 <complex_message >actual &&
768 test_cmp expected actual
769 '
770
771 test_expect_success 'using "ifMissing = add" with "where = before"' '
772 git config trailer.cc.key "Cc: " &&
773 git config trailer.cc.where "before" &&
774 git config trailer.cc.ifMissing "add" &&
775 cat complex_message_body >expected &&
776 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
777 Cc: Linus
778 Bug #42
779 Fixes: Z
780 Acked-by= Z
781 Acked-by= Junio
782 Acked-by= Peff
783 Reviewed-by:
784 Signed-off-by: Z
785 EOF
786 git interpret-trailers --trailer "review:" --trailer "fix=53" \
787 --trailer "ack: Junio" --trailer "fix=22" \
788 --trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
789 <complex_message >actual &&
790 test_cmp expected actual
791 '
792
793 test_expect_success 'using "ifMissing = doNothing"' '
794 git config trailer.cc.ifMissing "doNothing" &&
795 cat complex_message_body >expected &&
796 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
797 Bug #42
798 Fixes: Z
799 Acked-by= Z
800 Acked-by= Junio
801 Acked-by= Peff
802 Reviewed-by:
803 Signed-off-by: Z
804 EOF
805 git interpret-trailers --trailer "review:" --trailer "fix=53" \
806 --trailer "cc=Linus" --trailer "ack: Junio" \
807 --trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
808 <complex_message >actual &&
809 test_cmp expected actual
810 '
811
812 test_expect_success 'default "where" is now "after"' '
813 git config trailer.where "after" &&
814 git config --unset trailer.ack.where &&
815 cat complex_message_body >expected &&
816 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
817 Bug #42
818 Fixes: Z
819 Acked-by= Z
820 Acked-by= Peff
821 Acked-by= Peff
822 Acked-by= Junio
823 Acked-by= Peff
824 Reviewed-by:
825 Signed-off-by: Z
826 Tested-by: Jakub
827 Tested-by: Johannes
828 EOF
829 git interpret-trailers --trailer "ack: Peff" \
830 --trailer "Acked-by= Peff" --trailer "review:" \
831 --trailer "Tested-by: Jakub" --trailer "ack: Junio" \
832 --trailer "bug: 42" --trailer "Tested-by: Johannes" \
833 --trailer "ack: Peff" <complex_message >actual &&
834 test_cmp expected actual
835 '
836
837 test_expect_success 'with simple command' '
838 git config trailer.sign.key "Signed-off-by: " &&
839 git config trailer.sign.where "after" &&
840 git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
841 git config trailer.sign.command "echo \"A U Thor <author@example.com>\"" &&
842 cat complex_message_body >expected &&
843 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
844 Fixes: Z
845 Acked-by= Z
846 Reviewed-by:
847 Signed-off-by: Z
848 Signed-off-by: A U Thor <author@example.com>
849 EOF
850 git interpret-trailers --trailer "review:" --trailer "fix=22" \
851 <complex_message >actual &&
852 test_cmp expected actual
853 '
854
855 test_expect_success 'with command using commiter information' '
856 git config trailer.sign.ifExists "addIfDifferent" &&
857 git config trailer.sign.command "echo \"\$GIT_COMMITTER_NAME <\$GIT_COMMITTER_EMAIL>\"" &&
858 cat complex_message_body >expected &&
859 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
860 Fixes: Z
861 Acked-by= Z
862 Reviewed-by:
863 Signed-off-by: Z
864 Signed-off-by: C O Mitter <committer@example.com>
865 EOF
866 git interpret-trailers --trailer "review:" --trailer "fix=22" \
867 <complex_message >actual &&
868 test_cmp expected actual
869 '
870
871 test_expect_success 'with command using author information' '
872 git config trailer.sign.key "Signed-off-by: " &&
873 git config trailer.sign.where "after" &&
874 git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
875 git config trailer.sign.command "echo \"\$GIT_AUTHOR_NAME <\$GIT_AUTHOR_EMAIL>\"" &&
876 cat complex_message_body >expected &&
877 sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
878 Fixes: Z
879 Acked-by= Z
880 Reviewed-by:
881 Signed-off-by: Z
882 Signed-off-by: A U Thor <author@example.com>
883 EOF
884 git interpret-trailers --trailer "review:" --trailer "fix=22" \
885 <complex_message >actual &&
886 test_cmp expected actual
887 '
888
889 test_expect_success 'setup a commit' '
890 echo "Content of the first commit." > a.txt &&
891 git add a.txt &&
892 git commit -m "Add file a.txt"
893 '
894
895 test_expect_success 'with command using $ARG' '
896 git config trailer.fix.ifExists "replace" &&
897 git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" &&
898 FIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) &&
899 cat complex_message_body >expected &&
900 sed -e "s/ Z\$/ /" >>expected <<-EOF &&
901 Fixes: $FIXED
902 Acked-by= Z
903 Reviewed-by:
904 Signed-off-by: Z
905 Signed-off-by: A U Thor <author@example.com>
906 EOF
907 git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
908 <complex_message >actual &&
909 test_cmp expected actual
910 '
911
912 test_expect_success 'with failing command using $ARG' '
913 git config trailer.fix.ifExists "replace" &&
914 git config trailer.fix.command "false \$ARG" &&
915 cat complex_message_body >expected &&
916 sed -e "s/ Z\$/ /" >>expected <<-EOF &&
917 Fixes: Z
918 Acked-by= Z
919 Reviewed-by:
920 Signed-off-by: Z
921 Signed-off-by: A U Thor <author@example.com>
922 EOF
923 git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
924 <complex_message >actual &&
925 test_cmp expected actual
926 '
927
928 test_expect_success 'with empty tokens' '
929 git config --unset trailer.fix.command &&
930 cat >expected <<-EOF &&
931
932 Signed-off-by: A U Thor <author@example.com>
933 EOF
934 git interpret-trailers --trailer ":" --trailer ":test" >actual <<-EOF &&
935 EOF
936 test_cmp expected actual
937 '
938
939 test_expect_success 'with command but no key' '
940 git config --unset trailer.sign.key &&
941 cat >expected <<-EOF &&
942
943 sign: A U Thor <author@example.com>
944 EOF
945 git interpret-trailers >actual <<-EOF &&
946 EOF
947 test_cmp expected actual
948 '
949
950 test_expect_success 'with no command and no key' '
951 git config --unset trailer.review.key &&
952 cat >expected <<-EOF &&
953
954 review: Junio
955 sign: A U Thor <author@example.com>
956 EOF
957 git interpret-trailers --trailer "review:Junio" >actual <<-EOF &&
958 EOF
959 test_cmp expected actual
960 '
961
962 test_done