diff options
-rwxr-xr-x | git-add--interactive.perl | 8 | ||||
-rwxr-xr-x | t/t3701-add-interactive.sh | 8 |
2 files changed, 16 insertions, 0 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 964c3a7542..ff02008abe 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -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 => [], diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh index 64fe56c3d5..9bb17f91b2 100755 --- a/t/t3701-add-interactive.sh +++ b/t/t3701-add-interactive.sh @@ -404,6 +404,14 @@ test_expect_success TTY 'diffFilter filters diff' ' 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 && |