зеркало из https://github.com/microsoft/git.git
Merge branch 'tb/complete-status'
The completion script (in contrib/) learned to complete "git status" options. * tb/complete-status: completion: add git status completion: add __git_get_option_value helper completion: factor out untracked file modes into a variable
This commit is contained in:
Коммит
deee904aac
|
@ -803,6 +803,50 @@ __git_find_on_cmdline ()
|
|||
done
|
||||
}
|
||||
|
||||
# Echo the value of an option set on the command line or config
|
||||
#
|
||||
# $1: short option name
|
||||
# $2: long option name including =
|
||||
# $3: list of possible values
|
||||
# $4: config string (optional)
|
||||
#
|
||||
# example:
|
||||
# result="$(__git_get_option_value "-d" "--do-something=" \
|
||||
# "yes no" "core.doSomething")"
|
||||
#
|
||||
# result is then either empty (no option set) or "yes" or "no"
|
||||
#
|
||||
# __git_get_option_value requires 3 arguments
|
||||
__git_get_option_value ()
|
||||
{
|
||||
local c short_opt long_opt val
|
||||
local result= values config_key word
|
||||
|
||||
short_opt="$1"
|
||||
long_opt="$2"
|
||||
values="$3"
|
||||
config_key="$4"
|
||||
|
||||
((c = $cword - 1))
|
||||
while [ $c -ge 0 ]; do
|
||||
word="${words[c]}"
|
||||
for val in $values; do
|
||||
if [ "$short_opt$val" = "$word" ] ||
|
||||
[ "$long_opt$val" = "$word" ]; then
|
||||
result="$val"
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
((c--))
|
||||
done
|
||||
|
||||
if [ -n "$config_key" ] && [ -z "$result" ]; then
|
||||
result="$(git --git-dir="$(__gitdir)" config "$config_key")"
|
||||
fi
|
||||
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
__git_has_doubledash ()
|
||||
{
|
||||
local c=1
|
||||
|
@ -1098,6 +1142,8 @@ _git_clone ()
|
|||
esac
|
||||
}
|
||||
|
||||
__git_untracked_file_modes="all no normal"
|
||||
|
||||
_git_commit ()
|
||||
{
|
||||
case "$prev" in
|
||||
|
@ -1119,7 +1165,7 @@ _git_commit ()
|
|||
return
|
||||
;;
|
||||
--untracked-files=*)
|
||||
__gitcomp "all no normal" "" "${cur##--untracked-files=}"
|
||||
__gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}"
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
|
@ -1780,6 +1826,56 @@ _git_stage ()
|
|||
_git_add
|
||||
}
|
||||
|
||||
_git_status ()
|
||||
{
|
||||
local complete_opt
|
||||
local untracked_state
|
||||
|
||||
case "$cur" in
|
||||
--ignore-submodules=*)
|
||||
__gitcomp "none untracked dirty all" "" "${cur##--ignore-submodules=}"
|
||||
return
|
||||
;;
|
||||
--untracked-files=*)
|
||||
__gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}"
|
||||
return
|
||||
;;
|
||||
--column=*)
|
||||
__gitcomp "
|
||||
always never auto column row plain dense nodense
|
||||
" "" "${cur##--column=}"
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp "
|
||||
--short --branch --porcelain --long --verbose
|
||||
--untracked-files= --ignore-submodules= --ignored
|
||||
--column= --no-column
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
untracked_state="$(__git_get_option_value "-u" "--untracked-files=" \
|
||||
"$__git_untracked_file_modes" "status.showUntrackedFiles")"
|
||||
|
||||
case "$untracked_state" in
|
||||
no)
|
||||
# --ignored option does not matter
|
||||
complete_opt=
|
||||
;;
|
||||
all|normal|*)
|
||||
complete_opt="--cached --directory --no-empty-directory --others"
|
||||
|
||||
if [ -n "$(__git_find_on_cmdline "--ignored")" ]; then
|
||||
complete_opt="$complete_opt --ignored --exclude=*"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
__git_complete_index_file "$complete_opt"
|
||||
}
|
||||
|
||||
__git_config_get_set_variables ()
|
||||
{
|
||||
local prevword word config_file= c=$cword
|
||||
|
|
Загрузка…
Ссылка в новой задаче