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

Re: [PATCH 10/17] refs: improve verification for-each-ref options

From
Karthik Nayak <karthik.188@gmail.com>
Date
Feb 23, 2026, 09:09 UTC
Message-ID
<CAOLa=ZQa5riqB37bVL0_2KZbXS3V2L=iHqpAwMYom1bjKiNsRg@mail.gmail.com>
In-Reply-To
<20260220-pks-refs-for-each-unification-v1-10-17170bd99de1@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 33 quoted lines
> Improve verification of the passed-in for-each-ref options:
>
>   - Require that the `refs` store must be given. It's arguably very
>     surprising that we simply return successfully in case the ref store
>     is a `NULL` pointer.
>
>   - When expected to trim ref prefixes we will `BUG()` in case the
>     refname would become empty or in case we're expected to trim a
>     longer prefix than the refname is long. As such, this case is only
>     guaranteed to _not_ `BUG()` in case the caller also specified a
>     prefix. And furthermore, that prefix must end in a trailing slash,
>     as otherwise it may produce an exact match that could lead us to
>     trim to the empty string.
>
> An audit shows that there are no callsites that rely on either of these
> behaviours, so this should not result in a functional change.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  refs.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/refs.c b/refs.c
> index 20d34faeb5..3b676432b4 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -1855,7 +1855,18 @@ int refs_for_each_ref_ext(struct ref_store *refs,
>  	int ret;
>
>  	if (!refs)
> -		return 0;
> +		BUG("no refs passed");
> +
Nit: s/refs/ref store/, mostly from a readability point, but since this
is a BUG(), I think its okay to leave as is.
Show 16 quoted lines
> +	if (opts->trim_prefix) {
> +		size_t prefix_len;
> +
> +		if (!opts->prefix)
> +			BUG("trimming only allowed with a prefix");
> +
> +		prefix_len = strlen(opts->prefix);
> +		if (prefix_len == opts->trim_prefix && opts->prefix[prefix_len - 1] != '/')
> +			BUG("ref pattern must end in a trailing slash when trimming");
> +	}
>
>  	if (opts->pattern) {
>  		if (!opts->prefix && !starts_with(opts->pattern, "refs/"))
>
> --
> 2.53.0.414.gf7e9f6c205.dirty
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 23 of 34 in “refs: unify `refs_for_each_*()` functions”
  1. 00/17 refs: unify `refs_for_each_*()` functionsPatrick Steinhardt, Feb 20, 2026
  2. 01/17 refs: move `refs_head_ref_namespaced()`Patrick Steinhardt, Feb 20, 2026
  3. Karthik NayakFeb 23, 2026
  4. Patrick SteinhardtFeb 23, 2026
  5. 02/17 refs: move `do_for_each_ref_flags` further upPatrick Steinhardt, Feb 20, 2026
  6. 03/17 refs: rename `do_for_each_ref_flags`Patrick Steinhardt, Feb 20, 2026
  7. 04/17 refs: rename `each_ref_fn`Patrick Steinhardt, Feb 20, 2026
  8. Karthik NayakFeb 23, 2026
  9. 05/17 refs: remove unused `refs_for_each_include_root_ref()`Patrick Steinhardt, Feb 20, 2026
  10. Oswald BuddenhagenFeb 20, 2026
  11. Patrick SteinhardtFeb 20, 2026
  12. 06/17 refs: introduce `refs_for_each_ref_ext`Patrick Steinhardt, Feb 20, 2026
  13. Karthik NayakFeb 23, 2026
  14. 07/17 refs: speed up `refs_for_each_glob_ref_in()`Patrick Steinhardt, Feb 20, 2026
  15. Karthik NayakFeb 23, 2026
  16. Patrick SteinhardtFeb 23, 2026
  17. 08/17 refs: generalize `refs_for_each_namespaced_ref()`Patrick Steinhardt, Feb 20, 2026
  18. Karthik NayakFeb 23, 2026
  19. Patrick SteinhardtFeb 23, 2026
  20. 09/17 refs: generalize `refs_for_each_fullref_in_prefixes()`Patrick Steinhardt, Feb 20, 2026
  21. Karthik NayakFeb 23, 2026
  22. 10/17 refs: improve verification for-each-ref optionsPatrick Steinhardt, Feb 20, 2026
  23. Karthik NayakFeb 23, 2026
  24. 11/17 refs: replace `refs_for_each_ref_in()`Patrick Steinhardt, Feb 20, 2026
  25. Karthik NayakFeb 23, 2026
  26. Patrick SteinhardtFeb 23, 2026
  27. Karthik NayakFeb 23, 2026
  28. 12/17 refs: replace `refs_for_each_rawref()`Patrick Steinhardt, Feb 20, 2026
  29. 13/17 refs: replace `refs_for_each_rawref_in()`Patrick Steinhardt, Feb 20, 2026
  30. 14/17 refs: replace `refs_for_each_glob_ref_in()`Patrick Steinhardt, Feb 20, 2026
  31. 15/17 refs: replace `refs_for_each_glob_ref()`Patrick Steinhardt, Feb 20, 2026
  32. 16/17 refs: replace `refs_for_each_namespaced_ref()`Patrick Steinhardt, Feb 20, 2026
  33. 17/17 refs: replace `refs_for_each_fullref_in()`Patrick Steinhardt, Feb 20, 2026
  34. Karthik NayakFeb 23, 2026

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.