Subject: Re: builtin/config: --name-only doesn't imply --show-names in "git config get"

From: Junio C Hamano <[email-masked]>
Date: Wed, 21 Aug 2024 13:59:43 -0700

Yukai Chou <[email-masked]> writes:

> Junio C Hamano <[email-masked]> 于2024年8月22日周四 00:07写道：
>>
>> Yukai Chou <[email-masked]> writes:
>>
>> > # get empty line(s)
>> > git config get --all --name-only remote.origin.fetch
>> > # get lines of name(s)
>> > git config get --all --show-names --name-only remote.origin.fetch
>> >
>> > Either the doc or the behavior of --name-only needs some adjustment.
>>
>> This argues for making "all" imply we need to show the name of the
>> configuration variable,
>
> Sorry can you elaborate on what that "all" meant? A new option "--show-all"?

Sorry, but "--all" is probably a red herring.

What I wanted to say was that we can 

 (1) get rid of "--show-name",

 (2) have the combination of options that can emit values for more
    than one key to automatically show both name and value, and

 (3) add "--hide-name" so that such command can still show only the
     value.

where I mixed up (2) and "all".  In fact, "--all" is not something
that gives values for more than one key (it is things like regexp
and urlmatch).

For example:

 $ git config --get-regexp 'sendemail\..*'

would show values for more than one variable, and depending on the 
variable, it may show the values for one variable more than once.
According to the documentation, this was replaced with

    --get-regexp <name-regexp>::
            Replaced by `git config get --all --show-names --regexp <name-regexp>`.

but it could have been

    git config get --all --regexp <name-regexp>

as it is clear --regexp could give results for more than one key.

This points at a bug in the documentation, by the way.  "git config --get-all"
is described like so:

    --get-all <name> [<value-pattern>]::
            Replaced by `git config get [--value=<pattern>] --all --show-names <name>`.

but this gives values for only one key, and the command does not
show key names.  It is replaced by

	git config get [--value=<pattern>] --all <name>

without "--show-names".