Merge branch 'pb/complete-config'
The command line completion script (in contrib/) learned to complete configuration variable names better. * pb/complete-config: completion: add and use __git_compute_second_level_config_vars_for_section completion: add and use __git_compute_first_level_config_vars_for_section completion: complete 'submodule.*' config variables completion: add space after config variable names also in Bash 3
This commit is contained in:
@ -2660,6 +2660,31 @@ __git_compute_config_vars ()
|
|||||||
__git_config_vars="$(git help --config-for-completion)"
|
__git_config_vars="$(git help --config-for-completion)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__git_config_vars_all=
|
||||||
|
__git_compute_config_vars_all ()
|
||||||
|
{
|
||||||
|
test -n "$__git_config_vars_all" ||
|
||||||
|
__git_config_vars_all="$(git --no-pager help --config)"
|
||||||
|
}
|
||||||
|
|
||||||
|
__git_compute_first_level_config_vars_for_section ()
|
||||||
|
{
|
||||||
|
local section="$1"
|
||||||
|
__git_compute_config_vars
|
||||||
|
local this_section="__git_first_level_config_vars_for_section_${section}"
|
||||||
|
test -n "${!this_section}" ||
|
||||||
|
printf -v "__git_first_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars" | grep -E "^${section}\.[a-z]" | awk -F. '{print $2}')"
|
||||||
|
}
|
||||||
|
|
||||||
|
__git_compute_second_level_config_vars_for_section ()
|
||||||
|
{
|
||||||
|
local section="$1"
|
||||||
|
__git_compute_config_vars_all
|
||||||
|
local this_section="__git_second_level_config_vars_for_section_${section}"
|
||||||
|
test -n "${!this_section}" ||
|
||||||
|
printf -v "__git_second_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars_all" | grep -E "^${section}\.<" | awk -F. '{print $3}')"
|
||||||
|
}
|
||||||
|
|
||||||
__git_config_sections=
|
__git_config_sections=
|
||||||
__git_compute_config_sections ()
|
__git_compute_config_sections ()
|
||||||
{
|
{
|
||||||
@ -2804,73 +2829,50 @@ __git_complete_config_variable_name ()
|
|||||||
done
|
done
|
||||||
|
|
||||||
case "$cur_" in
|
case "$cur_" in
|
||||||
branch.*.*)
|
branch.*.*|guitool.*.*|difftool.*.*|man.*.*|mergetool.*.*|remote.*.*|submodule.*.*|url.*.*)
|
||||||
local pfx="${cur_%.*}."
|
local pfx="${cur_%.*}."
|
||||||
cur_="${cur_##*.}"
|
cur_="${cur_##*.}"
|
||||||
__gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx"
|
local section="${pfx%.*.}"
|
||||||
|
__git_compute_second_level_config_vars_for_section "${section}"
|
||||||
|
local this_section="__git_second_level_config_vars_for_section_${section}"
|
||||||
|
__gitcomp "${!this_section}" "$pfx" "$cur_" "$sfx"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
branch.*)
|
branch.*)
|
||||||
local pfx="${cur_%.*}."
|
local pfx="${cur_%.*}."
|
||||||
cur_="${cur_#*.}"
|
cur_="${cur_#*.}"
|
||||||
|
local section="${pfx%.}"
|
||||||
__gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
|
__gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
|
||||||
__gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "${sfx- }"
|
__git_compute_first_level_config_vars_for_section "${section}"
|
||||||
return
|
local this_section="__git_first_level_config_vars_for_section_${section}"
|
||||||
;;
|
__gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
|
||||||
guitool.*.*)
|
|
||||||
local pfx="${cur_%.*}."
|
|
||||||
cur_="${cur_##*.}"
|
|
||||||
__gitcomp "
|
|
||||||
argPrompt cmd confirm needsFile noConsole noRescan
|
|
||||||
prompt revPrompt revUnmerged title
|
|
||||||
" "$pfx" "$cur_" "$sfx"
|
|
||||||
return
|
|
||||||
;;
|
|
||||||
difftool.*.*)
|
|
||||||
local pfx="${cur_%.*}."
|
|
||||||
cur_="${cur_##*.}"
|
|
||||||
__gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
|
|
||||||
return
|
|
||||||
;;
|
|
||||||
man.*.*)
|
|
||||||
local pfx="${cur_%.*}."
|
|
||||||
cur_="${cur_##*.}"
|
|
||||||
__gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
|
|
||||||
return
|
|
||||||
;;
|
|
||||||
mergetool.*.*)
|
|
||||||
local pfx="${cur_%.*}."
|
|
||||||
cur_="${cur_##*.}"
|
|
||||||
__gitcomp "cmd path trustExitCode" "$pfx" "$cur_" "$sfx"
|
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
pager.*)
|
pager.*)
|
||||||
local pfx="${cur_%.*}."
|
local pfx="${cur_%.*}."
|
||||||
cur_="${cur_#*.}"
|
cur_="${cur_#*.}"
|
||||||
__git_compute_all_commands
|
__git_compute_all_commands
|
||||||
__gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx- }"
|
__gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx:- }"
|
||||||
return
|
|
||||||
;;
|
|
||||||
remote.*.*)
|
|
||||||
local pfx="${cur_%.*}."
|
|
||||||
cur_="${cur_##*.}"
|
|
||||||
__gitcomp "
|
|
||||||
url proxy fetch push mirror skipDefaultUpdate
|
|
||||||
receivepack uploadpack tagOpt pushurl
|
|
||||||
" "$pfx" "$cur_" "$sfx"
|
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
remote.*)
|
remote.*)
|
||||||
local pfx="${cur_%.*}."
|
local pfx="${cur_%.*}."
|
||||||
cur_="${cur_#*.}"
|
cur_="${cur_#*.}"
|
||||||
|
local section="${pfx%.}"
|
||||||
__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
|
__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
|
||||||
__gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "${sfx- }"
|
__git_compute_first_level_config_vars_for_section "${section}"
|
||||||
|
local this_section="__git_first_level_config_vars_for_section_${section}"
|
||||||
|
__gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
url.*.*)
|
submodule.*)
|
||||||
local pfx="${cur_%.*}."
|
local pfx="${cur_%.*}."
|
||||||
cur_="${cur_##*.}"
|
cur_="${cur_#*.}"
|
||||||
__gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_" "$sfx"
|
local section="${pfx%.}"
|
||||||
|
__gitcomp_nl "$(__git config -f "$(__git rev-parse --show-toplevel)/.gitmodules" --get-regexp 'submodule.*.path' | awk -F. '{print $2}')" "$pfx" "$cur_" "."
|
||||||
|
__git_compute_first_level_config_vars_for_section "${section}"
|
||||||
|
local this_section="__git_first_level_config_vars_for_section_${section}"
|
||||||
|
__gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*.*)
|
*.*)
|
||||||
|
@ -2724,6 +2724,35 @@ test_expect_success 'git config - variable name include' '
|
|||||||
EOF
|
EOF
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup for git config submodule tests' '
|
||||||
|
test_create_repo sub &&
|
||||||
|
test_commit -C sub initial &&
|
||||||
|
git submodule add ./sub
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git config - variable name - submodule and __git_compute_first_level_config_vars_for_section' '
|
||||||
|
test_completion "git config submodule." <<-\EOF
|
||||||
|
submodule.active Z
|
||||||
|
submodule.alternateErrorStrategy Z
|
||||||
|
submodule.alternateLocation Z
|
||||||
|
submodule.fetchJobs Z
|
||||||
|
submodule.propagateBranches Z
|
||||||
|
submodule.recurse Z
|
||||||
|
submodule.sub.Z
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git config - variable name - __git_compute_second_level_config_vars_for_section' '
|
||||||
|
test_completion "git config submodule.sub." <<-\EOF
|
||||||
|
submodule.sub.url Z
|
||||||
|
submodule.sub.update Z
|
||||||
|
submodule.sub.branch Z
|
||||||
|
submodule.sub.fetchRecurseSubmodules Z
|
||||||
|
submodule.sub.ignore Z
|
||||||
|
submodule.sub.active Z
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git config - value' '
|
test_expect_success 'git config - value' '
|
||||||
test_completion "git config color.pager " <<-\EOF
|
test_completion "git config color.pager " <<-\EOF
|
||||||
false Z
|
false Z
|
||||||
|
Reference in New Issue
Block a user