Merge branch 'jk/add-i-diff-filter'
The "interactive.diffFilter" used by "git add -i" must retain one-to-one correspondence between its input and output, but it was not enforced and caused end-user confusion. We now at least make sure the filtered result has the same number of lines as its input to detect a broken filter. * jk/add-i-diff-filter: add--interactive: detect bogus diffFilter output t3701: add a test for interactive.diffFilter
This commit is contained in:
commit
c5e2df04ac
@ -705,6 +705,14 @@ sub parse_diff {
|
||||
}
|
||||
my (@hunk) = { TEXT => [], DISPLAY => [], TYPE => 'header' };
|
||||
|
||||
if (@colored && @colored != @diff) {
|
||||
print STDERR
|
||||
"fatal: mismatched output from interactive.diffFilter\n",
|
||||
"hint: Your filter must maintain a one-to-one correspondence\n",
|
||||
"hint: between its input and output lines.\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
for (my $i = 0; $i < @diff; $i++) {
|
||||
if ($diff[$i] =~ /^@@ /) {
|
||||
push @hunk, { TEXT => [], DISPLAY => [],
|
||||
|
@ -397,6 +397,26 @@ test_expect_success TTY 'diffs can be colorized' '
|
||||
grep "$(printf "\\033")" output
|
||||
'
|
||||
|
||||
test_expect_success TTY 'diffFilter filters diff' '
|
||||
git reset --hard &&
|
||||
|
||||
echo content >test &&
|
||||
test_config interactive.diffFilter "sed s/^/foo:/" &&
|
||||
printf y | test_terminal git add -p >output 2>&1 &&
|
||||
|
||||
# avoid depending on the exact coloring or content of the prompts,
|
||||
# and just make sure we saw our diff prefixed
|
||||
grep foo:.*content output
|
||||
'
|
||||
|
||||
test_expect_success TTY 'detect bogus diffFilter output' '
|
||||
git reset --hard &&
|
||||
|
||||
echo content >test &&
|
||||
test_config interactive.diffFilter "echo too-short" &&
|
||||
printf y | test_must_fail test_terminal git add -p
|
||||
'
|
||||
|
||||
test_expect_success 'patch-mode via -i prompts for files' '
|
||||
git reset --hard &&
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user