git diff --quiet -w: check and report the status
The option -w tells the diff machinery to inspect the contents to set the exit status, instead of checking the blob object level difference alone. However, --quiet tells the diff machinery not to look at the contents, which means DIFF_FROM_CONTENTS has no chance to inspect the change. Work it around by calling diff_flush_patch() with output sent to /dev/null. Signed-off-by: Larry D'Anna <larry@elder-gods.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b599672316
commit
6977c250ac
23
diff.c
23
diff.c
@ -3520,6 +3520,29 @@ void diff_flush(struct diff_options *options)
|
||||
separator++;
|
||||
}
|
||||
|
||||
if (output_format & DIFF_FORMAT_NO_OUTPUT &&
|
||||
DIFF_OPT_TST(options, EXIT_WITH_STATUS) &&
|
||||
DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) {
|
||||
/*
|
||||
* run diff_flush_patch for the exit status. setting
|
||||
* options->file to /dev/null should be safe, becaue we
|
||||
* aren't supposed to produce any output anyway.
|
||||
*/
|
||||
if (options->close_file)
|
||||
fclose(options->file);
|
||||
options->file = fopen("/dev/null", "w");
|
||||
if (!options->file)
|
||||
die_errno("Could not open /dev/null");
|
||||
options->close_file = 1;
|
||||
for (i = 0; i < q->nr; i++) {
|
||||
struct diff_filepair *p = q->queue[i];
|
||||
if (check_pair_status(p))
|
||||
diff_flush_patch(p, options);
|
||||
if (options->found_changes)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (output_format & DIFF_FORMAT_PATCH) {
|
||||
if (separator) {
|
||||
putc(options->line_termination, options->file);
|
||||
|
Loading…
Reference in New Issue
Block a user