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 2/2] help: ensure &keys_uniq follows sort -u
Date: Thu, 12 Feb 2026 11:58:33 -0800 [thread overview]
Message-ID: <xmqqh5rlohsm.fsf@gitster.g> (raw)
In-Reply-To: <20260212041017.91370-3-amishhhaaaa@gmail.com> (Amisha Chhajed's message of "Thu, 12 Feb 2026 09:40:17 +0530")
Amisha Chhajed <amishhhaaaa@gmail.com> writes:
> From: Amisha Chhajed <136238836+amishhaa@users.noreply.github.com>
>
> uniqueness operation of &keys_uniq depends on the sort operation executed
> for &keys this might introduce regressions in future when the logic of
> forming &keys_uniq from &keys is changed.
>
> add string_list_sort_u operation for &keys_uniq after the processing of
> &keys so it follows the expected sort -u behaviour.
I am not sure the above reasoning is sound. With the original code,
we
- prepare empty keys_uniq
- collect keys
- sort keys
- iterate over keys
- add either the whole "section[.subsection].key" or "section" to keys_uniq
before we call remove_duplicates. keys_uniq would have duplicates,
but because keys is sorted upfront, wouldn't the contents of
keys_uniq be collected in sorted order anyway?
This is not a performance critical part of the system, so it is OK
as a future-proof measure to sort keys_uniq immediately before we
start doing something that we _care_ about its sortedness (e.g.,
presenting the final output to the user), even if keys_uniq is known
to be already sorted with the current code. Using sort_u here would
allow us not to worry about how keys_uniq is constructed in that
ugly loop.
Yes, this function, especially the loop before the part you are
touching, _is_ ugly. What drug the authors of it were under when it
was written, I have to wonder X-<. For example, wouldn't readers
wonder why CONFIG_HUMAN output mode does puts() right in the middle
of the loop over keys string list, while the other two does not
puts() and have a separate loop over keys_uniq instead?
I suspect that making a switch(type) that calls one of three helper
functions for the three different output types after keys has been
populated in the earlier part of this function, but immediately
before it is sorted with string_list_sort(&keys), would be a
low-hanging fruit clean-up that makes the result far easier to
follow than the current code. The helper function to handle
CONFIG_HUMAN mode may need to sort keys, but other two helper
functions do not have to and iterate over unsorted keys to construct
their output list, on which they can do sort_u before they output.
Thanks.
> Signed-off-by: Amisha Chhajed <136238836+amishhaa@users.noreply.github.com>
> ---
> builtin/help.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/builtin/help.c b/builtin/help.c
> index c09cbc8912..0c9c007214 100644
> --- a/builtin/help.c
> +++ b/builtin/help.c
> @@ -196,7 +196,7 @@ static void list_config_help(enum show_config_type type)
>
> }
> 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);
> string_list_clear(&keys_uniq, 0);
next prev parent reply other threads:[~2026-02-12 19:58 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 [this message]
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
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=xmqqh5rlohsm.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