git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/6] object-name: convert to use `packfile_store_get_all_packs()`

From
Taylor Blau <me@ttaylorr.com>
Date
Oct 8, 2025, 20:21 UTC
Message-ID
<aObHw6rxrQG22b5B@nand.local>
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:
Show 24 quoted lines
> 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.
Show 13 quoted lines
> 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.

Show 8 quoted lines
> @@ -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

Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 3 of 27 in “packfile: remove `packfile_store_get_packs()`”
  1. 0/6 packfile: remove `packfile_store_get_packs()`Patrick Steinhardt, Oct 7, 2025
  2. 1/6 object-name: convert to use `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 7, 2025
  3. Taylor BlauOct 8, 2025
  4. 2/6 builtin/gc: convert to use `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 7, 2025
  5. Taylor BlauOct 8, 2025
  6. Patrick SteinhardtOct 9, 2025
  7. 3/6 builtin/grep: simplify how we preload packsPatrick Steinhardt, Oct 7, 2025
  8. Taylor BlauOct 8, 2025
  9. 4/6 packfile: drop `packfile_store_get_packs()`Patrick Steinhardt, Oct 7, 2025
  10. Taylor BlauOct 8, 2025
  11. 5/6 packfile: introduce macro to iterate through packsPatrick Steinhardt, Oct 7, 2025
  12. Taylor BlauOct 8, 2025
  13. Patrick SteinhardtOct 9, 2025
  14. 6/6 packfile: rename `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 7, 2025
  15. Taylor BlauOct 8, 2025
  16. Patrick SteinhardtOct 9, 2025
  17. 0/6 packfile: remove `packfile_store_get_packs()`Patrick Steinhardt, Oct 9, 2025
  18. 1/6 object-name: convert to use `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 9, 2025
  19. Justin ToblerOct 14, 2025
  20. 2/6 builtin/gc: convert to use `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 9, 2025
  21. 3/6 builtin/grep: simplify how we preload packsPatrick Steinhardt, Oct 9, 2025
  22. 4/6 packfile: drop `packfile_store_get_packs()`Patrick Steinhardt, Oct 9, 2025
  23. Justin ToblerOct 14, 2025
  24. 5/6 packfile: introduce macro to iterate through packsPatrick Steinhardt, Oct 9, 2025
  25. Justin ToblerOct 14, 2025
  26. 6/6 packfile: rename `packfile_store_get_all_packs()`Patrick Steinhardt, Oct 9, 2025
  27. Justin ToblerOct 14, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.