From: Junio C Hamano <gitster@pobox.com>
To: Amisha Chhajed <amishhhaaaa@gmail.com>
Cc: git@vger.kernel.org, stolee@gmail.com, peff@peff.net
Subject: Re: [PATCH v2 2/2] help: cleanup the contruction of keys_uniq
Date: Thu, 12 Feb 2026 20:30:27 -0800 [thread overview]
Message-ID: <xmqqecmpnu3g.fsf@gitster.g> (raw)
In-Reply-To: <20260213033729.50208-2-amishhhaaaa@gmail.com> (Amisha Chhajed's message of "Fri, 13 Feb 2026 09:07:29 +0530")
Amisha Chhajed <amishhhaaaa@gmail.com> writes:
> + }
> + else{
Style:
} else {
> + for (size_t i = 0; i < keys.nr; i++) {
> + const char *var = keys.items[i].string;
> + const char *wildcard, *tag, *cut;
> + const char *dot = NULL;
> + struct strbuf sb = STRBUF_INIT;
> +
> + if (type == SHOW_CONFIG_SECTIONS) {
> + dot = strchr(var, '.');
> + }
No {braces} around a single-statement block. Wouldn't it easier to
follow if we do not rely on the initialization? I.e.,
if (type == SHOW_CONFIG_SECTIONS)
dot = strchr(var, '.');
else /* SHOW_CONFIG_VARS */
dot = NULL;
or even
switch (type) {
case SHOW_CONFIG_SECTIONS:
dot = strchr(var, '.');
break;
case SHOW_CONFIG_VARS:
dot = NULL;
break;
default:
BUG("%d: unexpected type", type);
}
?
But all of the above might become a moot point; see below.
> + wildcard = strchr(var, '*');
> + tag = strchr(var, '<');
>
> + if (!dot && !wildcard && !tag) {
> + string_list_append(&keys_uniq, var);
> + continue;
> + }
>
> + if (dot)
> + cut = dot;
> + else if (wildcard && !tag)
> + cut = wildcard;
> + else if (!wildcard && tag)
> + cut = tag;
> + else
> + cut = wildcard < tag ? wildcard : tag;
How much are you saving by conflating SHOW_CONFIG_SECTIONS and
SHOW_CONFIG_VARS into this same "else" block? In CONFIG_VARS mode,
dot is always NULL, and when dot is not NULL, neither wildcard or
tag affect the final output at all. Would the logic become clearer
if you split these two mode into two, I have to wonder?
> + strbuf_add(&sb, var, cut - var);
> + string_list_append(&keys_uniq, sb.buf);
> + strbuf_release(&sb);
> + }
> }
> +
> string_list_clear(&keys, 0);
> - string_list_remove_duplicates(&keys_uniq, 0);
> + string_list_sort_u(&keys_uniq, 0);
> for_each_string_list_item(item, &keys_uniq)
> puts(item->string);
You inherited the source of ugliness from the original. Even in
HUMAN mode, you sort-u keys_uniq and run puts(), and the only thing
that makes it a no-op is the fact that in the if/else above, keys_uniq
is left untouched.
I wonder if the above should look more like this:
switch (type) {
case SHOW_CONFIG_HUMAN:
show_config_human(&keys);
break;
case SHOW_CONFIG_SECTIONS:
show_config_sections(&keys);
break;
case SHOW_CONFIG_VARS:
show_config_vars(&keys);
break;
default:
BUG("%d: unexpected type", type);
}
string_list_clear(&keys);
return;
without keys_uniq string list in this function (it would be an
implementation detail in show_config_sections() and _vars().
q> diff --git a/t/t0012-help.sh b/t/t0012-help.sh
> index d3a0967e9d..0dbe6dd46f 100755
> --- a/t/t0012-help.sh
> +++ b/t/t0012-help.sh
> @@ -160,6 +160,24 @@ test_expect_success 'git help --config-for-completion' '
> test_cmp human.munged vars
> '
>
> +test_expect_success 'git help --config-for-completion' '
> + file="$GIT_SOURCE_DIR/Documentation/config/add.adoc" &&
> + test_when_finished "git -C \"$GIT_SOURCE_DIR\" checkout -- Documentation/config/add.adoc" &&
> + cat <<-\EOF >>"$file" &&
> + aa*.b::
> + aa.b::
> + EOF
> + git help -c >human &&
> + grep -E \
> + -e "^[^.]+\.[^.]+$" \
> + -e "^[^.]+\.[^.]+\.[^.]+$" human |
> + sed -e "s/\*.*//" -e "s/<.*//" |
> + sort -u >human.munged &&
Dedent "sed" and "sort" to the same level as "grep -E".
> + git help --config-for-completion >vars &&
> + test_cmp human.munged vars
> +'
> +
> test_expect_success 'git help --config-sections-for-completion' '
> git help -c >human &&
> grep -E \
next prev parent reply other threads:[~2026-02-13 4:30 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-12 4:10 [PATCH 0/2] clean leftover calls to string_list_remove_duplicates Amisha Chhajed
2026-02-12 4:10 ` [PATCH 1/2] sparse-checkout: use string_list_sort_u Amisha Chhajed
2026-02-12 19:30 ` Junio C Hamano
2026-02-12 4:10 ` [PATCH 2/2] help: ensure &keys_uniq follows sort -u Amisha Chhajed
2026-02-12 19:58 ` Junio C Hamano
2026-02-12 21:29 ` Amisha Chhajed
2026-02-12 21:37 ` Junio C Hamano
2026-02-13 3:37 ` [PATCH v2 1/2] sparse-checkout: use string_list_sort_u Amisha Chhajed
2026-02-13 3:37 ` [PATCH v2 2/2] help: cleanup the contruction of keys_uniq Amisha Chhajed
2026-02-13 4:30 ` Junio C Hamano [this message]
2026-02-13 5:02 ` Eric Sunshine
2026-02-13 16:57 ` Junio C Hamano
2026-02-21 16:28 ` Amisha Chhajed
2026-02-21 16:23 ` [PATCH v3 1/2] sparse-checkout: use string_list_sort_u Amisha Chhajed
2026-02-21 16:23 ` [PATCH v3 2/2] help: cleanup the contruction of keys_uniq Amisha Chhajed
2026-02-22 5:05 ` Junio C Hamano
2026-02-22 9:47 ` Amisha Chhajed
2026-02-26 16:45 ` Junio C Hamano
2026-02-28 10:51 ` Amisha Chhajed
2026-03-02 16:06 ` Junio C Hamano
2026-02-22 2:44 ` [PATCH v3 1/2] sparse-checkout: use string_list_sort_u Junio C Hamano
2026-02-28 10:46 ` [PATCH v4 0/1] Make keys_uniq stop depending on sort of keys_uniq Amisha Chhajed
2026-02-28 10:46 ` [PATCH v4 1/1] help: cleanup the contruction " Amisha Chhajed
2026-03-02 16:04 ` Junio C Hamano
2026-03-11 19:48 ` Amisha Chhajed
2026-03-11 21:11 ` Junio C Hamano
2026-03-11 21:39 ` Eric Sunshine
2026-03-11 21:50 ` Junio C Hamano
2026-03-11 21:54 ` Eric Sunshine
2026-03-11 19:24 ` [PATCH v5] " Amisha Chhajed
2026-03-11 19:46 ` 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=xmqqecmpnu3g.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=amishhhaaaa@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=stolee@gmail.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