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

Re: [PATCH 8/9] completion: support case-insensitive config vars just a bit

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
May 20, 2018, 16:33 UTC
Message-ID
<20180520163329.12202-1-szeder.dev@gmail.com>
In-Reply-To
<20180510141927.23590-9-pclouds@gmail.com>
> config variable names are technically case-insensitive while this case
> construct is by default case-sensitive. Moving it to case-insensitive
> could be a lot more work.

Bash v4 supports the case modification expansion in the form of ${prev,,}. Alas OSX (or older LTS/Enterprise Linux releases) ships Bash v3.2, which doesn't yet support this syntax, and there is ZSH, which doesn't understand it either (though I suspect it has its own weird syntax for case modification). Supporting them could look something like this:

  local varname
  
  if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
          varname="${prev,,}"
  else
          varname="$(echo "$prev" |tr A-Z a-z)"
  fi
  
  case "$varname" in
  <....>

Not pretty, but I think the additional complexity and overhead is acceptable. Yeah, on some platforms/shells we would run an extra command substitution and an external command, but I suppose on those platforms the overhead of the extra processes is not that critical. And where this additional overhead matters the most is Windows, but luckily Git for Windows ships with Bash v4.

Show 39 quoted lines
> Instead let's just accept the form that is
> more likely to show up in practice.
> 
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
>  contrib/completion/git-completion.bash | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 8d3257c4de..e7829b5b24 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2084,7 +2084,7 @@ __git_compute_config_vars ()
>  _git_config ()
>  {
>  	case "$prev" in
> -	branch.*.remote|branch.*.pushremote)
> +	branch.*.remote|branch.*.push[Rr]emote)
>  		__gitcomp_nl "$(__git_remotes)"
>  		return
>  		;;
> @@ -2096,7 +2096,7 @@ _git_config ()
>  		__gitcomp "false true preserve interactive"
>  		return
>  		;;
> -	remote.pushdefault)
> +	remote.push[Dd]efault)
>  		__gitcomp_nl "$(__git_remotes)"
>  		return
>  		;;
> @@ -2162,7 +2162,7 @@ _git_config ()
>  		__gitcomp "$__git_send_email_suppresscc_options"
>  		return
>  		;;
> -	sendemail.transferencoding)
> +	sendemail.transfer[Ee]ncoding)
>  		__gitcomp "7bit 8bit quoted-printable base64"
>  		return
>  		;;

'git help config' shows 'color.showBranch' and 'sendemail.aliasesfiletype' in camelCase as well.

Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 9 of 36 in “completion: avoid hard coding config var list”
  1. 0/9 completion: avoid hard coding config var listNguyễn Thái Ngọc Duy, May 10, 2018
  2. 1/9 Add and use generic name->id mapping code for color slot parsingNguyễn Thái Ngọc Duy, May 10, 2018
  3. Stefan BellerMay 10, 2018
  4. Duy NguyenMay 11, 2018
  5. 3/9 fsck: factor out msg_id_info[] lazy initialization codeNguyễn Thái Ngọc Duy, May 10, 2018
  6. Eric SunshineMay 11, 2018
  7. 2/9 grep: keep all colors in an arrayNguyễn Thái Ngọc Duy, May 10, 2018
  8. 8/9 completion: support case-insensitive config vars just a bitNguyễn Thái Ngọc Duy, May 10, 2018
  9. SZEDER GáborMay 20, 2018
  10. 7/9 completion: drop the hard coded list of config varsNguyễn Thái Ngọc Duy, May 10, 2018
  11. Eric SunshineMay 11, 2018
  12. SZEDER GáborMay 20, 2018
  13. 6/9 am: move advice.amWorkDir parsing back to advice.cNguyễn Thái Ngọc Duy, May 10, 2018
  14. Eric SunshineMay 11, 2018
  15. 9/9 log-tree: allow to customize 'grafted' colorNguyễn Thái Ngọc Duy, May 10, 2018
  16. 4/9 help: add --config to list all available configNguyễn Thái Ngọc Duy, May 10, 2018
  17. Eric SunshineMay 11, 2018
  18. 5/9 advice: keep config name in camelCase in advice_config[]Nguyễn Thái Ngọc Duy, May 10, 2018
  19. Duy NguyenMay 10, 2018
  20. Junio C HamanoMay 11, 2018
  21. Duy NguyenMay 11, 2018
  22. 00/11 completion: avoid hard coding config var listNguyễn Thái Ngọc Duy, May 26, 2018
  23. 01/11 Add and use generic name->id mapping code for color slot parsingNguyễn Thái Ngọc Duy, May 26, 2018
  24. Stefan BellerMay 29, 2018
  25. 04/11 help: add --config to list all available configNguyễn Thái Ngọc Duy, May 26, 2018
  26. Eric SunshineMay 27, 2018
  27. 09/11 completion: keep other config var completion in camelCaseNguyễn Thái Ngọc Duy, May 26, 2018
  28. 07/11 am: move advice.amWorkDir parsing back to advice.cNguyễn Thái Ngọc Duy, May 26, 2018
  29. 11/11 log-tree: allow to customize 'grafted' colorNguyễn Thái Ngọc Duy, May 26, 2018
  30. 12/11 completion: complete general config vars in two stepsNguyễn Thái Ngọc Duy, May 27, 2018
  31. 10/11 completion: support case-insensitive config varsNguyễn Thái Ngọc Duy, May 26, 2018
  32. 03/11 fsck: factor out msg_id_info[] lazy initialization codeNguyễn Thái Ngọc Duy, May 26, 2018
  33. 08/11 completion: drop the hard coded list of config varsNguyễn Thái Ngọc Duy, May 26, 2018
  34. 02/11 grep: keep all colors in an arrayNguyễn Thái Ngọc Duy, May 26, 2018
  35. 06/11 advice: keep config name in camelCase in advice_config[]Nguyễn Thái Ngọc Duy, May 26, 2018
  36. 05/11 fsck: produce camelCase config key namesNguyễn Thái Ngọc Duy, May 26, 2018

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.