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>
This commit is contained in:
Taylor Blau 2024-08-15 13:31:17 -04:00 committed by Junio C Hamano
parent 42f80e361c
commit 25b78668de
2 changed files with 8 additions and 5 deletions

View 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;
}

View file

@ -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 &&