]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pseudo-merge.c: do not generate empty pseudo-merge commits
authorTaylor Blau <me@ttaylorr.com>
Thu, 15 Aug 2024 17:31:17 +0000 (13:31 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 15 Aug 2024 18:29:15 +0000 (11:29 -0700)
The previous commit demonstrated it is possible to generate empty
pseudo-merge commits, which is not useful as such pseudo-merges carry no
information.

Ensure that we only generate non-empty groups by not pushing a new
commit onto the bitmap_writer when that commit has no parents.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pseudo-merge.c
t/t5333-pseudo-merge-bitmaps.sh

index f0fde13c47133d7a1761aa6c9b300a947ff51c79..6422be979c2d5832e92a1270291b01dc9e81123f 100644 (file)
@@ -357,8 +357,10 @@ static void select_pseudo_merges_1(struct bitmap_writer *writer,
                        p = commit_list_append(c, p);
                } while (j % group->stable_size);
 
-               bitmap_writer_push_commit(writer, merge, 1);
-               writer->pseudo_merges_nr++;
+               if (merge->parents) {
+                       bitmap_writer_push_commit(writer, merge, 1);
+                       writer->pseudo_merges_nr++;
+               }
        }
 
        /* make up to group->max_merges pseudo merges for unstable commits */
@@ -398,8 +400,9 @@ static void select_pseudo_merges_1(struct bitmap_writer *writer,
                        p = commit_list_append(c, p);
                }
 
-               bitmap_writer_push_commit(writer, merge, 1);
-               writer->pseudo_merges_nr++;
+               if (merge->parents) {
+                       bitmap_writer_push_commit(writer, merge, 1);
+                       writer->pseudo_merges_nr++; }
                if (end >= matches->unstable_nr)
                        break;
        }
index 02886913402a084311ccf9497123fe859a98d79c..aa1a7d26f1ce7ea28f65d64e5aaa51e6099da811 100755 (executable)
@@ -390,7 +390,7 @@ test_expect_success 'pseudo-merge reuse' '
        )
 '
 
-test_expect_failure 'empty pseudo-merge group' '
+test_expect_success 'empty pseudo-merge group' '
        git init pseudo-merge-empty-group &&
        (
                cd pseudo-merge-empty-group &&