completion: adapt git-config(1) to complete subcommands

With fe3ccc7aab (Merge branch 'ps/config-subcommands', 2024-05-15),
git-config(1) has gained support for subcommands. These subcommands live
next to the old, action-based mode, so that both the old and new way
continue to work.

The manpage for this command has been updated to prominently show the
subcommands, and the action-based modes are marked as deprecated. Update
Bash completion scripts accordingly to advertise subcommands instead of
actions.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2024-05-17 08:13:36 +02:00
committed by Junio C Hamano
parent 19fe900cfc
commit 5dd5007f89
2 changed files with 73 additions and 25 deletions

View File

@ -2989,22 +2989,42 @@ __git_complete_config_variable_name_and_value ()
_git_config () _git_config ()
{ {
case "$prev" in local subcommands subcommand
--get|--get-all|--unset|--unset-all)
__gitcomp_nl "$(__git_config_get_set_variables)" __git_resolve_builtins "config"
subcommands="$___git_resolved_builtins"
subcommand="$(__git_find_subcommand "$subcommands")"
if [ -z "$subcommand" ]
then
__gitcomp "$subcommands"
return return
;; fi
*.*)
__git_complete_config_variable_value case "$cur" in
--*)
__gitcomp_builtin "config_$subcommand"
return return
;; ;;
esac esac
case "$cur" in
--*) case "$subcommand" in
__gitcomp_builtin config get)
__gitcomp_nl "$(__git_config_get_set_variables)"
;; ;;
*) set)
__git_complete_config_variable_name case "$prev" in
*.*)
__git_complete_config_variable_value
;;
*)
__git_complete_config_variable_name
;;
esac
;;
unset)
__gitcomp_nl "$(__git_config_get_set_variables)"
;; ;;
esac esac
} }

View File

@ -2742,30 +2742,58 @@ do
' '
done done
test_expect_success 'git config - section' ' test_expect_success 'git config subcommand' '
test_completion "git config br" <<-\EOF test_completion "git config " <<-\EOF
edit Z
get Z
list Z
remove-section Z
rename-section Z
set Z
unset Z
EOF
'
test_expect_success 'git config subcommand options' '
test_completion "git config get --show-" <<-\EOF
--show-names Z
--show-origin Z
--show-scope Z
EOF
'
test_expect_success 'git config get' '
test_when_finished "rm -f cfgfile" &&
git config set --file cfgfile foo.bar baz &&
test_completion "git config get --file cfgfile foo." <<-\EOF
foo.bar Z
EOF
'
test_expect_success 'git config set - section' '
test_completion "git config set br" <<-\EOF
branch.Z branch.Z
browser.Z browser.Z
EOF EOF
' '
test_expect_success 'git config - section include, includeIf' ' test_expect_success 'git config set - section include, includeIf' '
test_completion "git config inclu" <<-\EOF test_completion "git config set inclu" <<-\EOF
include.Z include.Z
includeIf.Z includeIf.Z
EOF EOF
' '
test_expect_success 'git config - variable name' ' test_expect_success 'git config set - variable name' '
test_completion "git config log.d" <<-\EOF test_completion "git config set log.d" <<-\EOF
log.date Z log.date Z
log.decorate Z log.decorate Z
log.diffMerges Z log.diffMerges Z
EOF EOF
' '
test_expect_success 'git config - variable name include' ' test_expect_success 'git config set - variable name include' '
test_completion "git config include.p" <<-\EOF test_completion "git config set include.p" <<-\EOF
include.path Z include.path Z
EOF EOF
' '
@ -2776,8 +2804,8 @@ test_expect_success 'setup for git config submodule tests' '
git submodule add ./sub git submodule add ./sub
' '
test_expect_success 'git config - variable name - submodule and __git_compute_first_level_config_vars_for_section' ' test_expect_success 'git config set - variable name - submodule and __git_compute_first_level_config_vars_for_section' '
test_completion "git config submodule." <<-\EOF test_completion "git config set submodule." <<-\EOF
submodule.active Z submodule.active Z
submodule.alternateErrorStrategy Z submodule.alternateErrorStrategy Z
submodule.alternateLocation Z submodule.alternateLocation Z
@ -2788,8 +2816,8 @@ test_expect_success 'git config - variable name - submodule and __git_compute_fi
EOF EOF
' '
test_expect_success 'git config - variable name - __git_compute_second_level_config_vars_for_section' ' test_expect_success 'git config set - variable name - __git_compute_second_level_config_vars_for_section' '
test_completion "git config submodule.sub." <<-\EOF test_completion "git config set submodule.sub." <<-\EOF
submodule.sub.url Z submodule.sub.url Z
submodule.sub.update Z submodule.sub.update Z
submodule.sub.branch Z submodule.sub.branch Z
@ -2799,8 +2827,8 @@ test_expect_success 'git config - variable name - __git_compute_second_level_con
EOF EOF
' '
test_expect_success 'git config - value' ' test_expect_success 'git config set - value' '
test_completion "git config color.pager " <<-\EOF test_completion "git config set color.pager " <<-\EOF
false Z false Z
true Z true Z
EOF EOF