]> git.feebdaed.xyz Git - 0xmirror/git.git/commit
object-name: convert to use `packfile_store_get_all_packs()`
authorPatrick Steinhardt <ps@pks.im>
Thu, 9 Oct 2025 08:01:35 +0000 (10:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Oct 2025 21:42:39 +0000 (14:42 -0700)
commit181acc5f7f5f3d569ab0ab0d69b211371e6d2c48
tree60faec2282257d3f687e1315237047eb0a73d60d
parent057a94fbbb06c754c84ccc02783c348924d4c428
object-name: convert to use `packfile_store_get_all_packs()`

When searching for abbreviated or when trying to disambiguate object IDs
we do this in two steps:

  1. We search through the multi-pack index.

  2. We search through all packfiles not part of any multi-pack index.

The second step uses `packfile_store_get_packs()`, which knows to skip
loading any packfiles that are indexed by an MIDX; this is exactly what
we want.

But that function is somewhat problematic, as its behaviour is stateful
and is influenced by `packfile_store_get_all_packs()`. This function
basically does the same as `packfile_store_get_packs()`, but in addition
it also loads all packfiles indexed by an MIDX. The problem here is that
both of these functions act on the same linked list of packfiles, and
thus depending on whether or not `get_all_packs()` was called the result
returned by `get_packs()` will be different. Consequently, all callers
of `get_packs()` need to be prepared to see MIDX'd packs even though
these should in theory be excluded.

This interface is confusing and thus potentially dangerous, which is why
we're converting all callers of `get_packs()` to use `get_all_packs()`
instead.

Do so for the above functions in "object-name.c". As explained, we
already know to skip any MIDX'd packs in both `find_abbrev_len_packed()`
and `find_short_packed_object()`, so it's fine to start loading MIDX'd
packfiles.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
object-name.c