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

[PATCH 04/11] completion: deduplicate configuration sections

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Aug 13, 2019, 12:26 UTC
Message-ID
<20190813122652.16468-5-szeder.dev@gmail.com>
In-Reply-To
<20190813122652.16468-1-szeder.dev@gmail.com>

The number of configuration variables listed by the completion script grew quite when we started to auto-generate it from the documentation [1], so we now complete them in two steps: first we list only the section names, then the rest [2]. To get the section names we simply strip everything following the first dot in each variable name, resulting in a lot of repeated section names, because most sections contain more than one configuration variable. This is not a correctness issue in practice, because Bash's completion facilities remove all repetitions anyway, but these repetitions make testing a bit harder.

Replace the small 'sed' script removing subsections and variable names with an 'awk' script that does the same, and in addition removes any repeated configuration sections as well (by first creating and filling an associative array indexed by all encountered configuration sections, and then iterating over this array and printing the indices, i.e. the unique section names). This change makes the failing 'git config - section' test in 't9902-completion.sh' pass.

Note that this changes the order of section names in the output, and makes it downright undeterministic, but this is not an issue, because Bash sorts them before presenting them to the user, and our completion tests sort them as well before comparing with the expected output.

Yeah, it would be simpler and shorter to just append '| sort -u' to that command, but that would incur the overhead of one more external process and pipeline stage every time a user completes configuration sections.

[1] e17ca92637 (completion: drop the hard coded list of config vars,
    2018-05-26)
[2] f22f682695 (completion: complete general config vars in two steps,
    2018-05-27)
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
---
 contrib/completion/git-completion.bash | 10 +++++++++-
 t/t9902-completion.sh                  |  2 +-
 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index c59347daee..f89324d84f 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2398,7 +2398,15 @@ _git_config ()
 		;;
 	*)
 		__git_compute_config_vars
-		__gitcomp "$(echo "$__git_config_vars" | sed 's/\.[^ ]*/./g')"
+		__gitcomp "$(echo "$__git_config_vars" |
+				awk -F . '{
+					sections[$1] = 1
+				}
+				END {
+					for (s in sections)
+						print s "."
+				}
+				')"
 	esac
 }
 
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index e15be1164d..008fba7c89 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -1698,7 +1698,7 @@ do
 	'
 done
 
-test_expect_failure 'git config - section' '
+test_expect_success 'git config - section' '
 	test_completion "git config br" <<-\EOF
 	branch.Z
 	browser.Z
-- 
2.23.0.rc2.350.gf4fdc32db7
Previous: SZEDER GáborNext: SZEDER Gábor
Message 4 of 12 in “completion: complete configuration variables and values after 'git -c <TAB>'”
  1. 00/11 completion: complete configuration variables and values after 'git -c <TAB>'SZEDER Gábor, Aug 13, 2019
  2. 01/11 completion: fix a typo in a commentSZEDER Gábor, Aug 13, 2019
  3. 02/11 completion: complete more values of more 'color.*' configuration variablesSZEDER Gábor, Aug 13, 2019
  4. 04/11 completion: deduplicate configuration sectionsSZEDER Gábor, Aug 13, 2019
  5. 03/11 completion: add tests for 'git config' completionSZEDER Gábor, Aug 13, 2019
  6. 05/11 completion: use 'sort -u' to deduplicate config variable namesSZEDER Gábor, Aug 13, 2019
  7. 07/11 completion: split _git_config()SZEDER Gábor, Aug 13, 2019
  8. 06/11 completion: simplify inner 'case' pattern in __gitcomp()SZEDER Gábor, Aug 13, 2019
  9. 08/11 completion: complete configuration sections and variable names for 'git -c'SZEDER Gábor, Aug 13, 2019
  10. 11/11 completion: complete config variables and values for 'git clone --config='SZEDER Gábor, Aug 13, 2019
  11. 10/11 completion: complete config variables names and values for 'git clone -c'SZEDER Gábor, Aug 13, 2019
  12. 09/11 completion: complete values of configuration variables after 'git -c var='SZEDER Gábor, Aug 13, 2019

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.