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

[PATCH 07/11] completion: split _git_config()

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

_git_config() contains two enormous case statements, one to complete configuration sections and variable names, and the other to complete their values.

Split these out into two separate helper functions, so in the next patches we can use them to implement completion for 'git -c <TAB>'.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
---
 contrib/completion/git-completion.bash | 39 ++++++++++++++++++++------
 1 file changed, 30 insertions(+), 9 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index fc437bf3eb..3e9c5b6b71 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2228,7 +2228,8 @@ __git_compute_config_vars ()
 	__git_config_vars="$(git help --config-for-completion | sort -u)"
 }
 
-_git_config ()
+# Completes possible values of various configuration variables.
+__git_complete_config_variable_value ()
 {
 	local varname
 
@@ -2320,19 +2321,16 @@ _git_config ()
 		__gitcomp "7bit 8bit quoted-printable base64"
 		return
 		;;
-	--get|--get-all|--unset|--unset-all)
-		__gitcomp_nl "$(__git_config_get_set_variables)"
-		return
-		;;
 	*.*)
 		return
 		;;
 	esac
+}
+
+# Completes configuration sections, subsections, variable names.
+__git_complete_config_variable_name ()
+{
 	case "$cur" in
-	--*)
-		__gitcomp_builtin config
-		return
-		;;
 	branch.*.*)
 		local pfx="${cur%.*}." cur_="${cur##*.}"
 		__gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_"
@@ -2407,6 +2405,29 @@ _git_config ()
 						print s "."
 				}
 				')"
+		;;
+	esac
+}
+
+_git_config ()
+{
+	case "$prev" in
+	--get|--get-all|--unset|--unset-all)
+		__gitcomp_nl "$(__git_config_get_set_variables)"
+		return
+		;;
+	*.*)
+		__git_complete_config_variable_value
+		return
+		;;
+	esac
+	case "$cur" in
+	--*)
+		__gitcomp_builtin config
+		;;
+	*)
+		__git_complete_config_variable_name
+		;;
 	esac
 }
 
-- 
2.23.0.rc2.350.gf4fdc32db7
Previous: SZEDER GáborNext: SZEDER Gábor
Message 7 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.