Re: [PATCH 2/2] ref-filter: support filtering of operational refs
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 2, 2024, 16:49 UTC
- Message-ID
- <xmqq4jfvfzo0.fsf@gitster.g>
- In-Reply-To
- <CAOLa=ZTPxWXnZ8kpBB7=cybNfdEv6d6O37Em7Vpmcw=enpY1_w@mail.gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
Show 20 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"
Because you do not omit the leading hierarchy when using globs:
$ git for-each-ref v2.4\?.\* ;# nothing
$ git for-each-ref tags/v2.4\?.\* ;# nothing
$ git for-each-ref refs/tags/v2.4\?.\* ;# gives tags in v2.40 and onwardsI would expect that it would be more like
$ git for-each-ref "*_HEAD"
And because you can have two or more patterns, e.g.,
$ git for-each-ref refs/tags/v2.4\?.\* refs/heads/m\*
to get those recent tags and branches whose name begins with 'm', I would expect your
$ git for-each-ref "" "*_HEAD"
would probably be equivalent to
$ git for-each-ref ""