3 test_description
='range-diff tests'
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
10 # Note that because of the range-diff's heuristics, test_commit does more
11 # harm than good. We need some real history.
13 test_expect_success
'setup' '
14 git fast-import <"$TEST_DIRECTORY"/t3206/history.export &&
15 test_oid_cache <<-\EOF
37 t1_abbrev sha1:4de457d2c0
38 t2_abbrev sha1:fccce22f8c
39 t3_abbrev sha1:147e64ef53
40 t4_abbrev sha1:a63e992599
41 t1_abbrev sha256:b89f8b9092
42 t2_abbrev sha256:5f12aadf34
43 t3_abbrev sha256:ea8b273a6c
44 t4_abbrev sha256:14b73361fc
46 # unmodified (abbrev=10)
47 u1_abbrev sha1:35b9b25f76
48 u2_abbrev sha1:de345ab3de
49 u3_abbrev sha1:9af6654000
50 u4_abbrev sha1:2901f773f3
51 u1_abbrev sha256:e3731be242
52 u2_abbrev sha256:14fadf8cee
53 u3_abbrev sha256:736c4bcb44
54 u4_abbrev sha256:673e77d589
146 # Empty delimiter (included so lines match neatly)
152 test_expect_success
'simple A..B A..C (unmodified)' '
153 git range-diff --no-color main..topic main..unmodified \
155 cat >expect <<-EOF &&
156 1: $(test_oid t1) = 1: $(test_oid u1) s/5/A/
157 2: $(test_oid t2) = 2: $(test_oid u2) s/4/A/
158 3: $(test_oid t3) = 3: $(test_oid u3) s/11/B/
159 4: $(test_oid t4) = 4: $(test_oid u4) s/12/B/
161 test_cmp expect actual
164 test_expect_success
'simple B...C (unmodified)' '
165 git range-diff --no-color topic...unmodified >actual &&
166 # same "expect" as above
167 test_cmp expect actual
170 test_expect_success
'simple A B C (unmodified)' '
171 git range-diff --no-color main topic unmodified >actual &&
172 # same "expect" as above
173 test_cmp expect actual
176 test_expect_success
'simple A..B A..C (unmodified) with --abbrev' '
177 git range-diff --no-color --abbrev=10 main..topic main..unmodified \
179 cat >expect <<-EOF &&
180 1: $(test_oid t1_abbrev) = 1: $(test_oid u1_abbrev) s/5/A/
181 2: $(test_oid t2_abbrev) = 2: $(test_oid u2_abbrev) s/4/A/
182 3: $(test_oid t3_abbrev) = 3: $(test_oid u3_abbrev) s/11/B/
183 4: $(test_oid t4_abbrev) = 4: $(test_oid u4_abbrev) s/12/B/
185 test_cmp expect actual
188 test_expect_success
'A^! and A^-<n> (unmodified)' '
189 git range-diff --no-color topic^! unmodified^-1 >actual &&
190 cat >expect <<-EOF &&
191 1: $(test_oid t4) = 1: $(test_oid u4) s/12/B/
193 test_cmp expect actual
196 test_expect_success
'A^{/..} is not mistaken for a range' '
197 test_must_fail git range-diff topic^.. topic^{/..} -- 2>error &&
198 test_i18ngrep "not a commit range" error
201 test_expect_success
'trivial reordering' '
202 git range-diff --no-color main topic reordered >actual &&
203 cat >expect <<-EOF &&
204 1: $(test_oid t1) = 1: $(test_oid r1) s/5/A/
205 3: $(test_oid t3) = 2: $(test_oid r2) s/11/B/
206 4: $(test_oid t4) = 3: $(test_oid r3) s/12/B/
207 2: $(test_oid t2) = 4: $(test_oid r4) s/4/A/
209 test_cmp expect actual
212 test_expect_success
'removed a commit' '
213 git range-diff --no-color main topic removed >actual &&
214 cat >expect <<-EOF &&
215 1: $(test_oid t1) = 1: $(test_oid d1) s/5/A/
216 2: $(test_oid t2) < -: $(test_oid __) s/4/A/
217 3: $(test_oid t3) = 2: $(test_oid d2) s/11/B/
218 4: $(test_oid t4) = 3: $(test_oid d3) s/12/B/
220 test_cmp expect actual
223 test_expect_success
'added a commit' '
224 git range-diff --no-color main topic added >actual &&
225 cat >expect <<-EOF &&
226 1: $(test_oid t1) = 1: $(test_oid a1) s/5/A/
227 2: $(test_oid t2) = 2: $(test_oid a2) s/4/A/
228 -: $(test_oid __) > 3: $(test_oid a3) s/6/A/
229 3: $(test_oid t3) = 4: $(test_oid a4) s/11/B/
230 4: $(test_oid t4) = 5: $(test_oid a5) s/12/B/
232 test_cmp expect actual
235 test_expect_success
'new base, A B C' '
236 git range-diff --no-color main topic rebased >actual &&
237 cat >expect <<-EOF &&
238 1: $(test_oid t1) = 1: $(test_oid b1) s/5/A/
239 2: $(test_oid t2) = 2: $(test_oid b2) s/4/A/
240 3: $(test_oid t3) = 3: $(test_oid b3) s/11/B/
241 4: $(test_oid t4) = 4: $(test_oid b4) s/12/B/
243 test_cmp expect actual
246 test_expect_success
'new base, B...C' '
247 # this syntax includes the commits from main!
248 git range-diff --no-color topic...rebased >actual &&
249 cat >expect <<-EOF &&
250 -: $(test_oid __) > 1: $(test_oid b5) unrelated
251 1: $(test_oid t1) = 2: $(test_oid b1) s/5/A/
252 2: $(test_oid t2) = 3: $(test_oid b2) s/4/A/
253 3: $(test_oid t3) = 4: $(test_oid b3) s/11/B/
254 4: $(test_oid t4) = 5: $(test_oid b4) s/12/B/
256 test_cmp expect actual
259 test_expect_success
'changed commit' '
260 git range-diff --no-color topic...changed >actual &&
261 cat >expect <<-EOF &&
262 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
263 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
264 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
274 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
285 test_cmp expect actual
288 test_expect_success
'changed commit with --no-patch diff option' '
289 git range-diff --no-color --no-patch topic...changed >actual &&
290 cat >expect <<-EOF &&
291 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
292 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
293 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
294 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
296 test_cmp expect actual
299 test_expect_success
'changed commit with --stat diff option' '
300 git range-diff --no-color --stat topic...changed >actual &&
301 cat >expect <<-EOF &&
302 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
303 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
304 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
306 1 file changed, 1 insertion(+), 1 deletion(-)
307 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
309 1 file changed, 1 insertion(+), 1 deletion(-)
311 test_cmp expect actual
314 test_expect_success
'changed commit with sm config' '
315 git range-diff --no-color --submodule=log topic...changed >actual &&
316 cat >expect <<-EOF &&
317 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
318 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
319 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
329 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
340 test_cmp expect actual
343 test_expect_success
'renamed file' '
344 git range-diff --no-color --submodule=log topic...renamed-file >actual &&
345 sed s/Z/\ /g >expect <<-EOF &&
346 1: $(test_oid t1) = 1: $(test_oid n1) s/5/A/
347 2: $(test_oid t2) ! 2: $(test_oid n2) s/4/A/
349 ZAuthor: Thomas Rast <trast@inf.ethz.ch>
351 Z ## Commit message ##
353 + s/4/A/ + rename file
356 + ## file => renamed-file ##
360 3: $(test_oid t3) ! 3: $(test_oid n3) s/11/B/
362 Z ## Commit message ##
372 4: $(test_oid t4) ! 4: $(test_oid n4) s/12/B/
374 Z ## Commit message ##
385 test_cmp expect actual
388 test_expect_success
'file with mode only change' '
389 git range-diff --no-color --submodule=log topic...mode-only-change >actual &&
390 sed s/Z/\ /g >expect <<-EOF &&
391 1: $(test_oid t2) ! 1: $(test_oid o1) s/4/A/
393 ZAuthor: Thomas Rast <trast@inf.ethz.ch>
395 Z ## Commit message ##
397 + s/4/A/ + add other-file
406 + ## other-file (new) ##
407 2: $(test_oid t3) ! 2: $(test_oid o2) s/11/B/
409 ZAuthor: Thomas Rast <trast@inf.ethz.ch>
411 Z ## Commit message ##
413 + s/11/B/ + mode change other-file
422 + ## other-file (mode change 100644 => 100755) ##
423 3: $(test_oid t4) = 3: $(test_oid o3) s/12/B/
425 test_cmp expect actual
428 test_expect_success
'file added and later removed' '
429 git range-diff --no-color --submodule=log topic...added-removed >actual &&
430 sed s/Z/\ /g >expect <<-EOF &&
431 1: $(test_oid t1) = 1: $(test_oid s1) s/5/A/
432 2: $(test_oid t2) ! 2: $(test_oid s2) s/4/A/
434 ZAuthor: Thomas Rast <trast@inf.ethz.ch>
436 Z ## Commit message ##
447 + ## new-file (new) ##
448 3: $(test_oid t3) ! 3: $(test_oid s3) s/11/B/
450 ZAuthor: Thomas Rast <trast@inf.ethz.ch>
452 Z ## Commit message ##
454 + s/11/B/ + remove file
463 + ## new-file (deleted) ##
464 4: $(test_oid t4) = 4: $(test_oid s4) s/12/B/
466 test_cmp expect actual
469 test_expect_success
'no commits on one side' '
470 git commit --amend -m "new message" &&
471 git range-diff main HEAD@{1} HEAD
474 test_expect_success
'changed message' '
475 git range-diff --no-color topic...changed-message >actual &&
476 sed s/Z/\ /g >expect <<-EOF &&
477 1: $(test_oid t1) = 1: $(test_oid m1) s/5/A/
478 2: $(test_oid t2) ! 2: $(test_oid m2) s/4/A/
480 Z ## Commit message ##
483 + Also a silly comment here!
488 3: $(test_oid t3) = 3: $(test_oid m3) s/11/B/
489 4: $(test_oid t4) = 4: $(test_oid m4) s/12/B/
491 test_cmp expect actual
494 test_expect_success
'dual-coloring' '
495 sed -e "s|^:||" >expect <<-EOF &&
496 :<YELLOW>1: $(test_oid c1) = 1: $(test_oid m1) s/5/A/<RESET>
497 :<RED>2: $(test_oid c2) <RESET><YELLOW>!<RESET><GREEN> 2: $(test_oid m2)<RESET><YELLOW> s/4/A/<RESET>
498 : <REVERSE><CYAN>@@<RESET> <RESET>Metadata<RESET>
499 : ## Commit message ##<RESET>
502 : <REVERSE><GREEN>+<RESET><BOLD> Also a silly comment here!<RESET>
503 : <REVERSE><GREEN>+<RESET>
507 :<RED>3: $(test_oid c3) <RESET><YELLOW>!<RESET><GREEN> 3: $(test_oid m3)<RESET><YELLOW> s/11/B/<RESET>
508 : <REVERSE><CYAN>@@<RESET> <RESET>file: A<RESET>
512 : <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET>
513 : <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET>
517 :<RED>4: $(test_oid c4) <RESET><YELLOW>!<RESET><GREEN> 4: $(test_oid m4)<RESET><YELLOW> s/12/B/<RESET>
518 : <REVERSE><CYAN>@@<RESET> <RESET>file<RESET>
519 : <CYAN> @@ file: A<RESET>
522 : <REVERSE><RED>-<RESET><FAINT> BB<RESET>
523 : <REVERSE><GREEN>+<RESET><BOLD> B<RESET>
528 git range-diff changed...changed-message --color --dual-color >actual.raw &&
529 test_decode_color >actual <actual.raw &&
530 test_cmp expect actual
533 for prev
in topic main..topic
535 test_expect_success
"format-patch --range-diff=$prev" '
536 git format-patch --cover-letter --range-diff=$prev \
537 main..unmodified >actual &&
538 test_when_finished "rm 000?-*" &&
539 test_line_count = 5 actual &&
540 test_i18ngrep "^Range-diff:$" 0000-* &&
541 grep "= 1: .* s/5/A" 0000-* &&
542 grep "= 2: .* s/4/A" 0000-* &&
543 grep "= 3: .* s/11/B" 0000-* &&
544 grep "= 4: .* s/12/B" 0000-*
548 test_expect_success
'format-patch --range-diff as commentary' '
549 git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
550 test_when_finished "rm 0001-*" &&
551 test_line_count = 1 actual &&
552 test_i18ngrep "^Range-diff:$" 0001-* &&
553 grep "> 1: .* new message" 0001-*
556 test_expect_success
'format-patch --range-diff reroll-count with a non-integer' '
557 git format-patch --range-diff=HEAD~1 -v2.9 HEAD~1 >actual &&
558 test_when_finished "rm v2.9-0001-*" &&
559 test_line_count = 1 actual &&
560 test_i18ngrep "^Range-diff:$" v2.9-0001-* &&
561 grep "> 1: .* new message" v2.9-0001-*
564 test_expect_success
'format-patch --range-diff reroll-count with a integer' '
565 git format-patch --range-diff=HEAD~1 -v2 HEAD~1 >actual &&
566 test_when_finished "rm v2-0001-*" &&
567 test_line_count = 1 actual &&
568 test_i18ngrep "^Range-diff ..* v1:$" v2-0001-* &&
569 grep "> 1: .* new message" v2-0001-*
572 test_expect_success
'format-patch --range-diff with v0' '
573 git format-patch --range-diff=HEAD~1 -v0 HEAD~1 >actual &&
574 test_when_finished "rm v0-0001-*" &&
575 test_line_count = 1 actual &&
576 test_i18ngrep "^Range-diff:$" v0-0001-* &&
577 grep "> 1: .* new message" v0-0001-*
580 test_expect_success
'range-diff overrides diff.noprefix internally' '
581 git -c diff.noprefix=true range-diff HEAD^...
584 test_expect_success
'basic with modified format.pretty with suffix' '
585 git -c format.pretty="format:commit %H%d%n" range-diff \
586 main..topic main..unmodified
589 test_expect_success
'basic with modified format.pretty without "commit "' '
590 git -c format.pretty="format:%H%n" range-diff \
591 main..topic main..unmodified
594 test_expect_success
'range-diff compares notes by default' '
595 git notes add -m "topic note" topic &&
596 git notes add -m "unmodified note" unmodified &&
597 test_when_finished git notes remove topic unmodified &&
598 git range-diff --no-color main..topic main..unmodified \
600 sed s/Z/\ /g >expect <<-EOF &&
601 1: $(test_oid t1) = 1: $(test_oid u1) s/5/A/
602 2: $(test_oid t2) = 2: $(test_oid u2) s/4/A/
603 3: $(test_oid t3) = 3: $(test_oid u3) s/11/B/
604 4: $(test_oid t4) ! 4: $(test_oid u4) s/12/B/
615 test_cmp expect actual
618 test_expect_success
'range-diff with --no-notes' '
619 git notes add -m "topic note" topic &&
620 git notes add -m "unmodified note" unmodified &&
621 test_when_finished git notes remove topic unmodified &&
622 git range-diff --no-color --no-notes main..topic main..unmodified \
624 cat >expect <<-EOF &&
625 1: $(test_oid t1) = 1: $(test_oid u1) s/5/A/
626 2: $(test_oid t2) = 2: $(test_oid u2) s/4/A/
627 3: $(test_oid t3) = 3: $(test_oid u3) s/11/B/
628 4: $(test_oid t4) = 4: $(test_oid u4) s/12/B/
630 test_cmp expect actual
633 test_expect_success
'range-diff with multiple --notes' '
634 git notes --ref=note1 add -m "topic note1" topic &&
635 git notes --ref=note1 add -m "unmodified note1" unmodified &&
636 test_when_finished git notes --ref=note1 remove topic unmodified &&
637 git notes --ref=note2 add -m "topic note2" topic &&
638 git notes --ref=note2 add -m "unmodified note2" unmodified &&
639 test_when_finished git notes --ref=note2 remove topic unmodified &&
640 git range-diff --no-color --notes=note1 --notes=note2 main..topic main..unmodified \
642 sed s/Z/\ /g >expect <<-EOF &&
643 1: $(test_oid t1) = 1: $(test_oid u1) s/5/A/
644 2: $(test_oid t2) = 2: $(test_oid u2) s/4/A/
645 3: $(test_oid t3) = 3: $(test_oid u3) s/11/B/
646 4: $(test_oid t4) ! 4: $(test_oid u4) s/12/B/
650 Z ## Notes (note1) ##
655 Z ## Notes (note2) ##
662 test_cmp expect actual
665 test_expect_success
'format-patch --range-diff does not compare notes by default' '
666 git notes add -m "topic note" topic &&
667 git notes add -m "unmodified note" unmodified &&
668 test_when_finished git notes remove topic unmodified &&
669 git format-patch --cover-letter --range-diff=$prev \
670 main..unmodified >actual &&
671 test_when_finished "rm 000?-*" &&
672 test_line_count = 5 actual &&
673 test_i18ngrep "^Range-diff:$" 0000-* &&
674 grep "= 1: .* s/5/A" 0000-* &&
675 grep "= 2: .* s/4/A" 0000-* &&
676 grep "= 3: .* s/11/B" 0000-* &&
677 grep "= 4: .* s/12/B" 0000-* &&
678 ! grep "Notes" 0000-* &&
682 test_expect_success
'format-patch --range-diff with --no-notes' '
683 git notes add -m "topic note" topic &&
684 git notes add -m "unmodified note" unmodified &&
685 test_when_finished git notes remove topic unmodified &&
686 git format-patch --no-notes --cover-letter --range-diff=$prev \
687 main..unmodified >actual &&
688 test_when_finished "rm 000?-*" &&
689 test_line_count = 5 actual &&
690 test_i18ngrep "^Range-diff:$" 0000-* &&
691 grep "= 1: .* s/5/A" 0000-* &&
692 grep "= 2: .* s/4/A" 0000-* &&
693 grep "= 3: .* s/11/B" 0000-* &&
694 grep "= 4: .* s/12/B" 0000-* &&
695 ! grep "Notes" 0000-* &&
699 test_expect_success
'format-patch --range-diff with --notes' '
700 git notes add -m "topic note" topic &&
701 git notes add -m "unmodified note" unmodified &&
702 test_when_finished git notes remove topic unmodified &&
703 git format-patch --notes --cover-letter --range-diff=$prev \
704 main..unmodified >actual &&
705 test_when_finished "rm 000?-*" &&
706 test_line_count = 5 actual &&
707 test_i18ngrep "^Range-diff:$" 0000-* &&
708 grep "= 1: .* s/5/A" 0000-* &&
709 grep "= 2: .* s/4/A" 0000-* &&
710 grep "= 3: .* s/11/B" 0000-* &&
711 grep "! 4: .* s/12/B" 0000-* &&
712 sed s/Z/\ /g >expect <<-EOF &&
723 sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
724 test_cmp expect actual
727 test_expect_success
'format-patch --range-diff with format.notes config' '
728 git notes add -m "topic note" topic &&
729 git notes add -m "unmodified note" unmodified &&
730 test_when_finished git notes remove topic unmodified &&
731 test_config format.notes true &&
732 git format-patch --cover-letter --range-diff=$prev \
733 main..unmodified >actual &&
734 test_when_finished "rm 000?-*" &&
735 test_line_count = 5 actual &&
736 test_i18ngrep "^Range-diff:$" 0000-* &&
737 grep "= 1: .* s/5/A" 0000-* &&
738 grep "= 2: .* s/4/A" 0000-* &&
739 grep "= 3: .* s/11/B" 0000-* &&
740 grep "! 4: .* s/12/B" 0000-* &&
741 sed s/Z/\ /g >expect <<-EOF &&
752 sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
753 test_cmp expect actual
756 test_expect_success
'format-patch --range-diff with multiple notes' '
757 git notes --ref=note1 add -m "topic note1" topic &&
758 git notes --ref=note1 add -m "unmodified note1" unmodified &&
759 test_when_finished git notes --ref=note1 remove topic unmodified &&
760 git notes --ref=note2 add -m "topic note2" topic &&
761 git notes --ref=note2 add -m "unmodified note2" unmodified &&
762 test_when_finished git notes --ref=note2 remove topic unmodified &&
763 git format-patch --notes=note1 --notes=note2 --cover-letter --range-diff=$prev \
764 main..unmodified >actual &&
765 test_when_finished "rm 000?-*" &&
766 test_line_count = 5 actual &&
767 test_i18ngrep "^Range-diff:$" 0000-* &&
768 grep "= 1: .* s/5/A" 0000-* &&
769 grep "= 2: .* s/4/A" 0000-* &&
770 grep "= 3: .* s/11/B" 0000-* &&
771 grep "! 4: .* s/12/B" 0000-* &&
772 sed s/Z/\ /g >expect <<-EOF &&
776 Z ## Notes (note1) ##
781 Z ## Notes (note2) ##
788 sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
789 test_cmp expect actual
792 test_expect_success
'--left-only/--right-only' '
793 git switch --orphan left-right &&
795 test_commit unmatched &&
796 test_commit common &&
797 git switch -C left-right first &&
798 git cherry-pick common &&
800 git range-diff -s --left-only ...common >actual &&
801 head_oid=$(git rev-parse --short HEAD) &&
802 common_oid=$(git rev-parse --short common) &&
803 echo "1: $head_oid = 2: $common_oid common" >expect &&
804 test_cmp expect actual
807 test_expect_success
'ranges with pathspecs' '
808 git range-diff topic...mode-only-change -- other-file >actual &&
809 test_line_count = 2 actual &&
810 topic_oid=$(git rev-parse --short topic) &&
811 mode_change_oid=$(git rev-parse --short mode-only-change^) &&
812 file_change_oid=$(git rev-parse --short mode-only-change) &&
813 grep "$mode_change_oid" actual &&
814 ! grep "$file_change_oid" actual &&
815 ! grep "$topic_oid" actual
818 test_expect_success
'submodule changes are shown irrespective of diff.submodule' '
820 test_commit -C sub-repo sub-first &&
821 sub_oid1=$(git -C sub-repo rev-parse HEAD) &&
822 test_commit -C sub-repo sub-second &&
823 sub_oid2=$(git -C sub-repo rev-parse HEAD) &&
824 test_commit -C sub-repo sub-third &&
825 sub_oid3=$(git -C sub-repo rev-parse HEAD) &&
827 git checkout -b main-sub topic &&
828 git -c protocol.file.allow=always submodule add ./sub-repo sub &&
829 git -C sub checkout --detach sub-first &&
830 git commit -m "add sub" sub &&
831 sup_oid1=$(git rev-parse --short HEAD) &&
832 git checkout -b topic-sub &&
833 git -C sub checkout sub-second &&
834 git commit -m "change sub" sub &&
835 sup_oid2=$(git rev-parse --short HEAD) &&
836 git checkout -b modified-sub main-sub &&
837 git -C sub checkout sub-third &&
838 git commit -m "change sub" sub &&
839 sup_oid3=$(git rev-parse --short HEAD) &&
840 sup_oid0=$(test_oid __) &&
842 test_config diff.submodule log &&
843 git range-diff topic topic-sub modified-sub >actual &&
844 cat >expect <<-EOF &&
845 1: $sup_oid1 = 1: $sup_oid1 add sub
846 2: $sup_oid2 < -: $sup_oid0 change sub
847 -: $sup_oid0 > 2: $sup_oid3 change sub
849 test_cmp expect actual &&
850 test_config diff.submodule diff &&
851 git range-diff topic topic-sub modified-sub >actual &&
852 git range-diff --creation-factor=100 topic topic-sub modified-sub >actual &&
853 cat >expect <<-EOF &&
854 1: $sup_oid1 = 1: $sup_oid1 add sub
855 2: $sup_oid2 ! 2: $sup_oid3 change sub
859 -Subproject commit $sub_oid1
860 -+Subproject commit $sub_oid2
861 ++Subproject commit $sub_oid3
863 test_cmp expect actual &&
864 test_config diff.submodule diff &&
865 git range-diff --creation-factor=100 topic topic-sub modified-sub >actual &&
866 test_cmp expect actual