зеркало из https://github.com/microsoft/git.git
git-completion.bash: introduce __gitcomp_builtin
This is a __gitcomp wrapper that will execute git ... --git-completion-helper to get the list of completable options. The call will be made only once and cached to avoid performance issues, especially on Windows. __gitcomp_builtin() allows callers to change its output a bit by adding some more options, or removing some. - Current --git-completion-helper for example does not output --no-foo form, this has to be added manually by __gitcomp_builtin() callers when necessary - Some options from --git-completion-helper should only be available in certain conditions (e.g. --continue and friends). __gitcomp_builtin() callers can remove them if the conditions are not met. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
1224781d60
Коммит
d401f3debc
|
@ -280,6 +280,39 @@ __gitcomp ()
|
|||
esac
|
||||
}
|
||||
|
||||
# This function is equivalent to
|
||||
#
|
||||
# __gitcomp "$(git xxx --git-completion-helper) ..."
|
||||
#
|
||||
# except that the output is cached. Accept 1-3 arguments:
|
||||
# 1: the git command to execute, this is also the cache key
|
||||
# 2: extra options to be added on top (e.g. negative forms)
|
||||
# 3: options to be excluded
|
||||
__gitcomp_builtin ()
|
||||
{
|
||||
# spaces must be replaced with underscore for multi-word
|
||||
# commands, e.g. "git remote add" becomes remote_add.
|
||||
local cmd="$1"
|
||||
local incl="$2"
|
||||
local excl="$3"
|
||||
|
||||
local var=__gitcomp_builtin_"${cmd/-/_}"
|
||||
local options
|
||||
eval "options=\$$var"
|
||||
|
||||
if [ -z "$options" ]; then
|
||||
# leading and trailing spaces are significant to make
|
||||
# option removal work correctly.
|
||||
options=" $(__git ${cmd/_/ } --git-completion-helper) $incl "
|
||||
for i in $excl; do
|
||||
options="${options/ $i / }"
|
||||
done
|
||||
eval "$var=\"$options\""
|
||||
fi
|
||||
|
||||
__gitcomp "$options"
|
||||
}
|
||||
|
||||
# Variation of __gitcomp_nl () that appends to the existing list of
|
||||
# completion candidates, COMPREPLY.
|
||||
__gitcomp_nl_append ()
|
||||
|
|
Загрузка…
Ссылка в новой задаче