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

Re: [PATCH 2/2] ref-filter: support filtering of operational refs

From
Karthik Nayak <karthik.188@gmail.com>
Date
Jan 4, 2024, 11:31 UTC
Message-ID
<CAOLa=ZStP6F1njTeoQZwN58k+_0r9LT7z-wg2819FWZPq90wQg@mail.gmail.com>
In-Reply-To
<ZZWg5JvjQymy2wcn@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
Show 31 quoted lines
> On Wed, Jan 03, 2024 at 09:59:13AM -0800, Junio C Hamano wrote:
>> Patrick Steinhardt <ps@pks.im> writes:
>>
>> >> I think we should tighten things up over time.  First by teaching
>> >> the ref backend that anything that is not a pseudoref, HEAD or a
>> >> proper ref (one item of whose definition is "lives under refs/
>> >> hierarchy) should not resolve_ref() successfully.  That should
>> >> correctly fail things like
>> >>
>> >>     $ git rev-parse worktrees/$name/bisect/bad
>> >>     $ git update-ref foo/bar HEAD
>> > ...
>> > Yeah, agreed, that's something we should do. I do wonder whether this
>> > will break existing usecases, but in any case I'd rather consider it an
>> > accident that it is possible to write (and read) such refs in the first
>> > place.
>>
>> Unfortunately, the worktrees/$name/refs/bisect/bad and its friends
>> are documented in "git worktree" and the refs.c layer is aware of
>> the "main-worktree/" and "worktrees/" hierarchy, so while I still
>> think it is a good long-term direction to make it impossible to
>> create random refs like "foo/bar" and "resf/heads/master" via the
>> commands like "git update-ref", we cannot limit ourselves only to
>> "refs/" hierarchy.
>
> Ah, I first wanted to point this out, but then noticed that you didn't
> include the "refs/" prefix in "worktrees/$name/bisect/bad" and thought
> this was intentional. But yes, per-worktree refs need to stay supported,
> weird as they may be.
>
> Patrick

Thanks all for the discussion, I'll try to summarize the path forward as per my understanding.

1. We want to introduce a way to output all refs. This includes refs
under "refs/", pseudo refs, HEAD, and any other ref like objects under
$GIT_DIR. The reasoning being that users are allowed currently to create
refs without any directory restrictions. So with the upcoming reftable
backend, it becomes important to provide a utility to print all the refs
held in the reftable. Ideally we want to restrict such ref's from being
created but for the time being, since thats allowed, we should also
provide the utility to print such refs.
2. In the files backend, this would involve iterating through the
$GIT_DIR and finding all ref-like objects and printing them.
3. To expose this to the user, we could do something like
   $ git for-each-ref ""

Which is a natural extension of the current syntax, where the empty string would imply that we do not filter to the "refs/" directory. It is still not clear whether we should support "worktrees".

Any corrections here?
Previous: Patrick SteinhardtNext: Junio C Hamano
Message 20 of 27 in “[RFC 0/2] Initial changes to support printing all refs”
  1. Karthik NayakDec 21, 2023
  2. 1/2 refs: introduce the `refs_single_ref` functionKarthik Nayak, Dec 21, 2023
  3. 2/2 ref-filter: support filtering of operational refsKarthik Nayak, Dec 21, 2023
  4. Junio C HamanoDec 21, 2023
  5. Karthik NayakDec 22, 2023
  6. Junio C HamanoDec 26, 2023
  7. Karthik NayakJan 2, 2024
  8. Junio C HamanoJan 2, 2024
  9. Taylor BlauJan 2, 2024
  10. Patrick SteinhardtJan 3, 2024
  11. Karthik NayakJan 3, 2024
  12. Junio C HamanoJan 3, 2024
  13. Patrick SteinhardtJan 3, 2024
  14. Junio C HamanoJan 3, 2024
  15. Patrick SteinhardtJan 3, 2024
  16. Junio C HamanoJan 3, 2024
  17. Patrick SteinhardtJan 3, 2024
  18. Junio C HamanoJan 3, 2024
  19. Patrick SteinhardtJan 3, 2024
  20. Karthik NayakJan 4, 2024
  21. Junio C HamanoJan 4, 2024
  22. Taylor BlauJan 3, 2024
  23. Patrick SteinhardtJan 3, 2024
  24. Taylor BlauJan 3, 2024
  25. Patrick SteinhardtDec 28, 2023
  26. Karthik NayakJan 2, 2024
  27. Taylor BlauJan 2, 2024

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.