2018-08-13 13:33:16 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='range-diff tests'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
# Note that because of the range-diff's heuristics, test_commit does more
|
|
|
|
# harm than good. We need some real history.
|
|
|
|
|
|
|
|
test_expect_success 'setup' '
|
|
|
|
git fast-import < "$TEST_DIRECTORY"/t3206/history.export
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'simple A..B A..C (unmodified)' '
|
|
|
|
git range-diff --no-color master..topic master..unmodified \
|
|
|
|
>actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: 35b9b25 s/5/A/
|
|
|
|
2: fccce22 = 2: de345ab s/4/A/
|
|
|
|
3: 147e64e = 3: 9af6654 s/11/B/
|
|
|
|
4: a63e992 = 4: 2901f77 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'simple B...C (unmodified)' '
|
|
|
|
git range-diff --no-color topic...unmodified >actual &&
|
|
|
|
# same "expected" as above
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'simple A B C (unmodified)' '
|
|
|
|
git range-diff --no-color master topic unmodified >actual &&
|
|
|
|
# same "expected" as above
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'trivial reordering' '
|
|
|
|
git range-diff --no-color master topic reordered >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: aca177a s/5/A/
|
|
|
|
3: 147e64e = 2: 14ad629 s/11/B/
|
|
|
|
4: a63e992 = 3: ee58208 s/12/B/
|
|
|
|
2: fccce22 = 4: 307b27a s/4/A/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'removed a commit' '
|
|
|
|
git range-diff --no-color master topic removed >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: 7657159 s/5/A/
|
|
|
|
2: fccce22 < -: ------- s/4/A/
|
|
|
|
3: 147e64e = 2: 43d84d3 s/11/B/
|
|
|
|
4: a63e992 = 3: a740396 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'added a commit' '
|
|
|
|
git range-diff --no-color master topic added >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: 2716022 s/5/A/
|
|
|
|
2: fccce22 = 2: b62accd s/4/A/
|
|
|
|
-: ------- > 3: df46cfa s/6/A/
|
|
|
|
3: 147e64e = 4: 3e64548 s/11/B/
|
|
|
|
4: a63e992 = 5: 12b4063 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'new base, A B C' '
|
|
|
|
git range-diff --no-color master topic rebased >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: cc9c443 s/5/A/
|
|
|
|
2: fccce22 = 2: c5d9641 s/4/A/
|
|
|
|
3: 147e64e = 3: 28cc2b6 s/11/B/
|
|
|
|
4: a63e992 = 4: 5628ab7 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'new base, B...C' '
|
|
|
|
# this syntax includes the commits from master!
|
|
|
|
git range-diff --no-color topic...rebased >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
-: ------- > 1: a31b12e unrelated
|
|
|
|
1: 4de457d = 2: cc9c443 s/5/A/
|
|
|
|
2: fccce22 = 3: c5d9641 s/4/A/
|
|
|
|
3: 147e64e = 4: 28cc2b6 s/11/B/
|
|
|
|
4: a63e992 = 5: 5628ab7 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'changed commit' '
|
|
|
|
git range-diff --no-color topic...changed >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: a4b3333 s/5/A/
|
|
|
|
2: fccce22 = 2: f51d370 s/4/A/
|
|
|
|
3: 147e64e ! 3: 0559556 s/11/B/
|
|
|
|
@@ -10,7 +10,7 @@
|
|
|
|
9
|
|
|
|
10
|
|
|
|
-11
|
|
|
|
-+B
|
|
|
|
++BB
|
|
|
|
12
|
|
|
|
13
|
|
|
|
14
|
|
|
|
4: a63e992 ! 4: d966c5c s/12/B/
|
|
|
|
@@ -8,7 +8,7 @@
|
|
|
|
@@
|
|
|
|
9
|
|
|
|
10
|
|
|
|
- B
|
|
|
|
+ BB
|
|
|
|
-12
|
|
|
|
+B
|
|
|
|
13
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2018-11-09 11:18:02 +01:00
|
|
|
test_expect_success 'changed commit with --no-patch diff option' '
|
|
|
|
git range-diff --no-color --no-patch topic...changed >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: a4b3333 s/5/A/
|
|
|
|
2: fccce22 = 2: f51d370 s/4/A/
|
|
|
|
3: 147e64e ! 3: 0559556 s/11/B/
|
|
|
|
4: a63e992 ! 4: d966c5c s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'changed commit with --stat diff option' '
|
|
|
|
git range-diff --no-color --stat topic...changed >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: a4b3333 s/5/A/
|
|
|
|
a => b | 0
|
|
|
|
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
|
|
2: fccce22 = 2: f51d370 s/4/A/
|
|
|
|
a => b | 0
|
|
|
|
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
|
|
3: 147e64e ! 3: 0559556 s/11/B/
|
|
|
|
a => b | 0
|
|
|
|
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
|
|
4: a63e992 ! 4: d966c5c s/12/B/
|
|
|
|
a => b | 0
|
|
|
|
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2018-10-24 21:46:17 +02:00
|
|
|
test_expect_success 'changed commit with sm config' '
|
|
|
|
git range-diff --no-color --submodule=log topic...changed >actual &&
|
|
|
|
cat >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: a4b3333 s/5/A/
|
|
|
|
2: fccce22 = 2: f51d370 s/4/A/
|
|
|
|
3: 147e64e ! 3: 0559556 s/11/B/
|
|
|
|
@@ -10,7 +10,7 @@
|
|
|
|
9
|
|
|
|
10
|
|
|
|
-11
|
|
|
|
-+B
|
|
|
|
++BB
|
|
|
|
12
|
|
|
|
13
|
|
|
|
14
|
|
|
|
4: a63e992 ! 4: d966c5c s/12/B/
|
|
|
|
@@ -8,7 +8,7 @@
|
|
|
|
@@
|
|
|
|
9
|
|
|
|
10
|
|
|
|
- B
|
|
|
|
+ BB
|
|
|
|
-12
|
|
|
|
+B
|
|
|
|
13
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2018-09-24 19:30:53 +02:00
|
|
|
test_expect_success 'no commits on one side' '
|
|
|
|
git commit --amend -m "new message" &&
|
|
|
|
git range-diff master HEAD@{1} HEAD
|
|
|
|
'
|
|
|
|
|
2018-08-13 13:33:16 +02:00
|
|
|
test_expect_success 'changed message' '
|
|
|
|
git range-diff --no-color topic...changed-message >actual &&
|
|
|
|
sed s/Z/\ /g >expected <<-EOF &&
|
|
|
|
1: 4de457d = 1: f686024 s/5/A/
|
|
|
|
2: fccce22 ! 2: 4ab067d s/4/A/
|
|
|
|
@@ -2,6 +2,8 @@
|
|
|
|
Z
|
|
|
|
Z s/4/A/
|
|
|
|
Z
|
|
|
|
+ Also a silly comment here!
|
|
|
|
+
|
2018-08-17 22:43:54 +02:00
|
|
|
Z diff --git a/file b/file
|
|
|
|
Z --- a/file
|
|
|
|
Z +++ b/file
|
2018-08-13 13:33:16 +02:00
|
|
|
3: 147e64e = 3: b9cb956 s/11/B/
|
|
|
|
4: a63e992 = 4: 8add5f1 s/12/B/
|
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2018-08-14 03:41:16 +02:00
|
|
|
test_expect_success 'dual-coloring' '
|
|
|
|
sed -e "s|^:||" >expect <<-\EOF &&
|
|
|
|
:<YELLOW>1: a4b3333 = 1: f686024 s/5/A/<RESET>
|
|
|
|
:<RED>2: f51d370 <RESET><YELLOW>!<RESET><GREEN> 2: 4ab067d<RESET><YELLOW> s/4/A/<RESET>
|
|
|
|
: <REVERSE><CYAN>@@ -2,6 +2,8 @@<RESET>
|
|
|
|
: <RESET>
|
|
|
|
: s/4/A/<RESET>
|
|
|
|
: <RESET>
|
|
|
|
: <REVERSE><GREEN>+<RESET><BOLD> Also a silly comment here!<RESET>
|
2018-08-14 03:41:20 +02:00
|
|
|
: <REVERSE><GREEN>+<RESET>
|
2018-08-17 22:43:54 +02:00
|
|
|
: diff --git a/file b/file<RESET>
|
|
|
|
: --- a/file<RESET>
|
|
|
|
: +++ b/file<RESET>
|
2018-08-14 03:41:16 +02:00
|
|
|
:<RED>3: 0559556 <RESET><YELLOW>!<RESET><GREEN> 3: b9cb956<RESET><YELLOW> s/11/B/<RESET>
|
|
|
|
: <REVERSE><CYAN>@@ -10,7 +10,7 @@<RESET>
|
|
|
|
: 9<RESET>
|
|
|
|
: 10<RESET>
|
|
|
|
: <RED> -11<RESET>
|
|
|
|
: <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET>
|
|
|
|
: <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET>
|
|
|
|
: 12<RESET>
|
|
|
|
: 13<RESET>
|
|
|
|
: 14<RESET>
|
|
|
|
:<RED>4: d966c5c <RESET><YELLOW>!<RESET><GREEN> 4: 8add5f1<RESET><YELLOW> s/12/B/<RESET>
|
|
|
|
: <REVERSE><CYAN>@@ -8,7 +8,7 @@<RESET>
|
|
|
|
: <CYAN> @@<RESET>
|
|
|
|
: 9<RESET>
|
|
|
|
: 10<RESET>
|
|
|
|
: <REVERSE><RED>-<RESET><FAINT> BB<RESET>
|
|
|
|
: <REVERSE><GREEN>+<RESET><BOLD> B<RESET>
|
|
|
|
: <RED> -12<RESET>
|
|
|
|
: <GREEN> +B<RESET>
|
|
|
|
: 13<RESET>
|
|
|
|
EOF
|
|
|
|
git range-diff changed...changed-message --color --dual-color >actual.raw &&
|
|
|
|
test_decode_color >actual <actual.raw &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2018-07-22 11:57:14 +02:00
|
|
|
for prev in topic master..topic
|
2018-07-22 11:57:13 +02:00
|
|
|
do
|
|
|
|
test_expect_success "format-patch --range-diff=$prev" '
|
range-diff: always pass at least minimal diff options
Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.
In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in the fields we absolutely require, such as output file and
color.
Modify and extend the existing tests to try and verify that the right
contents end up in the right place.
Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.
[es: retain diff coloring when going to stdout]
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-12-03 22:21:31 +01:00
|
|
|
git format-patch --cover-letter --range-diff=$prev \
|
2018-07-22 11:57:13 +02:00
|
|
|
master..unmodified >actual &&
|
range-diff: always pass at least minimal diff options
Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.
In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in the fields we absolutely require, such as output file and
color.
Modify and extend the existing tests to try and verify that the right
contents end up in the right place.
Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.
[es: retain diff coloring when going to stdout]
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-12-03 22:21:31 +01:00
|
|
|
test_when_finished "rm 000?-*" &&
|
|
|
|
test_line_count = 5 actual &&
|
|
|
|
test_i18ngrep "^Range-diff:$" 0000-* &&
|
|
|
|
grep "= 1: .* s/5/A" 0000-* &&
|
|
|
|
grep "= 2: .* s/4/A" 0000-* &&
|
|
|
|
grep "= 3: .* s/11/B" 0000-* &&
|
|
|
|
grep "= 4: .* s/12/B" 0000-*
|
2018-07-22 11:57:13 +02:00
|
|
|
'
|
|
|
|
done
|
|
|
|
|
2018-09-12 16:31:03 +02:00
|
|
|
test_expect_success 'format-patch --range-diff as commentary' '
|
range-diff: always pass at least minimal diff options
Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.
In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in the fields we absolutely require, such as output file and
color.
Modify and extend the existing tests to try and verify that the right
contents end up in the right place.
Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.
[es: retain diff coloring when going to stdout]
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-12-03 22:21:31 +01:00
|
|
|
git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
|
|
|
|
test_when_finished "rm 0001-*" &&
|
|
|
|
test_line_count = 1 actual &&
|
|
|
|
test_i18ngrep "^Range-diff:$" 0001-* &&
|
|
|
|
grep "> 1: .* new message" 0001-*
|
2018-09-12 16:31:03 +02:00
|
|
|
'
|
|
|
|
|
2018-08-13 13:33:16 +02:00
|
|
|
test_done
|