]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff: drop save/restore of color_moved in dry-run mode
authorJeff King <peff@peff.net>
Fri, 24 Oct 2025 17:07:53 +0000 (13:07 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Oct 2025 17:15:21 +0000 (10:15 -0700)
When running a dry-run content-level diff to check whether a "--quiet"
diff has any changes, we have always unset the color_moved variable
since the feature was added in 2e2d5ac184 (diff.c: color moved lines
differently, 2017-06-30). The reasoning is not given explicitly there,
but presumably the idea is that since color_moved requires a lot of
extra computation to match lines but does not actually affect the
found_changes flag, we want to skip it.

Later, in 3da4413dbc (diff: make sure the other caller of
diff_flush_patch_quietly() is silent, 2025-10-22) we copied the same
idea for other dry-run diffs.

But neither spot actually needs to reset this flag at all, because
diff_flush_patch() will not ever compute color_moved. Nor could it, as
it is only looking at a single file-pair, and we detect moves across
files. So color_moved is checked only when we are actually doing real
DIFF_FORMAT_PATCH output, and call diff_flush_patch_all_file_pairs().

So we can get rid of these extra lines to save and restore the
color_moved flag without changing the behavior at all. (Note that there
is no "restore" to drop for the second caller, as we know at that point
we are not generating any output and can just leave the feature
disabled).

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 39029cc096dbbb4d61b546e94a26d732efe8dbd8..d83d8987028cbd2105d9bb51eba5b69bd25cd380 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -6839,11 +6839,9 @@ void diff_flush(struct diff_options *options)
                 * make sure diff_Flush_patch_quietly() to be silent.
                 */
                FILE *dev_null = NULL;
-               int saved_color_moved = options->color_moved;
 
                if (options->flags.diff_from_contents) {
                        dev_null = xfopen("/dev/null", "w");
-                       options->color_moved = 0;
                }
                for (i = 0; i < q->nr; i++) {
                        struct diff_filepair *p = q->queue[i];
@@ -6865,7 +6863,6 @@ void diff_flush(struct diff_options *options)
                }
                if (options->flags.diff_from_contents) {
                        fclose(dev_null);
-                       options->color_moved = saved_color_moved;
                }
                separator++;
        }
@@ -6925,7 +6922,6 @@ void diff_flush(struct diff_options *options)
                diff_free_file(options);
                options->file = xfopen("/dev/null", "w");
                options->close_file = 1;
-               options->color_moved = 0;
                for (i = 0; i < q->nr; i++) {
                        struct diff_filepair *p = q->queue[i];
                        if (check_pair_status(p))