1
0
mirror of https://github.com/git/git synced 2024-07-02 15:48:44 +00:00

diff: teach "--stat -w --exit-code" to notice differences

When options like "-w" is used while "--exit-code" option is in
effect, instead of the usual "do we have any filepair whose preimage
and postimage have different <mode,object>?" check, we need to compare
the contents of the blobs, taking into account that certain changes
are considered no-op.

With the previous step, we taught "--patch" codepath to set the
.found_changes bit correctly, even for a change that only affects
the mode and not object.  The "--stat" codepath, however, did not
set the .found_changes bit at all.  This lead to

    $ git diff --stat -w --exit-code

for a change that does have an output to exit with status 0.

Set the bit by inspecting the list of paths the diffstat output is
given for (a mode-only change will still appear as a "0-line added
0-line deleted" change) to fix it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2023-08-18 16:59:30 -07:00
parent c9a3e724cf
commit e8efd86369
2 changed files with 2 additions and 1 deletions

1
diff.c
View File

@ -6901,6 +6901,7 @@ void compute_diffstat(struct diff_options *options,
if (check_pair_status(p))
diff_flush_stat(p, options, diffstat);
}
options->found_changes = !!diffstat->nr;
}
void diff_addremove(struct diff_options *options,

View File

@ -11,7 +11,7 @@ TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-diff.sh
for opts in --patch --quiet -s
for opts in --patch --quiet -s --stat --shortstat --dirstat=lines
do
test_expect_success "status with $opts (different)" '