git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Meet Soni <meetsoni3017@gmail.com>,
	git@vger.kernel.org, ps@pks.im, shejialuo@gmail.com,
	karthik.188@gmail.com, sunshine@sunshineco.com,
	John Cai <johncai86@gmail.com>
Subject: Re: [GSoC][RFC PATCH v4 3/5] builtin/refs: add list subcommand
Date: Fri, 1 Aug 2025 16:49:40 +0100	[thread overview]
Message-ID: <c4d9b25a-2a62-41bf-90e6-455c62b03aa3@gmail.com> (raw)
In-Reply-To: <xmqqseibm7ap.fsf@gitster.g>

On 01/08/2025 15:43, Junio C Hamano wrote:
> Phillip Wood <phillip.wood123@gmail.com> writes:
> 
>> I find the behavior of for-each-ref quite confusing so I wonder if we
>> really want to copy it to the new command. For example
>>
>>      git for-each-ref 'refs/h*'
>>
>> does not print anything but
>>
>>      git for-each-ref 'refs/heads/m*'
>>
>> prints all the branches beginning with m. Another example is
>>
>>      git for-each-ref 'refs/heads'
>>
>> prints all the branches but
>>
>>      git for-each-ref 'refs/heads*'
>>
>> prints nothing. To me it would be much easier to understand if the
>> pattern always required an explicit wildcard (or possible always did a
>> prefix match in the absence of a wildcard).
> 
> Thanks for raising this point.
> 
> One point you are wrong is 'refs/heads/m*'; it does not list all the
> branches that begin with "m".  It will not show "refs/heads/mid/night"
> even though it may show "refs/heads/morning'.

Thanks for correcting that

> I do not think we want to require wildcard (in other words,
> refs/heads/ and refs/heads that result in the prefix matching
> behaviour that is anchored at hierarchy boundary is a good thing,
> and we should not require refs/heads/* to get it).

It is confusing that refs/heads does a prefix match but refs/heads/m 
does not (unless there is a hierarchy boundary after the m). Maybe we 
should require a trailing slash to trigger a prefix match?
> As the "list the refs with various criteria" feature itself is
> shared with "refs list", it would make the entire system even more
> confusing if their criteria to choose which ones to show are
> different.
> 
> I _think_ the current selection criteria is basically the prefix
> match that is anchored at hierarchy boundary, and a single asterisk
> expands only to a single hierarchy element without crossing
> hierarchy boundary.

Having had a bit of a play with different patterns I think that's right.
> It is very handy that refs/heads/* expands to
> the main integration branches (master, next, seen, maint-*) without
> showing pw/3.0-commentchar-auto-deprecation branch and others.
> 
> What does a double-asterisk currently do in these patterns?

refs/heads/m** seems to behave like refs/heads/m*. I'm a bit surprised 
by that as for-each-ref seems to set WM_PATHNAME and I thought that our 
wildmatch code used '**' to match any character in that case.

> If it
> is not doing anything useful, perhaps we should make it match any
> letter, without getting constrained by hierarchy boundaries?  IOW,
> a "fix" might be to make sure the following happens?
> 
>   - "refs/heads/m*" matches all local branches whose name starts with
>     'm' like 'morning', but not the ones inside subhierarchies that
>     start with 'm' like 'mid/night'.
> 
>   - "refs/heads/m**" matches all local branches whose name starts
>     with 'm' and in the ones inside subhierarchies that start with
>     'm'.

That sounds like a good idea

Thanks

Phillip


  reply	other threads:[~2025-08-01 15:49 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-27  7:49 [GSoC][RFC PATCH 0/2] Add refs list subcommand Meet Soni
2025-06-27  7:49 ` [GSoC][RFC PATCH 1/2] builtin/refs: add " Meet Soni
2025-06-27 16:27   ` Jean-Noël Avila
2025-06-27 18:13     ` Junio C Hamano
2025-06-30  4:28     ` Meet Soni
2025-06-29 11:05   ` [PATCH] doc:git-for-each-ref: fix styling and typos Jean-Noël Avila
2025-06-30 15:48     ` Junio C Hamano
2025-06-30 18:55       ` Jean-Noël AVILA
2025-06-27  7:49 ` [GSoC][RFC PATCH 2/2] t: add test for git refs list subcommand Meet Soni
2025-06-27 18:03 ` [GSoC][RFC PATCH 0/2] Add " Junio C Hamano
2025-06-28  8:05   ` shejialuo
2025-06-30 14:05     ` Junio C Hamano
2025-07-06 12:58       ` shejialuo
2025-06-30  3:53   ` Meet Soni
2025-06-30 20:10     ` Junio C Hamano
2025-07-09 13:36       ` Patrick Steinhardt
2025-07-17  7:50 ` [GSoC][RFC PATCH v2 " Meet Soni
2025-07-17  7:50   ` [GSoC][RFC PATCH v2 1/2] builtin/refs: add " Meet Soni
2025-07-17 16:48     ` Eric Sunshine
2025-07-23  5:01       ` Meet Soni
2025-07-17  7:50   ` [GSoC][RFC PATCH v2 2/2] t: add test for git refs " Meet Soni
2025-07-17 21:01     ` Junio C Hamano
2025-07-23  5:17       ` Meet Soni
2025-07-23 15:03         ` Junio C Hamano
2025-07-23  6:43   ` [GSoC][RFC PATCH v3 0/3] Add " Meet Soni
2025-07-23  6:43     ` [GSoC][RFC PATCH v3 1/3] builtin/refs: add " Meet Soni
2025-07-24  5:58       ` Patrick Steinhardt
2025-07-24 16:01         ` Junio C Hamano
2025-07-25 11:10         ` Meet Soni
2025-07-23  6:43     ` [GSoC][RFC PATCH v3 2/3] t6300: refactor tests to be shareable Meet Soni
2025-07-23  6:43     ` [GSoC][RFC PATCH v3 3/3] t: add test for git refs list subcommand Meet Soni
2025-07-31  9:00     ` [GSoC][RFC PATCH v4 0/5] Add " Meet Soni
2025-07-31  9:00       ` [GSoC][RFC PATCH v4 1/5] doc: factor out common option Meet Soni
2025-07-31  9:00       ` [GSoC][RFC PATCH v4 2/5] builtin/for-each-ref: factor out core logic into a helper Meet Soni
2025-08-01  5:54         ` Patrick Steinhardt
2025-08-04  6:34           ` Meet Soni
2025-07-31  9:00       ` [GSoC][RFC PATCH v4 3/5] builtin/refs: add list subcommand Meet Soni
2025-08-01 13:27         ` Phillip Wood
2025-08-01 14:43           ` Junio C Hamano
2025-08-01 15:49             ` Phillip Wood [this message]
2025-08-01 17:14               ` Junio C Hamano
2025-08-04  9:28                 ` Phillip Wood
2025-08-04  6:32               ` Meet Soni
2025-08-04  9:27               ` Phillip Wood
2025-08-04 15:35                 ` Junio C Hamano
2025-07-31  9:00       ` [GSoC][RFC PATCH v4 4/5] t6300: refactor tests to be shareable Meet Soni
2025-07-31  9:00       ` [GSoC][RFC PATCH v4 5/5] t: add test for git refs list subcommand Meet Soni
2025-08-01  5:54       ` [GSoC][RFC PATCH v4 0/5] Add " Patrick Steinhardt
2025-08-04  9:22       ` [GSoC][RFC PATCH v5 0/6] " Meet Soni
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 1/6] doc: factor out common option Meet Soni
2025-08-04 18:34           ` Junio C Hamano
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 2/6] builtin/for-each-ref: align usage string with the man page Meet Soni
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 3/6] builtin/for-each-ref: factor out core logic into a helper Meet Soni
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 4/6] builtin/refs: add list subcommand Meet Soni
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 5/6] t6300: refactor tests to be shareable Meet Soni
2025-08-04  9:22         ` [GSoC][RFC PATCH v5 6/6] t: add test for git refs list subcommand Meet Soni
2025-08-05  9:27         ` [GSoC][PATCH v6 0/6] Add " Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 1/6] doc: factor out common option Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 2/6] builtin/for-each-ref: align usage string with the man page Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 3/6] builtin/for-each-ref: factor out core logic into a helper Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 4/6] builtin/refs: add list subcommand Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 5/6] t6300: refactor tests to be shareable Meet Soni
2025-08-05  9:27           ` [GSoC][PATCH v6 6/6] t: add test for git refs list subcommand Meet Soni
2025-08-05 13:07           ` [GSoC][PATCH v6 0/6] Add " Patrick Steinhardt
2025-08-05 16:12           ` 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=c4d9b25a-2a62-41bf-90e6-455c62b03aa3@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johncai86@gmail.com \
    --cc=karthik.188@gmail.com \
    --cc=meetsoni3017@gmail.com \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=ps@pks.im \
    --cc=shejialuo@gmail.com \
    --cc=sunshine@sunshineco.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).