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

Re: [PATCH 1/1] ls-refs.c: minimize number of refs visited

From
Taylor Blau <me@ttaylorr.com>
Date
Jan 19, 2021, 22:23 UTC
Message-ID
<YAdb6GmVXWLEGkP1@nand.local>
In-Reply-To
<YAdaAsP6vCQla/Ar@coredump.intra.peff.net>
On Tue, Jan 19, 2021 at 05:15:30PM -0500, Jeff King wrote:
Show 22 quoted lines
> On Tue, Jan 19, 2021 at 04:59:18PM -0500, Jeff King wrote:
>
> > > > What does "delimited by /" mean?
> > >
> > > Ah, I just meant that it looks for the longest common prefix where it
> > > will only split at '/' characters. But, that's not right at all:
> > > find_longest_prefixes_1() will happily split anywhere there is a
> > > difference.
> >
> > Right. We thought in early revisions of the ref-filter work that we
> > might have to split on path components, but it turns out that the
> > underlying ref code is happy to take arbitrary prefixes. And it's that
> > code which defines our strategy; Even if the ls-refs code wanted to
> > allow only full path components, it should be using the limiting from
> > for_each_ref_in() only as an optimization, and applying its own
> > filtering to the output.
>
> Having now looked carefully at the ls-refs code, it's a pure
> prefix-match, too. So I think we _could_ rely on for_each_fullref_in()
> returning us the correct full results, and not checking it further in
> send_ref(). But I kind of like keeping it there as an extra check (and
> one which could in theory grow more logic later).
Hmm. What if the caller asks for:
  ref-prefix refs/tags/a
  ref-prefix refs/tags/b
?

The LCP between those two is refs/tags, so send_ref() will presumably get lots of reuslts that it doesn't care about (assuming there are tags besides a and b).

Thanks, Taylor

Previous: Jeff KingNext: Jeff King
Message 24 of 27 in “Re: [PATCH 1/1] ls-refs.c: minimize number of refs visited”
  1. Jacob VosmaerJan 19, 2021
  2. 0/2 ls-refs: only traverse through longest common ref prefixTaylor Blau, Jan 19, 2021
  3. 2/2 ls-refs.c: traverse longest common ref prefixTaylor Blau, Jan 19, 2021
  4. Jeff KingJan 19, 2021
  5. Taylor BlauJan 19, 2021
  6. Jeff KingJan 20, 2021
  7. Jacob VosmaerJan 20, 2021
  8. 1/2 refs: expose 'for_each_fullref_in_prefixes'Taylor Blau, Jan 19, 2021
  9. 0/3 ls-refs: traverse prefixes of disjoint "ref-prefix" setsTaylor Blau, Jan 20, 2021
  10. 2/3 ls-refs.c: initialize 'prefixes' before using itTaylor Blau, Jan 20, 2021
  11. Jeff KingJan 20, 2021
  12. Taylor BlauJan 20, 2021
  13. Jacob VosmaerJan 20, 2021
  14. 3/3 ls-refs.c: traverse prefixes of disjoint "ref-prefix" setsTaylor Blau, Jan 20, 2021
  15. 1/3 refs: expose 'for_each_fullref_in_prefixes'Taylor Blau, Jan 20, 2021
  16. Jeff KingJan 20, 2021
  17. Taylor BlauJan 20, 2021
  18. Junio C HamanoJan 23, 2021
  19. Taylor BlauJan 25, 2021
  20. Junio C HamanoJan 23, 2021
  21. Taylor BlauJan 19, 2021
  22. Jeff KingJan 19, 2021
  23. Jeff KingJan 19, 2021
  24. Taylor BlauJan 19, 2021
  25. Jeff KingJan 19, 2021
  26. Jeff KingJan 19, 2021
  27. Taylor BlauJan 19, 2021

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.