]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Revert "diff: fix --exit-code with external diff"
authorJunio C Hamano <gitster@pobox.com>
Thu, 16 May 2024 17:08:35 +0000 (10:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 May 2024 17:08:35 +0000 (10:08 -0700)
This reverts commit 11be65cfa43416219e85384a3a80d672b65b76ba, per
original author's request to come up with a better strategy.

diff.c
t/t4020-diff-external.sh

diff --git a/diff.c b/diff.c
index 00382398d33b33fb77a5616c7787a309695b0a1e..38773317a13a0920e2d455c7d4aecdd475833118 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -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) {
                /*
index b525d16c9062a3268fb22fb8dfae4614c8c7281a..c1ac09ecc7140a3dcfcdf906bb4533ba131881de 100755 (executable)
@@ -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"' '