Re: [PATCH 2/2] ref-filter: support filtering of operational refs
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Jan 2, 2024, 18:47 UTC
- Message-ID
- <ZZRaOhK869S1Sg1h@nand.local>
- In-Reply-To
- <CAOLa=ZTPxWXnZ8kpBB7=cybNfdEv6d6O37Em7Vpmcw=enpY1_w@mail.gmail.com>
On Tue, Jan 02, 2024 at 07:18:48AM -0800, Karthik Nayak wrote:
Show 26 quoted lines
> > As "git for-each-ref" takes pattern that is prefix match, e.g., > > > > $ git for-each-ref refs/remotes/ > > > > shows everything like refs/remotes/origin/main that begins with > > refs/remotes/, I wonder if > > > > $ git for-each-ref "" > > > > should mean what you are asking for. After all, "git for-each-ref" > > does *not* take "--branches" and others like "git log" family to > > limit its operation to subhierarchy of "refs/" to begin with. > > But I don't think using an empty pattern is the best way to go forward. > This would break the pattern matching feature. For instance, what if the > user wanted to print all refs, but pattern match "*_HEAD"? > > Would that be > > $ git for-each-ref "" "*_HEAD" > > I think this would be confusing, since the first pattern is now acting > as an option, since its not really filtering rather its changing the > search space. > > Maybe "--all-refs" or "--all-ref-types" instead?
I tend to agree that the special empty pattern would be a good shorthand for listing all references underneath refs/, including any top-level psuedo-refs.
But I don't think that I quite follow what Karthik is saying here. for-each-ref returns the union of references that match the given pattern(s), not their intersection. So if you wanted to list just the psudo-refs ending in '_HEAD', you'd do:
$ git for-each-ref "*_HEAD"
I think if you wanted to list all pseudo-refs, calling the option `--pseudo-refs` seems reasonable. But if you want to list some subset of psueod-refs matching a given pattern, you should specify that pattern directly.
Thanks, Taylor