]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff: fix filtering of additional headers under --remerge-diff
authorElijah Newren <newren@gmail.com>
Fri, 2 Sep 2022 03:53:29 +0000 (03:53 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 2 Sep 2022 16:22:25 +0000 (09:22 -0700)
Commit 95433eeed9 ("diff: add ability to insert additional headers for
paths", 2022-02-02) introduced the possibility of additional headers.
Because there could be conflicts with no content differences (e.g. a
modify/delete conflict resolved in favor of taking the modified file
as-is), that commit also modified the diff_queue_is_empty() and
diff_flush_patch() logic to ensure these headers were included even if
there was no associated content diff.

However, when the pickaxe is active, we really only want the remerge
conflict headers to be shown when there is an associated content diff.
Adjust the logic in these two functions accordingly.

This also removes the TEST_PASSES_SANITIZE_LEAK=true declaration from
t4069, as there is apparently some kind of memory leak with the pickaxe
code.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t4069-remerge-diff.sh

diff --git a/diff.c b/diff.c
index 7f8637f300622f8a5c3d15ba7c66480b749ecb63..2439310ae1fe2f87eefe3a4589a69ce4f6bd338f 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -5869,6 +5869,7 @@ static void diff_flush_patch(struct diff_filepair *p, struct diff_options *o)
 {
        int include_conflict_headers =
            (additional_headers(o, p->one->path) &&
+            !o->pickaxe_opts &&
             (!o->filter || filter_bit_tst(DIFF_STATUS_UNMERGED, o)));
 
        /*
@@ -5924,6 +5925,7 @@ int diff_queue_is_empty(struct diff_options *o)
        int i;
        int include_conflict_headers =
            (o->additional_path_headers &&
+            !o->pickaxe_opts &&
             (!o->filter || filter_bit_tst(DIFF_STATUS_UNMERGED, o)));
 
        if (include_conflict_headers)
index e3e6fbd97b215cb1823818c1b791eb1bce23d01e..95a16d19aec791de7067f29890414414a8b50e9c 100755 (executable)
@@ -2,7 +2,6 @@
 
 test_description='remerge-diff handling'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # This test is ort-specific
@@ -90,6 +89,22 @@ test_expect_success 'remerge-diff with both a resolved conflict and an unrelated
        test_cmp expect actual
 '
 
+test_expect_success 'pickaxe still includes additional headers for relevant changes' '
+       # reuses "expect" from the previous testcase
+
+       git log --oneline --remerge-diff -Sacht ab_resolution >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'can filter out additional headers with pickaxe' '
+       git show --remerge-diff --submodule=log --find-object=HEAD ab_resolution >actual &&
+       test_must_be_empty actual &&
+
+       git show --remerge-diff -S"not present" --all >actual &&
+       test_must_be_empty actual
+'
+
 test_expect_success 'setup non-content conflicts' '
        git switch --orphan base &&