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

This reverts commit 11be65cfa43416219e85384a3a80d672b65b76ba, per original author's request to come up with a better strategy.

Junio C Hamano committed May 16, 2024 at 10:08 UTC e37423f081bb6e21eb1b77851ab06d72f30aee57
2 files changed +3 -38
diff.c
+3 -30
@@ -40,7 +40,6 @@
40 #include "setup.h"
41 #include "strmap.h"
42 #include "ws.h"
43 -#include "write-or-die.h"
43
44 #ifdef NO_FAST_WORKING_DIRECTORY
45 #define FAST_WORKING_DIRECTORY 0
@@ -4397,33 +4396,8 @@ static void run_external_diff(const char *pgm,
4396 diff_free_filespec_data(one);
4397 diff_free_filespec_data(two);
4398 cmd.use_shell = 1;
4400 - if (o->flags.diff_from_contents) {
4401 - int got_output = 0;
4402 - cmd.out = -1;
4403 - if (start_command(&cmd))
4404 - die(_("external diff died, stopping at %s"), name);
4405 - for (;;) {
4406 - char buffer[8192];
4407 - ssize_t len = xread(cmd.out, buffer, sizeof(buffer));
4408 - if (!len)
4409 - break;
4410 - if (len < 0)
4411 - die(_("unable to read from external diff,"
4412 - " stopping at %s"), name);
4413 - got_output = 1;
4414 - if (write_in_full(1, buffer, len) < 0)
4415 - die(_("unable to write output of external diff,"
4416 - " stopping at %s"), name);
4417 - }
4418 - close(cmd.out);
4419 - if (finish_command(&cmd))
4420 - die(_("external diff died, stopping at %s"), name);
4421 - if (got_output)
4422 - o->found_changes = 1;
4423 - } else {
4424 - if (run_command(&cmd))
4425 - die(_("external diff died, stopping at %s"), name);
4426 - }
4399 + if (run_command(&cmd))
4400 + die(_("external diff died, stopping at %s"), name);
4401
4402 remove_tempfile();
4403 }
@@ -4870,7 +4844,6 @@ void diff_setup_done(struct diff_options *options)
4844 */
4845
4846 if ((options->xdl_opts & XDF_WHITESPACE_FLAGS) ||
4873 - options->flags.exit_with_status ||
4847 options->ignore_regex_nr)
4848 options->flags.diff_from_contents = 1;
4849 else
@@ -6759,7 +6732,7 @@ void diff_flush(struct diff_options *options)
6732 if (output_format & DIFF_FORMAT_CALLBACK)
6733 options->format_callback(q, options, options->format_callback_data);
6734
6762 - if ((!output_format || output_format & DIFF_FORMAT_NO_OUTPUT) &&
6735 + if (output_format & DIFF_FORMAT_NO_OUTPUT &&
6736 options->flags.exit_with_status &&
6737 options->flags.diff_from_contents) {
6738 /*
t/t4020-diff-external.sh
-8
@@ -172,14 +172,6 @@ test_expect_success 'no diff with -diff' '
172 grep Binary out
173 '
174
175 -test_expect_success 'diff.external and --exit-code with output' '
176 - test_expect_code 1 git -c diff.external=echo diff --exit-code
177 -'
178 -
179 -test_expect_success 'diff.external and --exit-code without output' '
180 - git -c diff.external=true diff --exit-code
181 -'
182 -
175 echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
176
177 test_expect_success 'force diff with "diff"' '