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"' '