From: Taylor Blau <me@ttaylorr.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/6] object-name: convert to use `packfile_store_get_all_packs()`
Date: Wed, 8 Oct 2025 16:21:23 -0400 [thread overview]
Message-ID: <aObHw6rxrQG22b5B@nand.local> (raw)
In-Reply-To: <20251007-pks-packfiles-convert-get-all-v1-1-428227657a89@pks.im>
On Tue, Oct 07, 2025 at 02:41:07PM +0200, Patrick Steinhardt wrote:
> 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.
Well explained.
> diff --git a/object-name.c b/object-name.c
> index f6902e140d..4e62bfa330 100644
> --- a/object-name.c
> +++ b/object-name.c
> @@ -213,7 +213,7 @@ static void find_short_packed_object(struct disambiguate_state *ds)
> unique_in_midx(m, ds);
> }
>
> - for (p = packfile_store_get_packs(ds->repo->objects->packfiles); p && !ds->ambiguous;
> + for (p = packfile_store_get_all_packs(ds->repo->objects->packfiles); p && !ds->ambiguous;
> p = p->next)
> unique_in_pack(p, ds);
> }
Good. As you noted, this function already handles MIDX'd packs as a
separate case, and `unique_in_pack()` discards any packs that have
their `multi_pack_index` bit set. So this caller can be converted
without issue.
> @@ -805,7 +805,7 @@ static void find_abbrev_len_packed(struct min_abbrev_data *mad)
> find_abbrev_len_for_midx(m, mad);
> }
>
> - for (p = packfile_store_get_packs(mad->repo->objects->packfiles); p; p = p->next)
> + for (p = packfile_store_get_all_packs(mad->repo->objects->packfiles); p; p = p->next)
> find_abbrev_len_for_pack(p, mad);
> }
And the exact same is true for this case as well. Looking good.
Thanks,
Taylor
next prev parent reply other threads:[~2025-10-08 20:21 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-07 12:41 [PATCH 0/6] packfile: remove `packfile_store_get_packs()` Patrick Steinhardt
2025-10-07 12:41 ` [PATCH 1/6] object-name: convert to use `packfile_store_get_all_packs()` Patrick Steinhardt
2025-10-08 20:21 ` Taylor Blau [this message]
2025-10-07 12:41 ` [PATCH 2/6] builtin/gc: " Patrick Steinhardt
2025-10-08 20:25 ` Taylor Blau
2025-10-09 6:36 ` Patrick Steinhardt
2025-10-07 12:41 ` [PATCH 3/6] builtin/grep: simplify how we preload packs Patrick Steinhardt
2025-10-08 20:43 ` Taylor Blau
2025-10-07 12:41 ` [PATCH 4/6] packfile: drop `packfile_store_get_packs()` Patrick Steinhardt
2025-10-08 20:44 ` Taylor Blau
2025-10-07 12:41 ` [PATCH 5/6] packfile: introduce macro to iterate through packs Patrick Steinhardt
2025-10-08 21:15 ` Taylor Blau
2025-10-09 6:36 ` Patrick Steinhardt
2025-10-07 12:41 ` [PATCH 6/6] packfile: rename `packfile_store_get_all_packs()` Patrick Steinhardt
2025-10-08 20:48 ` Taylor Blau
2025-10-09 6:36 ` Patrick Steinhardt
2025-10-09 8:01 ` [PATCH v2 0/6] packfile: remove `packfile_store_get_packs()` Patrick Steinhardt
2025-10-09 8:01 ` [PATCH v2 1/6] object-name: convert to use `packfile_store_get_all_packs()` Patrick Steinhardt
2025-10-14 19:07 ` Justin Tobler
2025-10-09 8:01 ` [PATCH v2 2/6] builtin/gc: " Patrick Steinhardt
2025-10-09 8:01 ` [PATCH v2 3/6] builtin/grep: simplify how we preload packs Patrick Steinhardt
2025-10-09 8:01 ` [PATCH v2 4/6] packfile: drop `packfile_store_get_packs()` Patrick Steinhardt
2025-10-14 19:11 ` Justin Tobler
2025-10-09 8:01 ` [PATCH v2 5/6] packfile: introduce macro to iterate through packs Patrick Steinhardt
2025-10-14 19:17 ` Justin Tobler
2025-10-09 8:01 ` [PATCH v2 6/6] packfile: rename `packfile_store_get_all_packs()` Patrick Steinhardt
2025-10-14 19:19 ` [PATCH v2 0/6] packfile: remove `packfile_store_get_packs()` Justin Tobler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aObHw6rxrQG22b5B@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.