completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
Add a GIT_COMPLETION_SHOW_ALL_COMMANDS=1 configuration setting to go with the existing GIT_COMPLETION_SHOW_ALL=1 added inmaintc099f579b9
(completion: add GIT_COMPLETION_SHOW_ALL env var, 2020-08-19). This will include plumbing commands such as "cat-file" in "git <TAB>" and "git c<TAB>" completion. Without/with this I have 134 and 243 completion with git <TAB>, respectively. It was already possible to do this by tweaking GIT_TESTING_PORCELAIN_COMMAND_LIST= from the outside, that testing variable was added in84a9713106
(completion: let git provide the completable command list, 2018-05-20). Doing this before loading git-completion.bash worked: export GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=builtins,main,list-mainporcelain,others,nohelpers,alias,list-complete,config)" But such testing variables are not meant to be used from the outside, and we make no guarantees that those internal won't change. So let's expose this as a dedicated configuration knob. It would be better to teach --list-cmds=* a new category which would include all of these groups, but that's a larger change that we can leave for some other time. 1. https://lore.kernel.org/git/CAGP6POJ9gwp+t-eP3TPkivBLLbNb2+qj=61Mehcj=1BgrVOSLA@mail.gmail.com/ Reported-by: Hongyi Zhao <hongyi.zhao@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
parent
59d9442f28
commit
d9f88dd8bb
|
@ -49,6 +49,11 @@
|
|||
# and git-switch completion (e.g., completing "foo" when "origin/foo"
|
||||
# exists).
|
||||
#
|
||||
# GIT_COMPLETION_SHOW_ALL_COMMANDS
|
||||
#
|
||||
# When set to "1" suggest all commands, including plumbing commands
|
||||
# which are hidden by default (e.g. "cat-file" on "git ca<TAB>").
|
||||
#
|
||||
# GIT_COMPLETION_SHOW_ALL
|
||||
#
|
||||
# When set to "1" suggest all options, including options which are
|
||||
|
@ -3455,7 +3460,13 @@ __git_main ()
|
|||
then
|
||||
__gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST"
|
||||
else
|
||||
__gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)"
|
||||
local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config
|
||||
|
||||
if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1"
|
||||
then
|
||||
list_cmds=builtins,$list_cmds
|
||||
fi
|
||||
__gitcomp "$(__git --list-cmds=$list_cmds)"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -2440,6 +2440,37 @@ test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' '
|
|||
)
|
||||
'
|
||||
|
||||
test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' '
|
||||
(
|
||||
. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
|
||||
sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&
|
||||
|
||||
# Just mainporcelain, not plumbing commands
|
||||
run_completion "git c" &&
|
||||
grep checkout out &&
|
||||
! grep cat-file out
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' '
|
||||
(
|
||||
. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
|
||||
GIT_COMPLETION_SHOW_ALL_COMMANDS=1 &&
|
||||
export GIT_COMPLETION_SHOW_ALL_COMMANDS &&
|
||||
sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&
|
||||
|
||||
# Both mainporcelain and plumbing commands
|
||||
run_completion "git c" &&
|
||||
grep checkout out &&
|
||||
grep cat-file out &&
|
||||
|
||||
# Check "gitk", a "main" command, but not a built-in + more plumbing
|
||||
run_completion "git g" &&
|
||||
grep gitk out &&
|
||||
grep get-tar-commit-id out
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success '__git_complete' '
|
||||
unset -f __git_wrap__git_main &&
|
||||
|
||||
|
|
Loading…
Reference in New Issue