]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff: drop dry-run redirection to /dev/null
authorJeff King <peff@peff.net>
Fri, 24 Oct 2025 17:09:25 +0000 (13:09 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Oct 2025 17:15:22 +0000 (10:15 -0700)
As an added protection against dry-run diffs accidentally producing
output, we redirect diff_options.file to /dev/null. But as of the
previous patch, this now does nothing, since dry-run diffs are
implemented by setting "file" to NULL.

So we can drop this extra code with no change in behavior. This is
effectively a revert of 623f7af284 (diff: restore redirection to
/dev/null for diff_from_contents, 2025-10-17) and 3da4413dbc (diff: make
sure the other caller of diff_flush_patch_quietly() is silent,
2025-10-22), but:

  1. We get a conflict because we already dropped the color_moved
     handling in an earlier patch. But we just resolve the conflicts to
     "theirs" (removing all of the code).

  2. We retain the test from 623f7af284.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c

diff --git a/diff.c b/diff.c
index a8d50fb1fcd640033c2426ee067aea6437d327c0..9169ccfaa95e0d5a71534bf2b7481f9c9fadb315 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -6835,35 +6835,18 @@ void diff_flush(struct diff_options *options)
                             DIFF_FORMAT_NAME |
                             DIFF_FORMAT_NAME_STATUS |
                             DIFF_FORMAT_CHECKDIFF)) {
-               /*
-                * make sure diff_Flush_patch_quietly() to be silent.
-                */
-               FILE *dev_null = NULL;
-
-               if (options->flags.diff_from_contents) {
-                       dev_null = xfopen("/dev/null", "w");
-               }
                for (i = 0; i < q->nr; i++) {
                        struct diff_filepair *p = q->queue[i];
 
                        if (!check_pair_status(p))
                                continue;
 
-                       if (options->flags.diff_from_contents) {
-                               FILE *saved_file = options->file;
-                               int found_changes;
+                       if (options->flags.diff_from_contents &&
+                           !diff_flush_patch_quietly(p, options))
+                               continue;
 
-                               options->file = dev_null;
-                               found_changes = diff_flush_patch_quietly(p, options);
-                               options->file = saved_file;
-                               if (!found_changes)
-                                       continue;
-                       }
                        flush_one_pair(p, options);
                }
-               if (options->flags.diff_from_contents) {
-                       fclose(dev_null);
-               }
                separator++;
        }
 
@@ -6914,14 +6897,6 @@ void diff_flush(struct diff_options *options)
        if (output_format & DIFF_FORMAT_NO_OUTPUT &&
            options->flags.exit_with_status &&
            options->flags.diff_from_contents) {
-               /*
-                * run diff_flush_patch for the exit status. setting
-                * options->file to /dev/null should be safe, because we
-                * aren't supposed to produce any output anyway.
-                */
-               diff_free_file(options);
-               options->file = xfopen("/dev/null", "w");
-               options->close_file = 1;
                for (i = 0; i < q->nr; i++) {
                        struct diff_filepair *p = q->queue[i];
                        if (check_pair_status(p))