git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 1/1] help: cleanup the contruction of keys_uniq

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 2, 2026, 16:04 UTC
Message-ID
<xmqqwlzu43rh.fsf@gitster.g>
In-Reply-To
<20260228104654.80831-2-amishhhaaaa@gmail.com>
Amisha Chhajed <amishhhaaaa@gmail.com> writes:
Show 15 quoted lines
> diff --git a/t/t0012-help.sh b/t/t0012-help.sh
> index d3a0967e9d..03104b3bf4 100755
> --- a/t/t0012-help.sh
> +++ b/t/t0012-help.sh
> @@ -141,20 +141,20 @@ test_expect_success 'git help -c' '
>  
>  	'\''git help config'\'' for more information
>  	EOF
> -	grep -v -E \
> -		-e "^[^.]+\.[^.]+$" \
> -		-e "^[^.]+\.[^.]+\.[^.]+$" \
> +	sed \
> +		-e "/^[^.]*\.[^.]*$/d" \
> +		-e "/^[^.]*\.[^.]*\.[^.]*$/d" \
>  		help.output >actual &&

We used to require at least one non-dot byte between each dot in the original, but now we do not. Is this change in semantics intended?

You could fix it with "sed -E" and keeping the ERE in the original, I guess?

It was in a distant past when I tried benchmarking them for the last time, but I recall "sed" was a lot slower than "grep" on a "match and print" job that "grep" could be an alternative. So I am not sure what the point of the change in this hunk is.

Show 14 quoted lines
>  	test_cmp expect actual
>  '
>  
>  test_expect_success 'git help --config-for-completion' '
>  	git help -c >human &&
> -	grep -E \
> -	     -e "^[^.]+\.[^.]+$" \
> -	     -e "^[^.]+\.[^.]+\.[^.]+$" human |
> -	     sed -e "s/\*.*//" -e "s/<.*//" |
> -	     sort -u >human.munged &&
> +	sed -n \
> +	     -e "/^[^.]*\.[^.]*$/p" \
> +	     -e "/^[^.]*\.[^.]*\.[^.]*$/p" human |
> +	sed -e "s/\*.*//" -e "s/<.*//" |
Ditto.
Show 11 quoted lines
>  test_expect_success 'git help --config-sections-for-completion' '
>  	git help -c >human &&
> -	grep -E \
> -	     -e "^[^.]+\.[^.]+$" \
> -	     -e "^[^.]+\.[^.]+\.[^.]+$" human |
> -	     sed -e "s/\..*//" |
> -	     sort -u >human.munged &&
> +	sed -n \
> +	     -e "/^[^.]*\.[^.]*$/p" \
> +	     -e "/^[^.]*\.[^.]*\.[^.]*$/p" human |
> +	sed -e "s/\..*//" |
Ditto.

Just like piping "grep" output to "sed" is an anti-pattern, piping "sed" output to an invocation of "sed" is often an anti-pattern.

Perhaps something like this would replace the original "grep | sed" pipeline?

	sed -E -e "
		/^[^.]+\.[^.]+$/b out
		/^[^.]+\.[^.]+\.[^.]+$/b out
		d
		: out
		s/\..*//
	" human |
	sort -u
Previous: Amisha ChhajedNext: Amisha Chhajed
Message 24 of 31 in “clean leftover calls to string_list_remove_duplicates”
  1. 0/2 clean leftover calls to string_list_remove_duplicatesAmisha Chhajed, Feb 12, 2026
  2. 1/2 sparse-checkout: use string_list_sort_uAmisha Chhajed, Feb 12, 2026
  3. Junio C HamanoFeb 12, 2026
  4. 2/2 help: ensure &keys_uniq follows sort -uAmisha Chhajed, Feb 12, 2026
  5. Junio C HamanoFeb 12, 2026
  6. Amisha ChhajedFeb 12, 2026
  7. Junio C HamanoFeb 12, 2026
  8. 1/2 sparse-checkout: use string_list_sort_uAmisha Chhajed, Feb 13, 2026
  9. 2/2 help: cleanup the contruction of keys_uniqAmisha Chhajed, Feb 13, 2026
  10. Junio C HamanoFeb 13, 2026
  11. Eric SunshineFeb 13, 2026
  12. Junio C HamanoFeb 13, 2026
  13. Amisha ChhajedFeb 21, 2026
  14. 1/2 sparse-checkout: use string_list_sort_uAmisha Chhajed, Feb 21, 2026
  15. 2/2 help: cleanup the contruction of keys_uniqAmisha Chhajed, Feb 21, 2026
  16. Junio C HamanoFeb 22, 2026
  17. Amisha ChhajedFeb 22, 2026
  18. Junio C HamanoFeb 26, 2026
  19. Amisha ChhajedFeb 28, 2026
  20. Junio C HamanoMar 2, 2026
  21. Junio C HamanoFeb 22, 2026
  22. 0/1 Make keys_uniq stop depending on sort of keys_uniqAmisha Chhajed, Feb 28, 2026
  23. 1/1 help: cleanup the contruction of keys_uniqAmisha Chhajed, Feb 28, 2026
  24. Junio C HamanoMar 2, 2026
  25. Amisha ChhajedMar 11, 2026
  26. Junio C HamanoMar 11, 2026
  27. Eric SunshineMar 11, 2026
  28. Junio C HamanoMar 11, 2026
  29. Eric SunshineMar 11, 2026
  30. help: cleanup the contruction of keys_uniqAmisha Chhajed, Mar 11, 2026
  31. Junio C HamanoMar 11, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.