midx.c: consider annotated tags during bitmap selection
commit1dc4f1ef0d2528f405d71850d73d80ff1a571abd
authorTaylor Blau <me@ttaylorr.com>
Wed, 12 Oct 2022 22:01:52 +0000 (12 18:01 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Oct 2022 20:35:05 +0000 (13 13:35 -0700)
tree7f062217240e042499c599ad4e08f8b48e8512de
parenta8437f3cb1994cb0c93b27fdefaa0163eddcf92a
midx.c: consider annotated tags during bitmap selection

When generating a multi-pack bitmap without a `--refs-snapshot` (e.g.,
by running `git multi-pack-index write --bitmap` directly), we determine
the set of bitmap-able commits by enumerating each reference, and adding
the referrent as the tip of a reachability traversal when it appears
somewhere in the MIDX. (Any commit we encounter during the reachability
traversal then becomes a candidate for bitmap selection).

But we incorrectly avoid peeling the object at the tip of each
reference. So if we see some reference that points at an annotated tag
(which in turn points through zero or more additional annotated tags at
a commit), that we will not add it as a tip for the reachability
traversal. This means that if some commit C is only referenced through
one or more annotated tag(s), then C won't become a bitmap candidate.

Correct this by peeling the reference tips as we enumerate them to
ensure that we consider commits which are the targets of annotated tags,
in addition to commits which are referenced directly.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
midx.c
t/t5326-multi-pack-bitmaps.sh