pseudo-merge.c: do not generate empty pseudo-merge commits

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>

Taylor Blau committed Aug 15, 2024 at 13:31 UTC 25b78668de62ac2f503ee5957e174474bd51ae6c
2 files changed +8 -5
pseudo-merge.c
+7 -4
@@ -357,8 +357,10 @@ static void select_pseudo_merges_1(struct bitmap_writer *writer,
357 p = commit_list_append(c, p);
358 } while (j % group->stable_size);
359
360 - bitmap_writer_push_commit(writer, merge, 1);
361 - writer->pseudo_merges_nr++;
360 + if (merge->parents) {
361 + bitmap_writer_push_commit(writer, merge, 1);
362 + writer->pseudo_merges_nr++;
363 + }
364 }
365
366 /* 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,
400 p = commit_list_append(c, p);
401 }
402
401 - bitmap_writer_push_commit(writer, merge, 1);
402 - writer->pseudo_merges_nr++;
403 + if (merge->parents) {
404 + bitmap_writer_push_commit(writer, merge, 1);
405 + writer->pseudo_merges_nr++; }
406 if (end >= matches->unstable_nr)
407 break;
408 }
t/t5333-pseudo-merge-bitmaps.sh
+1 -1
@@ -390,7 +390,7 @@ test_expect_success 'pseudo-merge reuse' '
390 )
391 '
392
393 -test_expect_failure 'empty pseudo-merge group' '
393 +test_expect_success 'empty pseudo-merge group' '
394 git init pseudo-merge-empty-group &&
395 (
396 cd pseudo-merge-empty-group &&