diff mbox series

[07/11] completion: split _git_config()

Message ID 20190813122652.16468-8-szeder.dev@gmail.com (mailing list archive)
State New, archived
Headers show
Series completion: complete configuration variables and values after 'git -c <TAB>' | expand

Commit Message

SZEDER Gábor Aug. 13, 2019, 12:26 p.m. UTC
_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 mbox series

Patch

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
 }