Revert "diff: fix --exit-code with external diff"

This reverts commit 11be65cfa4, per
original author's request to come up with a better strategy.
This commit is contained in:
Junio C Hamano 2024-05-16 10:08:35 -07:00
parent 11be65cfa4
commit e37423f081
2 changed files with 3 additions and 38 deletions

33
diff.c
View file

@ -40,7 +40,6 @@
#include "setup.h"
#include "strmap.h"
#include "ws.h"
#include "write-or-die.h"
#ifdef NO_FAST_WORKING_DIRECTORY
#define FAST_WORKING_DIRECTORY 0
@ -4397,33 +4396,8 @@ static void run_external_diff(const char *pgm,
diff_free_filespec_data(one);
diff_free_filespec_data(two);
cmd.use_shell = 1;
if (o->flags.diff_from_contents) {
int got_output = 0;
cmd.out = -1;
if (start_command(&cmd))
die(_("external diff died, stopping at %s"), name);
for (;;) {
char buffer[8192];
ssize_t len = xread(cmd.out, buffer, sizeof(buffer));
if (!len)
break;
if (len < 0)
die(_("unable to read from external diff,"
" stopping at %s"), name);
got_output = 1;
if (write_in_full(1, buffer, len) < 0)
die(_("unable to write output of external diff,"
" stopping at %s"), name);
}
close(cmd.out);
if (finish_command(&cmd))
die(_("external diff died, stopping at %s"), name);
if (got_output)
o->found_changes = 1;
} else {
if (run_command(&cmd))
die(_("external diff died, stopping at %s"), name);
}
if (run_command(&cmd))
die(_("external diff died, stopping at %s"), name);
remove_tempfile();
}
@ -4870,7 +4844,6 @@ void diff_setup_done(struct diff_options *options)
*/
if ((options->xdl_opts & XDF_WHITESPACE_FLAGS) ||
options->flags.exit_with_status ||
options->ignore_regex_nr)
options->flags.diff_from_contents = 1;
else
@ -6759,7 +6732,7 @@ void diff_flush(struct diff_options *options)
if (output_format & DIFF_FORMAT_CALLBACK)
options->format_callback(q, options, options->format_callback_data);
if ((!output_format || output_format & DIFF_FORMAT_NO_OUTPUT) &&
if (output_format & DIFF_FORMAT_NO_OUTPUT &&
options->flags.exit_with_status &&
options->flags.diff_from_contents) {
/*

View file

@ -172,14 +172,6 @@ test_expect_success 'no diff with -diff' '
grep Binary out
'
test_expect_success 'diff.external and --exit-code with output' '
test_expect_code 1 git -c diff.external=echo diff --exit-code
'
test_expect_success 'diff.external and --exit-code without output' '
git -c diff.external=true diff --exit-code
'
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
test_expect_success 'force diff with "diff"' '