Browse Source

diff: correct interaction between --exit-code and -I<pattern>

Just like "git diff -w --exit-code" should exit with 0 when ignoring
whitespace differences results in no changes shown, if ignoring
certain changes with "git diff -I<pattern> --exit-code" result in an
empty patch, we should exit with 0.

The test suite did not cover the interaction between "--exit-code"
and "-w"; add one while adding a new test for "--exit-code" + "-I".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 4 years ago
parent
commit
50f0439490
  1. 3
      diff.c
  2. 24
      t/t4015-diff-whitespace.sh

3
diff.c

@ -4602,7 +4602,8 @@ void diff_setup_done(struct diff_options *options) @@ -4602,7 +4602,8 @@ void diff_setup_done(struct diff_options *options)
* inside contents.
*/

if ((options->xdl_opts & XDF_WHITESPACE_FLAGS))
if ((options->xdl_opts & XDF_WHITESPACE_FLAGS) ||
options->ignore_regex_nr)
options->flags.diff_from_contents = 1;
else
options->flags.diff_from_contents = 0;

24
t/t4015-diff-whitespace.sh

@ -567,6 +567,30 @@ test_expect_success '--check and --quiet are not exclusive' ' @@ -567,6 +567,30 @@ test_expect_success '--check and --quiet are not exclusive' '
git diff --check --quiet
'

test_expect_success '-w and --exit-code interact sensibly' '
test_when_finished "git checkout x" &&
{
test_seq 15 &&
echo " 16"
} >x &&
test_must_fail git diff --exit-code &&
git diff -w >actual &&
test_must_be_empty actual &&
git diff -w --exit-code
'

test_expect_success '-I and --exit-code interact sensibly' '
test_when_finished "git checkout x" &&
{
test_seq 15 &&
echo " 16"
} >x &&
test_must_fail git diff --exit-code &&
git diff -I. >actual &&
test_must_be_empty actual &&
git diff -I. --exit-code
'

test_expect_success 'check staged with no whitespace errors' '
echo "foo();" >x &&
git add x &&

Loading…
Cancel
Save