From: Patrick Steinhardt <ps@pks.im>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
Phillip Wood <phillip.wood123@gmail.com>,
phillip.wood@dunelm.org.uk, git@vger.kernel.org
Subject: Re: [PATCH v3 4/4] for-each-ref: avoid filtering on empty pattern
Date: Thu, 8 Feb 2024 09:50:15 +0100 [thread overview]
Message-ID: <ZcSVx4slikt4xB3D@tanuki> (raw)
In-Reply-To: <CAOLa=ZQaXxwrXmbmFvGR59EDo3Eqa-Xfc3OG9+6ES-veDU8Bhg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3301 bytes --]
On Wed, Feb 07, 2024 at 06:02:34PM +0100, Karthik Nayak wrote:
> On Wed, Feb 7, 2024 at 5:46 PM Junio C Hamano <gitster@pobox.com> wrote:
> >
> > Karthik Nayak <karthik.188@gmail.com> writes:
> >
> > > This is a bit of a grey area, what I mean is that we do allow users to create
> > > non "refs/" prefixed refs:
> > >
> > > $ git update-ref foo @~1
> > >
> > > $ cat .git/foo
> > > 2b52187cd2930931c6d34436371f470bb26eef4f
> > >
> > > What I mean to say is that, by saying "--include-root-refs" it seems to imply
> > > that any such refs should be included too, but this simply is not the case.
> >
> > But isn't that a quality of implementation issue? I'd consider it a
> > bug once we have and enforce the definition of what pseudorefs are.
>
> Yeah, that makes sense. I'll use "--include-root-refs" then.
I'd still argue that this is too specific to the files backend. The fact
that we end up only adding root refs to the files backend to me is an
implementation-specific limitation and not a feature. What I really want
is to ask the backend to give me all refs that it knows of for the
current worktree.
The "reftable" backend has this snippet in its iterator:
```
/*
* The files backend only lists references contained in
* "refs/". We emulate the same behaviour here and thus skip
* all references that don't start with this prefix.
*/
if (!starts_with(iter->ref.refname, "refs/"))
continue;
```
If we add the new `--include-root-refs` flag then we would have to
extend it to query whether the ref either starts with "refs/" or whether
it might look like a pseudo-ref:
```
if (!starts_with(iter->ref.refname, "refs/") &&
!(flags & INCLUDE_ROOT_REFS || is_pseudoref(iter->ref.refname)))
continue;
```
The problem I have is that it still wouldn't end up surfacing all refs
which exist in the ref backend while being computationally more
expensive. So the original usecase I had in mind when pitching this
topic isn't actually addressed.
I know that in theory, the reftable backend shouldn't contain refs other
than "refs/" or pseudo-refs anyway. But regardless of that, I think that
formulating this in the form of "root refs" is too restrictive and too
much focussed on the "files" backend. I wouldn't be surprised if there
are ways to have git-update-ref(1) or other tools write refs with
unexpected names, and not being able to learn about those is a
limitation.
Putting this in the context of "Give me all refs which you know of for
the current worktree" is a lot simpler. It would still be equivalent to
"--include-root-refs" for the "files" backend, because the files backend
doesn't have a way to properly track all refs it has ever created. And
for the "reftable" backend it's as simple as this:
```
if (!(iter->flags & DO_FOR_EACH_INCLUDE_ALL_REFS) &&
!starts_with(iter->ref.refname, "refs/"))
```
I'm not sure about better terminology though. Something like
`--include-all-worktree-refs` could easily lead to confusion because it
might make the user think that they also want to list refs from other
worktrees. The best I can come up with is `--include-non-refs` -- pseudo
refs aren't real refs, and neither are refs which don't start with
"refs/".
Patrick
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-02-08 8:50 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-19 14:27 [PATCH 0/5] for-each-ref: print all refs on empty string pattern Karthik Nayak
2024-01-19 14:27 ` [PATCH 1/5] refs: expose `is_pseudoref_syntax()` Karthik Nayak
2024-01-19 20:37 ` Junio C Hamano
2024-01-22 15:40 ` Karthik Nayak
2024-01-19 14:27 ` [PATCH 2/5] refs: make `is_pseudoref_syntax()` stricter Karthik Nayak
2024-01-19 20:44 ` Junio C Hamano
2024-01-22 20:13 ` Phillip Wood
2024-01-22 20:22 ` Junio C Hamano
2024-01-23 11:03 ` Phillip Wood
2024-01-23 12:49 ` Karthik Nayak
2024-01-23 16:40 ` phillip.wood123
2024-01-23 17:46 ` Junio C Hamano
2024-01-23 17:38 ` Junio C Hamano
2024-01-23 11:16 ` Patrick Steinhardt
2024-01-23 16:30 ` Phillip Wood
2024-01-23 17:44 ` Junio C Hamano
2024-01-24 8:51 ` Patrick Steinhardt
2024-01-19 14:27 ` [PATCH 3/5] refs: extract out `loose_fill_ref_dir_regular_file()` Karthik Nayak
2024-01-19 14:27 ` [PATCH 4/5] refs: introduce `refs_for_each_all_refs()` Karthik Nayak
2024-01-19 20:57 ` Junio C Hamano
2024-01-22 15:48 ` Karthik Nayak
2024-01-22 17:45 ` Junio C Hamano
2024-01-19 14:27 ` [PATCH 5/5] for-each-ref: avoid filtering on empty pattern Karthik Nayak
2024-01-24 15:27 ` [PATCH v2 0/4] for-each-ref: print all refs on empty string pattern Karthik Nayak
2024-01-24 15:27 ` [PATCH v2 1/4] refs: introduce `is_pseudoref()` and `is_headref()` Karthik Nayak
2024-01-24 19:09 ` Junio C Hamano
2024-01-25 16:20 ` Karthik Nayak
2024-01-25 16:28 ` Junio C Hamano
2024-01-25 21:48 ` Karthik Nayak
2024-01-24 15:27 ` [PATCH v2 2/4] refs: extract out `loose_fill_ref_dir_regular_file()` Karthik Nayak
2024-01-24 15:27 ` [PATCH v2 3/4] refs: introduce `refs_for_each_all_refs()` Karthik Nayak
2024-01-24 15:27 ` [PATCH v2 4/4] for-each-ref: avoid filtering on empty pattern Karthik Nayak
2024-01-29 11:35 ` [PATCH v3 0/4] for-each-ref: print all refs on empty string pattern Karthik Nayak
2024-01-29 11:35 ` [PATCH v3 1/4] refs: introduce `is_pseudoref()` and `is_headref()` Karthik Nayak
2024-02-07 1:48 ` Jeff King
2024-02-07 9:27 ` Karthik Nayak
2024-01-29 11:35 ` [PATCH v3 2/4] refs: extract out `loose_fill_ref_dir_regular_file()` Karthik Nayak
2024-01-29 11:35 ` [PATCH v3 3/4] refs: introduce `refs_for_each_all_refs()` Karthik Nayak
2024-01-29 11:35 ` [PATCH v3 4/4] for-each-ref: avoid filtering on empty pattern Karthik Nayak
2024-02-05 18:48 ` Phillip Wood
2024-02-06 5:33 ` Patrick Steinhardt
2024-02-06 10:49 ` Phillip Wood
2024-02-06 8:52 ` Karthik Nayak
2024-02-06 13:55 ` Phillip Wood
2024-02-06 15:30 ` Karthik Nayak
2024-02-06 17:03 ` Junio C Hamano
2024-02-06 18:47 ` Junio C Hamano
2024-02-06 22:10 ` Karthik Nayak
2024-02-06 22:16 ` Junio C Hamano
2024-02-07 14:10 ` Karthik Nayak
2024-02-07 16:00 ` Junio C Hamano
2024-02-07 16:18 ` Karthik Nayak
2024-02-07 16:46 ` Junio C Hamano
2024-02-07 17:02 ` Karthik Nayak
2024-02-08 8:50 ` Patrick Steinhardt [this message]
2024-02-08 17:04 ` Junio C Hamano
2024-02-08 17:24 ` Patrick Steinhardt
2024-02-08 17:53 ` Junio C Hamano
2024-02-09 8:08 ` Patrick Steinhardt
2024-02-09 17:15 ` Junio C Hamano
2024-02-09 18:27 ` Karthik Nayak
2024-02-12 6:51 ` Patrick Steinhardt
2024-02-08 10:28 ` Phillip Wood
2024-02-08 17:07 ` Junio C Hamano
2024-02-07 7:48 ` Patrick Steinhardt
2024-02-07 16:01 ` Junio C Hamano
2024-01-29 20:37 ` [PATCH v3 0/4] for-each-ref: print all refs on empty string pattern Junio C Hamano
2024-02-11 18:39 ` [PATCH v4 0/5] for-each-ref: add '--include-root-refs' option Karthik Nayak
2024-02-11 18:39 ` [PATCH v4 1/5] refs: introduce `is_pseudoref()` and `is_headref()` Karthik Nayak
2024-02-12 12:47 ` Patrick Steinhardt
2024-02-12 17:01 ` Junio C Hamano
2024-02-13 15:48 ` Karthik Nayak
2024-02-13 19:42 ` Junio C Hamano
2024-02-14 10:28 ` Karthik Nayak
2024-02-14 16:59 ` Junio C Hamano
2024-02-14 18:15 ` Karthik Nayak
2024-02-12 18:05 ` Junio C Hamano
2024-02-11 18:39 ` [PATCH v4 2/5] refs: extract out `loose_fill_ref_dir_regular_file()` Karthik Nayak
2024-02-11 18:39 ` [PATCH v4 3/5] refs: introduce `refs_for_each_include_root_refs()` Karthik Nayak
2024-02-11 18:39 ` [PATCH v4 4/5] ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR' Karthik Nayak
2024-02-11 18:39 ` [PATCH v4 5/5] for-each-ref: add new option to include root refs Karthik Nayak
2024-02-22 8:46 ` Patrick Steinhardt
2024-02-22 12:57 ` Karthik Nayak
2024-02-22 13:17 ` Patrick Steinhardt
2024-02-23 10:01 ` [PATCH v5 0/5] for-each-ref: add '--include-root-refs' option Karthik Nayak
2024-02-23 10:01 ` [PATCH v5 1/5] refs: introduce `is_pseudoref()` and `is_headref()` Karthik Nayak
2024-02-23 10:01 ` [PATCH v5 2/5] refs: extract out `loose_fill_ref_dir_regular_file()` Karthik Nayak
2024-02-23 10:01 ` [PATCH v5 3/5] refs: introduce `refs_for_each_include_root_refs()` Karthik Nayak
2024-02-23 10:01 ` [PATCH v5 4/5] ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR' Karthik Nayak
2024-02-23 10:01 ` [PATCH v5 5/5] for-each-ref: add new option to include root refs Karthik Nayak
2024-02-23 18:41 ` [PATCH v5 0/5] for-each-ref: add '--include-root-refs' option Junio C Hamano
2024-02-23 20:13 ` Junio C Hamano
2024-02-27 7:39 ` Patrick Steinhardt
2024-02-27 16:54 ` Junio C Hamano
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=ZcSVx4slikt4xB3D@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
/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.