Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
a32564e0
Unverified
Commit
a32564e0
authored
Oct 24, 2020
by
Felipe Contreras
Committed by
GitHub
Oct 24, 2020
Browse files
gitfast: update to latest upstream and more (#9382)
parent
3b1699b5
Changes
5
Show whitespace changes
Inline
Side-by-side
plugins/gitfast/_git
View file @
a32564e0
...
@@ -2,25 +2,24 @@
...
@@ -2,25 +2,24 @@
# zsh completion wrapper for git
# zsh completion wrapper for git
#
#
# Copyright (c) 2012-20
13
Felipe Contreras <felipe.contreras@gmail.com>
# Copyright (c) 2012-20
20
Felipe Contreras <felipe.contreras@gmail.com>
#
#
#
You need git's bash completion script installed somewhere, by default it
#
The recommended way to install this script is to make a copy of it as a
#
would be the location bash-completion uses
.
#
file named '_git' inside any directory in your fpath
.
#
#
# If your script is somewhere else, you can configure it on your ~/.zshrc:
# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git',
# and then add the following to your ~/.zshrc file:
#
#
#
zstyle ':completion:*:*:git:*' script ~/.git-completion.zsh
#
fpath=(~/.zsh $fpath)
#
#
# The recommended way to install this script is to copy to '~/.zsh/_git', and
# You need git's bash completion script installed. By default bash-completion's
# then add the following to your ~/.zshrc file:
# location will be used (e.g. pkg-config --variable=completionsdir bash-completion).
#
# If your bash completion script is somewhere else, you can specify the
# location in your ~/.zshrc:
#
# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
#
#
# fpath=(~/.zsh $fpath)
complete ()
{
# do nothing
return 0
}
zstyle -T ':completion:*:*:git:*' tag-order && \
zstyle -T ':completion:*:*:git:*' tag-order && \
zstyle ':completion:*:*:git:*' tag-order 'common-commands'
zstyle ':completion:*:*:git:*' tag-order 'common-commands'
...
@@ -30,16 +29,17 @@ if [ -z "$script" ]; then
...
@@ -30,16 +29,17 @@ if [ -z "$script" ]; then
local -a locations
local -a locations
local e
local e
locations=(
locations=(
"$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
"$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash
'/etc/bash_completion.d/git' # fedora, old debian
"$HOME/.local/share/bash-completion/completions/git"
'/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
"$(pkg-config --variable=completionsdir bash-completion)"/git
'/usr/share/bash-completion/git' # gentoo
'/usr/share/bash-completion/completions/git'
'/etc/bash_completion.d/git' # old debian
)
)
for e in $locations; do
for e in $locations; do
test -f $e && script="$e" && break
test -f $e && script="$e" && break
done
done
fi
fi
ZSH_VERS
ION=
''
. "$script"
GIT_SOURCING_ZSH_COMPLET
ION=
y
. "$script"
__gitcomp ()
__gitcomp ()
{
{
...
@@ -50,13 +50,35 @@ __gitcomp ()
...
@@ -50,13 +50,35 @@ __gitcomp ()
case "$cur_" in
case "$cur_" in
--*=)
--*=)
;;
;;
--no-*)
local c IFS=$' \t\n'
local -a array
for c in ${=1}; do
if [[ $c == "--" ]]; then
continue
fi
c="$c${4-}"
case $c in
--*=|*.) ;;
*) c="$c " ;;
esac
array+=("$c")
done
compset -P '*[=:]'
compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
;;
*)
*)
local c IFS=$' \t\n'
local c IFS=$' \t\n'
local -a array
local -a array
for c in ${=1}; do
for c in ${=1}; do
if [[ $c == "--" ]]; then
c="--no-...${4-}"
array+=("$c ")
break
fi
c="$c${4-}"
c="$c${4-}"
case $c in
case $c in
--*=
*
|*.) ;;
--*=|*.) ;;
*) c="$c " ;;
*) c="$c " ;;
esac
esac
array+=("$c")
array+=("$c")
...
@@ -71,35 +93,57 @@ __gitcomp_direct ()
...
@@ -71,35 +93,57 @@ __gitcomp_direct ()
{
{
emulate -L zsh
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compset -P '*[=:]'
compadd -Q -- ${
=
1} && _ret=0
compadd -Q
-S ''
-- ${
(f)
1} && _ret=0
}
}
__gitcomp_nl ()
__gitcomp_nl ()
{
{
emulate -L zsh
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compset -P '*[=:]'
compadd -Q -S "${4- }" -p "${2-}" -- ${
=
1} && _ret=0
compadd -Q -S "${4- }" -p "${2-}" -- ${
(f)
1} && _ret=0
}
}
__gitcomp_nl_append ()
__gitcomp_nl_append ()
{
{
emulate -L zsh
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
compadd -Q -S "${4- }" -p "${2-}" -- ${(f)1} && _ret=0
}
__gitcomp_file_direct ()
{
emulate -L zsh
compadd -f -- ${(f)1} && _ret=0
}
}
__gitcomp_file ()
__gitcomp_file ()
{
{
emulate -L zsh
emulate -L zsh
local IFS=$'\n'
compadd -f -p "${2-}" -- ${(f)1} && _ret=0
compset -P '*[=:]'
}
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
_git_zsh ()
{
__gitcomp "v1.0"
}
__git_complete_command ()
{
emulate -L zsh
local command="$1"
local completion_func="_git_${command//-/_}"
if (( $+functions[$completion_func] )); then
emulate ksh -c $completion_func
return 0
else
return 1
fi
}
}
__git_zsh_bash_func ()
__git_zsh_bash_func ()
...
@@ -108,14 +152,12 @@ __git_zsh_bash_func ()
...
@@ -108,14 +152,12 @@ __git_zsh_bash_func ()
local command=$1
local command=$1
local completion_func="_git_${command//-/_}"
__git_complete_command "$command" && return
declare -f $completion_func >/dev/null && $completion_func && return
local expansion=$(__git_aliased_command "$command")
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
if [ -n "$expansion" ]; then
words[1]=$expansion
words[1]=$expansion
completion_func="_git_${expansion//-/_}"
__git_complete_command "$expansion"
declare -f $completion_func >/dev/null && $completion_func
fi
fi
}
}
...
@@ -140,9 +182,11 @@ __git_zsh_cmd_common ()
...
@@ -140,9 +182,11 @@ __git_zsh_cmd_common ()
push:'update remote refs along with associated objects'
push:'update remote refs along with associated objects'
rebase:'forward-port local commits to the updated upstream head'
rebase:'forward-port local commits to the updated upstream head'
reset:'reset current HEAD to the specified state'
reset:'reset current HEAD to the specified state'
restore:'restore working tree files'
rm:'remove files from the working tree and from the index'
rm:'remove files from the working tree and from the index'
show:'show various types of objects'
show:'show various types of objects'
status:'show the working tree status'
status:'show the working tree status'
switch:'switch branches'
tag:'create, list, delete or verify a tag object signed with GPG')
tag:'create, list, delete or verify a tag object signed with GPG')
_describe -t common-commands 'common commands' list && _ret=0
_describe -t common-commands 'common commands' list && _ret=0
}
}
...
@@ -150,8 +194,9 @@ __git_zsh_cmd_common ()
...
@@ -150,8 +194,9 @@ __git_zsh_cmd_common ()
__git_zsh_cmd_alias ()
__git_zsh_cmd_alias ()
{
{
local -a list
local -a list
list=(${${${(0)"$(git config -z --get-regexp '^alias\.')"}#alias.}%$'\n'*})
list=(${${(0)"$(git config -z --get-regexp '^alias\.*')"}#alias.})
_describe -t alias-commands 'aliases' list $* && _ret=0
list=(${(f)"$(printf "%s:alias for '%s'\n" ${(f@)list})"})
_describe -t alias-commands 'aliases' list && _ret=0
}
}
__git_zsh_cmd_all ()
__git_zsh_cmd_all ()
...
@@ -189,10 +234,13 @@ __git_zsh_main ()
...
@@ -189,10 +234,13 @@ __git_zsh_main ()
case $state in
case $state in
(command)
(command)
_alternative \
_tags common-commands alias-commands all-commands
'alias-commands:alias:__git_zsh_cmd_alias' \
while _tags; do
'common-commands:common:__git_zsh_cmd_common' \
_requested common-commands && __git_zsh_cmd_common
'all-commands:all:__git_zsh_cmd_all' && _ret=0
_requested alias-commands && __git_zsh_cmd_alias
_requested all-commands && __git_zsh_cmd_all
let _ret || break
done
;;
;;
(arg)
(arg)
local command="${words[1]}" __git_dir
local command="${words[1]}" __git_dir
...
...
plugins/gitfast/git-completion.bash
View file @
a32564e0
...
@@ -29,13 +29,21 @@
...
@@ -29,13 +29,21 @@
# tell the completion to use commit completion. This also works with aliases
# tell the completion to use commit completion. This also works with aliases
# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
#
#
# Compatible with bash 3.2.57.
#
# You can set the following environment variables to influence the behavior of
# You can set the following environment variables to influence the behavior of
# the completion routines:
# the completion routines:
#
#
# GIT_COMPLETION_CHECKOUT_NO_GUESS
# GIT_COMPLETION_CHECKOUT_NO_GUESS
#
#
# When set to "1", do not include "DWIM" suggestions in git-checkout
# When set to "1", do not include "DWIM" suggestions in git-checkout
# completion (e.g., completing "foo" when "origin/foo" exists).
# and git-switch completion (e.g., completing "foo" when "origin/foo"
# exists).
#
# GIT_COMPLETION_SHOW_ALL
#
# When set to "1" suggest all options, including options which are
# typically hidden (e.g. '--allow-empty' for 'git commit').
case
"
$COMP_WORDBREAKS
"
in
case
"
$COMP_WORDBREAKS
"
in
*
:
*
)
: great
;;
*
:
*
)
: great
;;
...
@@ -47,7 +55,7 @@ esac
...
@@ -47,7 +55,7 @@ esac
# variable.
# variable.
__git_find_repo_path
()
__git_find_repo_path
()
{
{
if
[
-n
"
$__git_repo_path
"
]
;
then
if
[
-n
"
$
{
__git_repo_path
-
}
"
]
;
then
# we already know where it is
# we already know where it is
return
return
fi
fi
...
@@ -92,6 +100,70 @@ __git ()
...
@@ -92,6 +100,70 @@ __git ()
${
__git_dir
:+--git-dir
=
"
$__git_dir
"
}
"
$@
"
2>/dev/null
${
__git_dir
:+--git-dir
=
"
$__git_dir
"
}
"
$@
"
2>/dev/null
}
}
# Removes backslash escaping, single quotes and double quotes from a word,
# stores the result in the variable $dequoted_word.
# 1: The word to dequote.
__git_dequote
()
{
local
rest
=
"
$1
"
len ch
dequoted_word
=
""
while
test
-n
"
$rest
"
;
do
len
=
${#
dequoted_word
}
dequoted_word
=
"
$dequoted_word
${
rest
%%[\\\
'\"]*}"
rest="${rest:$((${#dequoted_word}-$len))}"
case "${rest:0:1}" in
\\)
ch="${rest:1:1}"
case "$ch" in
$'
\n
')
;;
*)
dequoted_word="$dequoted_word$ch"
;;
esac
rest="${rest:2}"
;;
\'
)
rest=
"
${
rest
:1
}
"
len=
${#
dequoted_word
}
dequoted_word=
"
$dequoted_word
${
rest
%%\
'*}"
rest="${rest:$((${#dequoted_word}-$len+1))}"
;;
\")
rest="${rest:1}"
while test -n "$rest" ; do
len=${#dequoted_word}
dequoted_word="$dequoted_word${rest%%[\\\"]*}"
rest="${rest:$((${#dequoted_word}-$len))}"
case "${rest:0:1}" in
\\)
ch="${rest:1:1}"
case "$ch" in
\"|\\|\$|\`)
dequoted_word="$dequoted_word$ch"
;;
$'
\n
')
;;
*)
dequoted_word="$dequoted_word\\$ch"
;;
esac
rest="${rest:2}"
;;
\")
rest="${rest:1}"
break
;;
esac
done
;;
esac
done
}
# The following function is based on code from:
# The following function is based on code from:
#
#
# bash_completion - programmable completion functions for bash 3.2+
# bash_completion - programmable completion functions for bash 3.2+
...
@@ -234,6 +306,19 @@ __gitcomp_direct ()
...
@@ -234,6 +306,19 @@ __gitcomp_direct ()
COMPREPLY=($1)
COMPREPLY=($1)
}
}
# Similar to __gitcomp_direct, but appends to COMPREPLY instead.
# Callers must take care of providing only words that match the current word
# to be completed and adding any prefix and/or suffix (trailing space!), if
# necessary.
# 1: List of newline-separated matching completion words, complete with
# prefix and suffix.
__gitcomp_direct_append ()
{
local IFS=$'
\n
'
COMPREPLY+=($1)
}
__gitcompappend ()
__gitcompappend ()
{
{
local x i=${#COMPREPLY[@]}
local x i=${#COMPREPLY[@]}
...
@@ -264,13 +349,36 @@ __gitcomp ()
...
@@ -264,13 +349,36 @@ __gitcomp ()
case "$cur_" in
case "$cur_" in
--*=)
--*=)
;;
;;
--no-*)
local c i=0 IFS=$'
\t\n
'
for c in $1; do
if [[ $c == "--" ]]; then
continue
fi
c="$c${4-}"
if [[ $c == "$cur_"* ]]; then
case $c in
--*=|*.) ;;
*) c="$c " ;;
esac
COMPREPLY[i++]="${2-}$c"
fi
done
;;
*)
*)
local c i=0 IFS=$'
\t\n
'
local c i=0 IFS=$'
\t\n
'
for c in $1; do
for c in $1; do
if [[ $c == "--" ]]; then
c="--no-...${4-}"
if [[ $c == "$cur_"* ]]; then
COMPREPLY[i++]="${2-}$c "
fi
break
fi
c="$c${4-}"
c="$c${4-}"
if [[ $c == "$cur_"* ]]; then
if [[ $c == "$cur_"* ]]; then
case $c in
case $c in
--
*
=
*
|
*
.
)
;;
*=|*.) ;;
*) c="$c " ;;
*) c="$c " ;;
esac
esac
COMPREPLY[i++]="${2-}$c"
COMPREPLY[i++]="${2-}$c"
...
@@ -280,6 +388,163 @@ __gitcomp ()
...
@@ -280,6 +388,163 @@ __gitcomp ()
esac
esac
}
}
# Clear the variables caching builtins'
options when (re-)sourcing
# the completion script.
if [[ -n
${
ZSH_VERSION
-
}
]]; then
unset
${
(M)
${
(k)parameters[@]
}
:#__gitcomp_builtin_
*
}
2>/dev/null
else
unset
$(
compgen
-v
__gitcomp_builtin_
)
fi
__gitcomp_builtin_add_default=
" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-chmod --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_am_default=
" --interactive --3way --quiet --signoff --utf8 --keep --keep-non-patch --message-id --keep-cr --no-keep-cr --scissors --whitespace= --ignore-space-change --ignore-whitespace --directory= --exclude= --include= --patch-format= --reject --resolvemsg= --continue --resolved --skip --abort --quit --show-current-patch --committer-date-is-author-date --ignore-date --rerere-autoupdate --gpg-sign -- --no-interactive --no-3way --no-quiet --no-signoff --no-utf8 --no-keep --no-keep-non-patch --no-message-id --no-scissors --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-directory --no-exclude --no-include --no-patch-format --no-reject --no-resolvemsg --no-committer-date-is-author-date --no-ignore-date --no-rerere-autoupdate --no-gpg-sign"
__gitcomp_builtin_apply_default=
" --exclude= --include= --no-add --stat --numstat --summary --check --index --intent-to-add --cached --apply --3way --build-fake-ancestor= --whitespace= --ignore-space-change --ignore-whitespace --reverse --unidiff-zero --reject --allow-overlap --verbose --inaccurate-eof --recount --directory= --add -- --no-stat --no-numstat --no-summary --no-check --no-index --no-intent-to-add --no-cached --no-apply --no-3way --no-build-fake-ancestor --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-reverse --no-unidiff-zero --no-reject --no-allow-overlap --no-verbose --no-inaccurate-eof --no-recount --no-directory"
__gitcomp_builtin_archive_default=
" --output= --remote= --exec= --no-output -- --no-remote --no-exec"
__gitcomp_builtin_bisect__helper_default=
" --next-all --write-terms --bisect-clean-state --check-expected-revs --bisect-reset --bisect-write --check-and-set-terms --bisect-next-check --bisect-terms --bisect-start --bisect-next --bisect-auto-next --bisect-autostart --no-log --log"
__gitcomp_builtin_blame_default=
" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev"
__gitcomp_builtin_branch_default=
" --verbose --quiet --track --set-upstream-to= --unset-upstream --color --remotes --contains --no-contains --abbrev --all --delete --move --copy --list --show-current --create-reflog --edit-description --merged --no-merged --column --sort= --points-at= --ignore-case --format= -- --no-verbose --no-quiet --no-track --no-set-upstream-to --no-unset-upstream --no-color --no-remotes --no-abbrev --no-all --no-delete --no-move --no-copy --no-list --no-show-current --no-create-reflog --no-edit-description --no-column --no-points-at --no-ignore-case --no-format"
__gitcomp_builtin_bugreport_default=
" --output-directory= --suffix= --no-output-directory -- --no-suffix"
__gitcomp_builtin_cat_file_default=
" --textconv --filters --path= --allow-unknown-type --buffer --batch --batch-check --follow-symlinks --batch-all-objects --unordered --no-path -- --no-allow-unknown-type --no-buffer --no-follow-symlinks --no-batch-all-objects --no-unordered"
__gitcomp_builtin_check_attr_default=
" --all --cached --stdin --no-all -- --no-cached --no-stdin"
__gitcomp_builtin_check_ignore_default=
" --quiet --verbose --stdin --non-matching --no-index --index -- --no-quiet --no-verbose --no-stdin --no-non-matching"
__gitcomp_builtin_check_mailmap_default=
" --stdin --no-stdin"
__gitcomp_builtin_checkout_default=
" --guess --overlay --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-guess -- --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_checkout_index_default=
" --all --force --quiet --no-create --index --stdin --temp --prefix= --stage= --create -- --no-all --no-force --no-quiet --no-index --no-stdin --no-temp --no-prefix"
__gitcomp_builtin_cherry_default=
" --abbrev --verbose --no-abbrev -- --no-verbose"
__gitcomp_builtin_cherry_pick_default=
" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --ff --allow-empty --allow-empty-message --keep-redundant-commits --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign --no-ff --no-allow-empty --no-allow-empty-message --no-keep-redundant-commits"
__gitcomp_builtin_clean_default=
" --quiet --dry-run --interactive --exclude= --no-quiet -- --no-dry-run --no-interactive"
__gitcomp_builtin_clone_default=
" --verbose --quiet --progress --no-checkout --bare --mirror --local --no-hardlinks --shared --recurse-submodules --recursive --jobs= --template= --reference= --reference-if-able= --dissociate --origin= --branch= --upload-pack= --depth= --shallow-since= --shallow-exclude= --single-branch --no-tags --shallow-submodules --separate-git-dir= --config= --server-option= --ipv4 --ipv6 --filter= --remote-submodules --sparse --checkout --hardlinks --tags -- --no-verbose --no-quiet --no-progress --no-bare --no-mirror --no-local --no-shared --no-recurse-submodules --no-recursive --no-jobs --no-template --no-reference --no-reference-if-able --no-dissociate --no-origin --no-branch --no-upload-pack --no-depth --no-shallow-since --no-shallow-exclude --no-single-branch --no-shallow-submodules --no-separate-git-dir --no-config --no-server-option --no-ipv4 --no-ipv6 --no-filter --no-remote-submodules --no-sparse"
__gitcomp_builtin_column_default=
" --command= --mode --raw-mode= --width= --indent= --nl= --padding= --no-command -- --no-mode --no-raw-mode --no-width --no-indent --no-nl --no-padding"
__gitcomp_builtin_commit_default=
" --quiet --verbose --file= --author= --date= --message= --reedit-message= --reuse-message= --fixup= --squash= --reset-author --signoff --template= --edit --cleanup= --status --gpg-sign --all --include --interactive --patch --only --no-verify --dry-run --short --branch --ahead-behind --porcelain --long --null --amend --no-post-rewrite --untracked-files --pathspec-from-file= --pathspec-file-nul --verify --post-rewrite -- --no-quiet --no-verbose --no-file --no-author --no-date --no-message --no-reedit-message --no-reuse-message --no-fixup --no-squash --no-reset-author --no-signoff --no-template --no-edit --no-cleanup --no-status --no-gpg-sign --no-all --no-include --no-interactive --no-patch --no-only --no-dry-run --no-short --no-branch --no-ahead-behind --no-porcelain --no-long --no-null --no-amend --no-untracked-files --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_commit_graph_default=
" --object-dir= --no-object-dir"
__gitcomp_builtin_config_default=
" --global --system --local --worktree --file= --blob= --get --get-all --get-regexp --get-urlmatch --replace-all --add --unset --unset-all --rename-section --remove-section --list --edit --get-color --get-colorbool --type= --bool --int --bool-or-int --bool-or-str --path --expiry-date --null --name-only --includes --show-origin --show-scope --default= --no-global -- --no-system --no-local --no-worktree --no-file --no-blob --no-get --no-get-all --no-get-regexp --no-get-urlmatch --no-replace-all --no-add --no-unset --no-unset-all --no-rename-section --no-remove-section --no-list --no-edit --no-get-color --no-get-colorbool --no-type --no-null --no-name-only --no-includes --no-show-origin --no-show-scope --no-default"
__gitcomp_builtin_count_objects_default=
" --verbose --human-readable --no-verbose -- --no-human-readable"
__gitcomp_builtin_credential_cache_default=
" --timeout= --socket= --no-timeout -- --no-socket"
__gitcomp_builtin_credential_cache__daemon_default=
" --debug --no-debug"
__gitcomp_builtin_credential_store_default=
" --file= --no-file"
__gitcomp_builtin_describe_default=
" --contains --debug --all --tags --long --first-parent --abbrev --exact-match --candidates= --match= --exclude= --always --dirty --broken --no-contains -- --no-debug --no-all --no-tags --no-long --no-first-parent --no-abbrev --no-exact-match --no-candidates --no-match --no-exclude --no-always --no-dirty --no-broken"
__gitcomp_builtin_difftool_default=
" --gui --dir-diff --no-prompt --symlinks --tool= --tool-help --trust-exit-code --extcmd= --no-index -- --no-gui --no-dir-diff --no-symlinks --no-tool --no-tool-help --no-trust-exit-code --no-extcmd"
__gitcomp_builtin_env__helper_default=
" --type= --default= --exit-code --no-default -- --no-exit-code"
__gitcomp_builtin_fast_export_default=
" --progress= --signed-tags= --tag-of-filtered-object= --reencode= --export-marks= --import-marks= --import-marks-if-exists= --fake-missing-tagger --full-tree --use-done-feature --no-data --refspec= --anonymize --anonymize-map= --reference-excluded-parents --show-original-ids --mark-tags --data -- --no-progress --no-signed-tags --no-tag-of-filtered-object --no-reencode --no-export-marks --no-import-marks --no-import-marks-if-exists --no-fake-missing-tagger --no-full-tree --no-use-done-feature --no-refspec --no-anonymize --no-reference-excluded-parents --no-show-original-ids --no-mark-tags"
__gitcomp_builtin_fetch_default=
" --verbose --quiet --all --set-upstream --append --upload-pack= --force --multiple --tags --jobs= --prune --prune-tags --recurse-submodules --dry-run --write-fetch-head --keep --update-head-ok --progress --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --filter= --auto-maintenance --auto-gc --show-forced-updates --write-commit-graph --stdin --no-verbose -- --no-quiet --no-all --no-set-upstream --no-append --no-upload-pack --no-force --no-multiple --no-tags --no-jobs --no-prune --no-prune-tags --no-recurse-submodules --no-dry-run --no-write-fetch-head --no-keep --no-update-head-ok --no-progress --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-filter --no-auto-maintenance --no-auto-gc --no-show-forced-updates --no-write-commit-graph --no-stdin"
__gitcomp_builtin_fmt_merge_msg_default=
" --log --message= --file= --no-log -- --no-message --no-file"
__gitcomp_builtin_for_each_ref_default=
" --shell --perl --python --tcl --count= --format= --color --sort= --points-at= --merged --no-merged --contains --no-contains --ignore-case -- --no-shell --no-perl --no-python --no-tcl --no-count --no-format --no-color --no-points-at --no-ignore-case"
__gitcomp_builtin_format_patch_default=
" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor"
__gitcomp_builtin_fsck_default=
" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects"
__gitcomp_builtin_fsck_objects_default=
" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects"
__gitcomp_builtin_gc_default=
" --quiet --prune --aggressive --keep-largest-pack --no-quiet -- --no-prune --no-aggressive --no-keep-largest-pack"
__gitcomp_builtin_grep_default=
" --cached --no-index --untracked --exclude-standard --recurse-submodules --invert-match --ignore-case --word-regexp --text --textconv --recursive --max-depth= --extended-regexp --basic-regexp --fixed-strings --perl-regexp --line-number --column --full-name --files-with-matches --name-only --files-without-match --only-matching --count --color --break --heading --context= --before-context= --after-context= --threads= --show-function --function-context --and --or --not --quiet --all-match --index -- --no-cached --no-untracked --no-exclude-standard --no-recurse-submodules --no-invert-match --no-ignore-case --no-word-regexp --no-text --no-textconv --no-recursive --no-extended-regexp --no-basic-regexp --no-fixed-strings --no-perl-regexp --no-line-number --no-column --no-full-name --no-files-with-matches --no-name-only --no-files-without-match --no-only-matching --no-count --no-color --no-break --no-heading --no-context --no-before-context --no-after-context --no-threads --no-show-function --no-function-context --no-or --no-quiet --no-all-match"
__gitcomp_builtin_hash_object_default=
" --stdin --stdin-paths --no-filters --literally --path= --filters -- --no-stdin --no-stdin-paths --no-literally --no-path"
__gitcomp_builtin_help_default=
" --all --guides --config --man --web --info --verbose --no-all -- --no-guides --no-config --no-man --no-web --no-info --no-verbose"
__gitcomp_builtin_init_default=
" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format"
__gitcomp_builtin_init_db_default=
" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format"
__gitcomp_builtin_interpret_trailers_default=
" --in-place --trim-empty --where= --if-exists= --if-missing= --only-trailers --only-input --unfold --parse --no-divider --trailer= --divider -- --no-in-place --no-trim-empty --no-where --no-if-exists --no-if-missing --no-only-trailers --no-only-input --no-unfold --no-trailer"
__gitcomp_builtin_log_default=
" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
__gitcomp_builtin_ls_files_default=
" --cached --deleted --modified --others --ignored --stage --killed --directory --eol --empty-directory --unmerged --resolve-undo --exclude= --exclude-from= --exclude-per-directory= --exclude-standard --full-name --recurse-submodules --error-unmatch --with-tree= --abbrev --debug --no-cached -- --no-deleted --no-modified --no-others --no-ignored --no-stage --no-killed --no-directory --no-eol --no-empty-directory --no-unmerged --no-resolve-undo --no-exclude-per-directory --no-recurse-submodules --no-error-unmatch --no-with-tree --no-abbrev --no-debug"
__gitcomp_builtin_ls_remote_default=
" --quiet --upload-pack= --tags --heads --refs --get-url --sort= --symref --server-option= --no-quiet -- --no-upload-pack --no-tags --no-heads --no-refs --no-get-url --no-symref --no-server-option"
__gitcomp_builtin_ls_tree_default=
" --long --name-only --name-status --full-name --full-tree --abbrev --no-long -- --no-name-only --no-name-status --no-full-name --no-full-tree --no-abbrev"
__gitcomp_builtin_merge_default=
" --stat --summary --log --squash --commit --edit --cleanup= --ff --ff-only --rerere-autoupdate --verify-signatures --strategy= --strategy-option= --message= --file --verbose --quiet --abort --quit --continue --allow-unrelated-histories --progress --gpg-sign --autostash --overwrite-ignore --signoff --no-verify --verify -- --no-stat --no-summary --no-log --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-rerere-autoupdate --no-verify-signatures --no-strategy --no-strategy-option --no-message --no-verbose --no-quiet --no-abort --no-quit --no-continue --no-allow-unrelated-histories --no-progress --no-gpg-sign --no-autostash --no-overwrite-ignore --no-signoff"
__gitcomp_builtin_merge_base_default=
" --all --octopus --independent --is-ancestor --fork-point --no-all"
__gitcomp_builtin_merge_file_default=
" --stdout --diff3 --ours --theirs --union --marker-size= --quiet --no-stdout -- --no-diff3 --no-ours --no-theirs --no-union --no-marker-size --no-quiet"
__gitcomp_builtin_mktree_default=
" --missing --batch --no-missing -- --no-batch"
__gitcomp_builtin_multi_pack_index_default=
" --object-dir= --progress --batch-size= --no-object-dir -- --no-progress"
__gitcomp_builtin_mv_default=
" --verbose --dry-run --no-verbose -- --no-dry-run"
__gitcomp_builtin_name_rev_default=
" --name-only --tags --refs= --exclude= --all --stdin --undefined --always --no-name-only -- --no-tags --no-refs --no-exclude --no-all --no-stdin --no-undefined --no-always"
__gitcomp_builtin_notes_default=
" --ref= --no-ref"
__gitcomp_builtin_pack_objects_default=
" --quiet --progress --all-progress --all-progress-implied --index-version= --max-pack-size= --local --incremental --window= --window-memory= --depth= --reuse-delta --reuse-object --delta-base-offset --threads= --non-empty --revs --unpacked --all --reflog --indexed-objects --stdout --include-tag --keep-unreachable --pack-loose-unreachable --unpack-unreachable --sparse --thin --shallow --honor-pack-keep --keep-pack= --compression= --keep-true-parents --use-bitmap-index --write-bitmap-index --filter= --missing= --exclude-promisor-objects --delta-islands --uri-protocol= --no-quiet -- --no-progress --no-all-progress --no-all-progress-implied --no-local --no-incremental --no-window --no-depth --no-reuse-delta --no-reuse-object --no-delta-base-offset --no-threads --no-non-empty --no-revs --no-stdout --no-include-tag --no-keep-unreachable --no-pack-loose-unreachable --no-unpack-unreachable --no-sparse --no-thin --no-shallow --no-honor-pack-keep --no-keep-pack --no-compression --no-keep-true-parents --no-use-bitmap-index --no-write-bitmap-index --no-filter --no-exclude-promisor-objects --no-delta-islands --no-uri-protocol"
__gitcomp_builtin_pack_refs_default=
" --all --prune --no-all -- --no-prune"
__gitcomp_builtin_pickaxe_default=
" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev"
__gitcomp_builtin_prune_default=
" --dry-run --verbose --progress --expire= --exclude-promisor-objects --no-dry-run -- --no-verbose --no-progress --no-expire --no-exclude-promisor-objects"
__gitcomp_builtin_prune_packed_default=
" --dry-run --quiet --no-dry-run -- --no-quiet"
__gitcomp_builtin_pull_default=
" --verbose --quiet --progress --recurse-submodules --rebase --stat --log --signoff --squash --commit --edit --cleanup= --ff --ff-only --verify-signatures --autostash --strategy= --strategy-option= --gpg-sign --allow-unrelated-histories --all --append --upload-pack= --force --tags --prune --jobs --dry-run --keep --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --show-forced-updates --set-upstream --no-verbose -- --no-quiet --no-progress --no-recurse-submodules --no-rebase --no-stat --no-log --no-signoff --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-verify-signatures --no-autostash --no-strategy --no-strategy-option --no-gpg-sign --no-allow-unrelated-histories --no-all --no-append --no-upload-pack --no-force --no-tags --no-prune --no-jobs --no-dry-run --no-keep --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-show-forced-updates --no-set-upstream"
__gitcomp_builtin_push_default=
" --verbose --quiet --repo= --all --mirror --delete --tags --dry-run --porcelain --force --force-with-lease --recurse-submodules= --receive-pack= --exec= --set-upstream --progress --prune --no-verify --follow-tags --signed --atomic --push-option= --ipv4 --ipv6 --verify -- --no-verbose --no-quiet --no-repo --no-all --no-mirror --no-delete --no-tags --no-dry-run --no-porcelain --no-force --no-force-with-lease --no-recurse-submodules --no-receive-pack --no-exec --no-set-upstream --no-progress --no-prune --no-follow-tags --no-signed --no-atomic --no-push-option --no-ipv4 --no-ipv6"
__gitcomp_builtin_range_diff_default=
" --creation-factor= --no-dual-color --notes --patch --no-patch --unified --function-context --raw --patch-with-raw --patch-with-stat --numstat --shortstat --dirstat --cumulative --dirstat-by-file --check --summary --name-only --name-status --stat --stat-width= --stat-name-width= --stat-graph-width= --stat-count= --compact-summary --binary --full-index --color --ws-error-highlight= --abbrev --src-prefix= --dst-prefix= --line-prefix= --no-prefix --inter-hunk-context= --output-indicator-new= --output-indicator-old= --output-indicator-context= --break-rewrites --find-renames --irreversible-delete --find-copies --find-copies-harder --no-renames --rename-empty --follow --minimal --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-cr-at-eol --ignore-blank-lines --indent-heuristic --patience --histogram --diff-algorithm= --anchored= --word-diff --word-diff-regex= --color-words --color-moved --color-moved-ws= --relative --text --exit-code --quiet --ext-diff --textconv --ignore-submodules --submodule --ita-invisible-in-index --ita-visible-in-index --pickaxe-all --pickaxe-regex --find-object= --diff-filter= --output= --dual-color -- --no-creation-factor --no-notes --no-function-context --no-compact-summary --no-full-index --no-color --no-abbrev --no-find-copies-harder --no-rename-empty --no-follow --no-minimal --no-indent-heuristic --no-color-moved --no-color-moved-ws --no-relative --no-text --no-exit-code --no-quiet --no-ext-diff --no-textconv"
__gitcomp_builtin_read_tree_default=
" --index-output= --empty --verbose --trivial --aggressive --reset --prefix= --exclude-per-directory= --dry-run --no-sparse-checkout --debug-unpack --recurse-submodules --quiet --sparse-checkout -- --no-empty --no-verbose --no-trivial --no-aggressive --no-reset --no-dry-run --no-debug-unpack --no-recurse-submodules --no-quiet"
__gitcomp_builtin_rebase_default=
" --onto= --keep-base --no-verify --quiet --verbose --no-stat --signoff --committer-date-is-author-date --reset-author-date --ignore-whitespace --whitespace= --force-rebase --no-ff --continue --skip --abort --quit --edit-todo --show-current-patch --apply --merge --interactive --rerere-autoupdate --empty= --autosquash --gpg-sign --autostash --exec= --rebase-merges --fork-point --strategy= --strategy-option= --root --reschedule-failed-exec --reapply-cherry-picks --verify --stat --ff -- --no-onto --no-keep-base --no-quiet --no-verbose --no-signoff --no-committer-date-is-author-date --no-reset-author-date --no-ignore-whitespace --no-whitespace --no-force-rebase --no-rerere-autoupdate --no-autosquash --no-gpg-sign --no-autostash --no-exec --no-rebase-merges --no-fork-point --no-strategy --no-strategy-option --no-root --no-reschedule-failed-exec --no-reapply-cherry-picks"
__gitcomp_builtin_rebase__interactive_default=
" --ff --rebase-merges --rebase-cousins --autosquash --signoff --verbose --continue --skip --edit-todo --show-current-patch --shorten-ids --expand-ids --check-todo-list --rearrange-squash --add-exec-commands --onto= --restrict-revision= --squash-onto= --upstream= --head-name= --gpg-sign --strategy= --strategy-opts= --switch-to= --onto-name= --cmd= --rerere-autoupdate --reschedule-failed-exec --no-ff -- --no-rebase-merges --no-rebase-cousins --no-autosquash --no-signoff --no-verbose --no-head-name --no-gpg-sign --no-strategy --no-strategy-opts --no-switch-to --no-onto-name --no-cmd --no-rerere-autoupdate --no-reschedule-failed-exec"
__gitcomp_builtin_receive_pack_default=
" --quiet --no-quiet"
__gitcomp_builtin_reflog_default=
" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
__gitcomp_builtin_remote_default=
" --verbose --no-verbose"
__gitcomp_builtin_repack_default=
" --quiet --local --write-bitmap-index --delta-islands --unpack-unreachable= --keep-unreachable --window= --window-memory= --depth= --threads= --max-pack-size= --pack-kept-objects --keep-pack= --no-quiet -- --no-local --no-write-bitmap-index --no-delta-islands --no-unpack-unreachable --no-keep-unreachable --no-window --no-window-memory --no-depth --no-threads --no-max-pack-size --no-pack-kept-objects --no-keep-pack"
__gitcomp_builtin_replace_default=
" --list --delete --edit --graft --convert-graft-file --raw --format= --no-raw -- --no-format"
__gitcomp_builtin_rerere_default=
" --rerere-autoupdate --no-rerere-autoupdate"
__gitcomp_builtin_reset_default=
" --quiet --mixed --soft --hard --merge --keep --recurse-submodules --patch --intent-to-add --pathspec-from-file= --pathspec-file-nul --no-quiet -- --no-mixed --no-soft --no-hard --no-merge --no-keep --no-recurse-submodules --no-patch --no-intent-to-add --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_restore_default=
" --source= --staged --worktree --ignore-unmerged --overlay --quiet --recurse-submodules --progress --merge --conflict= --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-source -- --no-staged --no-worktree --no-ignore-unmerged --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_revert_default=
" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign"
__gitcomp_builtin_rm_default=
" --dry-run --quiet --cached --ignore-unmatch --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-quiet --no-cached --no-ignore-unmatch --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_send_pack_default=
" --verbose --quiet --receive-pack= --exec= --remote= --all --dry-run --mirror --force --signed --push-option= --progress --thin --atomic --stateless-rpc --stdin --helper-status --force-with-lease --no-verbose -- --no-quiet --no-receive-pack --no-exec --no-remote --no-all --no-dry-run --no-mirror --no-force --no-signed --no-push-option --no-progress --no-thin --no-atomic --no-stateless-rpc --no-stdin --no-helper-status --no-force-with-lease"
__gitcomp_builtin_shortlog_default=
" --committer --numbered --summary --email --group= --no-committer -- --no-numbered --no-summary --no-email --no-group"
__gitcomp_builtin_show_default=
" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
__gitcomp_builtin_show_branch_default=
" --all --remotes --color --more --list --no-name --current --sha1-name --merge-base --independent --topo-order --topics --sparse --date-order --reflog --name -- --no-all --no-remotes --no-color --no-more --no-list --no-current --no-sha1-name --no-merge-base --no-independent --no-topo-order --no-topics --no-sparse --no-date-order"
__gitcomp_builtin_show_index_default=
" --object-format= --no-object-format"
__gitcomp_builtin_show_ref_default=
" --tags --heads --verify --head --dereference --hash --abbrev --quiet --exclude-existing --no-tags -- --no-heads --no-verify --no-head --no-dereference --no-hash --no-abbrev --no-quiet"
__gitcomp_builtin_sparse_checkout_default=
""
__gitcomp_builtin_stage_default=
" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-chmod --no-pathspec-from-file --no-pathspec-file-nul"
__gitcomp_builtin_stash_default=
""
__gitcomp_builtin_status_default=
" --verbose --short --branch --show-stash --ahead-behind --porcelain --long --null --untracked-files --ignored --ignore-submodules --column --no-renames --find-renames --renames -- --no-verbose --no-short --no-branch --no-show-stash --no-ahead-behind --no-porcelain --no-long --no-null --no-untracked-files --no-ignored --no-ignore-submodules --no-column"
__gitcomp_builtin_stripspace_default=
" --strip-comments --comment-lines"
__gitcomp_builtin_switch_default=
" --create= --force-create= --guess --discard-changes --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --no-create -- --no-force-create --no-guess --no-discard-changes --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees"
__gitcomp_builtin_symbolic_ref_default=
" --quiet --delete --short --no-quiet -- --no-delete --no-short"
__gitcomp_builtin_tag_default=
" --list --delete --verify --annotate --message= --file= --edit --sign --cleanup= --local-user= --force --create-reflog --column --contains --no-contains --merged --no-merged --sort= --points-at --format= --color --ignore-case -- --no-annotate --no-file --no-edit --no-sign --no-cleanup --no-local-user --no-force --no-create-reflog --no-column --no-points-at --no-format --no-color --no-ignore-case"
__gitcomp_builtin_update_index_default=
" --ignore-submodules --add --replace --remove --unmerged --refresh --really-refresh --cacheinfo --chmod= --assume-unchanged --no-assume-unchanged --skip-worktree --no-skip-worktree --ignore-skip-worktree-entries --info-only --force-remove --stdin --index-info --unresolve --again --ignore-missing --verbose --clear-resolve-undo --index-version= --split-index --untracked-cache --test-untracked-cache --force-untracked-cache --force-write-index --fsmonitor --fsmonitor-valid --no-fsmonitor-valid -- --no-ignore-submodules --no-add --no-replace --no-remove --no-unmerged --no-ignore-skip-worktree-entries --no-info-only --no-force-remove --no-ignore-missing --no-verbose --no-index-version --no-split-index --no-untracked-cache --no-test-untracked-cache --no-force-untracked-cache --no-force-write-index --no-fsmonitor"
__gitcomp_builtin_update_ref_default=
" --no-deref --stdin --create-reflog --deref -- --no-stdin --no-create-reflog"
__gitcomp_builtin_update_server_info_default=
" --force --no-force"
__gitcomp_builtin_upload_pack_default=
" --stateless-rpc --advertise-refs --strict --timeout= --no-stateless-rpc -- --no-advertise-refs --no-strict --no-timeout"
__gitcomp_builtin_verify_commit_default=
" --verbose --raw --no-verbose -- --no-raw"
__gitcomp_builtin_verify_pack_default=
" --verbose --stat-only --object-format= --no-verbose -- --no-stat-only --no-object-format"
__gitcomp_builtin_verify_tag_default=
" --verbose --raw --format= --no-verbose -- --no-raw --no-format"
__gitcomp_builtin_version_default=
" --build-options --no-build-options"
__gitcomp_builtin_whatchanged_default=
" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
__gitcomp_builtin_write_tree_default=
" --missing-ok --prefix= --no-missing-ok -- --no-prefix"
__gitcomp_builtin_send_email_default=
" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor"
__gitcomp_builtin_get_default ()
{
eval
"test -n
\"\$
${
1
}
_default
\"
&& echo
\"\$
${
1
}
_default
\"
"
}
# 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
local completion_helper
if [ "
$GIT_COMPLETION_SHOW_ALL
" = "
1
" ]; then
completion_helper="
--git-completion-helper-all
"
else
completion_helper="
--git-completion-helper
"
fi
completion="
$(
__git
${
cmd
/_/
}
$completion_helper
||
__gitcomp_builtin_get_default
$var
)
" || return
# leading and trailing spaces are significant to make
# option removal work correctly.
options="
$incl
$completion
"
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
# Variation of __gitcomp_nl () that appends to the existing list of
# completion candidates, COMPREPLY.
# completion candidates, COMPREPLY.
__gitcomp_nl_append ()
__gitcomp_nl_append ()
...
@@ -303,6 +568,24 @@ __gitcomp_nl ()
...
@@ -303,6 +568,24 @@ __gitcomp_nl ()
__gitcomp_nl_append "
$@
"
__gitcomp_nl_append "
$@
"
}
}
# Fills the COMPREPLY array with prefiltered paths without any additional
# processing.
# Callers must take care of providing only paths that match the current path
# to be completed and adding any prefix path components, if necessary.
# 1: List of newline-separated matching paths, complete with all prefix
# path components.
__gitcomp_file_direct ()
{
local IFS=
$'
\n
'
COMPREPLY=(
$1
)
# use a hack to enable file mode in bash < 4
compopt -o filenames +o nospace 2>/dev/null ||
compgen -f /non-existing-dir/ >/dev/null ||
true
}
# Generates completion reply with compgen from newline-separated possible
# Generates completion reply with compgen from newline-separated possible
# completion filenames.
# completion filenames.
# It accepts 1 to 3 arguments:
# It accepts 1 to 3 arguments:
...
@@ -322,7 +605,8 @@ __gitcomp_file ()
...
@@ -322,7 +605,8 @@ __gitcomp_file ()
# use a hack to enable file mode in bash < 4
# use a hack to enable file mode in bash < 4
compopt -o filenames +o nospace 2>/dev/null ||
compopt -o filenames +o nospace 2>/dev/null ||
compgen
-f
/non-existing-dir/
>
/dev/null
compgen -f /non-existing-dir/ >/dev/null ||
true
}
}
# Execute 'git ls-files', unless the --committable option is specified, in
# Execute 'git ls-files', unless the --committable option is specified, in
...
@@ -332,10 +616,12 @@ __gitcomp_file ()
...
@@ -332,10 +616,12 @@ __gitcomp_file ()
__git_ls_files_helper ()
__git_ls_files_helper ()
{
{
if [ "
$2
" == "
--committable
" ]; then
if [ "
$2
" == "
--committable
" ]; then
__git
-C
"
$1
"
diff-index
--name-only
--relative
HEAD
__git -C "
$1
" -c core.quotePath=false diff-index
\
--name-only --relative HEAD -- "
${
3
//\\/\\\\
}*
"
else
else
# NOTE:
$2
is not quoted in order to support multiple options
# NOTE:
$2
is not quoted in order to support multiple options
__git
-C
"
$1
"
ls-files
--exclude-standard
$2
__git -C "
$1
" -c core.quotePath=false ls-files
\
--exclude-standard
$2
-- "
${
3
//\\/\\\\
}*
"
fi
fi
}
}
...
@@ -346,17 +632,103 @@ __git_ls_files_helper ()
...
@@ -346,17 +632,103 @@ __git_ls_files_helper ()
# If provided, only files within the specified directory are listed.
# If provided, only files within the specified directory are listed.
# Sub directories are never recursed. Path must have a trailing
# Sub directories are never recursed. Path must have a trailing
# slash.
# slash.
# 3: List only paths matching this path component (optional).
__git_index_files ()
__git_index_files ()
{
{
local
root
=
"
${
2
-.
}
"
file
local root="
$2
" match="
$3
"
__git_ls_files_helper "
$root
" "
$1
" "
${
match
:-
?
}
" |
awk -F / -v pfx="
${
2
//\\/\\\\
}
" '{
paths[
$1
] = 1
}
END {
for (p in paths) {
if (substr(p, 1, 1) != "
\"
") {
# No special characters, easy!
print pfx p
continue
}
# The path is quoted.
p = dequote(p)
if (p == "")
continue
# Even when a directory name itself does not contain
# any special characters, it will still be quoted if
# any of its (stripped) trailing path components do.
# Because of this we may have seen the same directory
# both quoted and unquoted.
if (p in paths)
# We have seen the same directory unquoted,
# skip it.
continue
else
print pfx p
}
}
function dequote(p, bs_idx, out, esc, esc_idx, dec) {
# Skip opening double quote.
p = substr(p, 2)
# Interpret backslash escape sequences.
while ((bs_idx = index(p, "
\\
")) != 0) {
out = out substr(p, 1, bs_idx - 1)
esc = substr(p, bs_idx + 1, 1)
p = substr(p, bs_idx + 2)
if ((esc_idx = index("
abtvfr
\"\\
", esc)) != 0) {
# C-style one-character escape sequence.
out = out substr("
\a\b\t\v\f\r\"\\
",
esc_idx, 1)
} else if (esc == "
n
") {
# Uh-oh, a newline character.
# We cannot reliably put a pathname
# containing a newline into COMPREPLY,
# and the newline would create a mess.
# Skip this path.
return ""
} else {
# Must be a
\n
nn octal value, then.
dec = esc * 64 +
\
substr(p, 1, 1) * 8 +
\
substr(p, 2, 1)
out = out sprintf("
%c
", dec)
p = substr(p, 3)
}
}
# Drop closing double quote, if there is one.
# (There is not any if this is a directory, as it was
# already stripped with the trailing path components.)
if (substr(p, length(p), 1) == "
\"
")
out = out substr(p, 1, length(p) - 1)
else
out = out p
return out
}'
}
# __git_complete_index_file requires 1 argument:
# 1: the options to pass to ls-file
#
# The exception is --committable, which finds the files appropriate commit.
__git_complete_index_file ()
{
local dequoted_word pfx="" cur_
__git_ls_files_helper
"
$root
"
"
$1
"
|
__git_dequote "
$cur
"
while
read
-r
file
;
do
case
"
$file
"
in
case "
$dequoted_word
" in
?
*
/
*
)
echo
"
${
file
%%/*
}
"
;;
?*/*)
*
)
echo
"
$file
"
;;
pfx="
${
dequoted_word
%/*
}
/
"
cur_="
${
dequoted_word
##*/
}
"
;;
*)
cur_="
$dequoted_word
"
esac
esac
done
|
sort
|
uniq
__gitcomp_file_direct "
$(
__git_index_files
"
$1
"
"
$pfx
"
"
$cur_
"
)
"
}
}
# Lists branches from the local repository.
# Lists branches from the local repository.
...
@@ -372,6 +744,19 @@ __git_heads ()
...
@@ -372,6 +744,19 @@ __git_heads ()
"
refs/heads/
$cur_
*
" "
refs/heads/
$cur_
*
/
**
"
"
refs/heads/
$cur_
*
" "
refs/heads/
$cur_
*
/
**
"
}
}
# Lists branches from remote repositories.
# 1: A prefix to be added to each listed branch (optional).
# 2: List only branches matching this word (optional; list all branches if
# unset or empty).
# 3: A suffix to be appended to each listed branch (optional).
__git_remote_heads ()
{
local pfx="
${
1
-
}
" cur_="
${
2
-
}
" sfx="
${
3
-
}
"
__git for-each-ref --format="
${
pfx
//\%/%%
}
%
(
refname:strip
=
2
)
$sfx
"
\
"
refs/remotes/
$cur_
*
" "
refs/remotes/
$cur_
*
/
**
"
}
# Lists tags from the local repository.
# Lists tags from the local repository.
# Accepts the same positional parameters as __git_heads() above.
# Accepts the same positional parameters as __git_heads() above.
__git_tags ()
__git_tags ()
...
@@ -382,6 +767,26 @@ __git_tags ()
...
@@ -382,6 +767,26 @@ __git_tags ()
"
refs/tags/
$cur_
*
" "
refs/tags/
$cur_
*
/
**
"
"
refs/tags/
$cur_
*
" "
refs/tags/
$cur_
*
/
**
"
}
}
# List unique branches from refs/remotes used for 'git checkout' and 'git
# switch' tracking DWIMery.
# 1: A prefix to be added to each listed branch (optional)
# 2: List only branches matching this word (optional; list all branches if
# unset or empty).
# 3: A suffix to be appended to each listed branch (optional).
__git_dwim_remote_heads ()
{
local pfx="
${
1
-
}
" cur_="
${
2
-
}
" sfx="
${
3
-
}
"
local fer_pfx="
${
pfx
//\%/%%
}
" # "
escape
" for-each-ref format specifiers
# employ the heuristic used by git checkout and git switch
# Try to find a remote branch that cur_es the completion word
# but only output if the branch name is unique
__git for-each-ref --format="
$fer_pfx
%
(
refname:strip
=
3
)
$sfx
"
\
--sort="
refname:strip
=
3
"
\
"
refs/remotes/
*
/
$cur_
*
" "
refs/remotes/
*
/
$cur_
*
/
**
" |
\
uniq -u
}
# Lists refs from the local (by default) or from a remote repository.
# Lists refs from the local (by default) or from a remote repository.
# It accepts 0, 1 or 2 arguments:
# It accepts 0, 1 or 2 arguments:
# 1: The remote to list refs from (optional; ignored, if set but empty).
# 1: The remote to list refs from (optional; ignored, if set but empty).
...
@@ -439,7 +844,7 @@ __git_refs ()
...
@@ -439,7 +844,7 @@ __git_refs ()
track=""
track=""
;;
;;
*)
*)
for
i
in
HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD
;
do
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD
REBASE_HEAD
; do
case "
$i
" in
case "
$i
" in
$match
*)
$match
*)
if [ -e "
$dir
/
$i
" ]; then
if [ -e "
$dir
/
$i
" ]; then
...
@@ -457,13 +862,7 @@ __git_refs ()
...
@@ -457,13 +862,7 @@ __git_refs ()
__git_dir="
$dir
" __git for-each-ref --format="
$fer_pfx
%
(
$format
)
$sfx
"
\
__git_dir="
$dir
" __git for-each-ref --format="
$fer_pfx
%
(
$format
)
$sfx
"
\
"
${
refs
[@]
}
"
"
${
refs
[@]
}
"
if [ -n "
$track
" ]; then
if [ -n "
$track
" ]; then
# employ the heuristic used by git checkout
__git_dwim_remote_heads "
$pfx
" "
$match
" "
$sfx
"
# Try to find a remote branch that matches the completion word
# but only output if the branch name is unique
__git
for
-each-ref
--format
=
"
$fer_pfx
%(refname:strip=3)
$sfx
"
\
--sort
=
"refname:strip=3"
\
"refs/remotes/*/
$match
*"
"refs/remotes/*/
$match
*/**"
|
\
uniq
-u
fi
fi
return
return
fi
fi
...
@@ -510,29 +909,51 @@ __git_refs ()
...
@@ -510,29 +909,51 @@ __git_refs ()
# Usage: __git_complete_refs [<option>]...
# Usage: __git_complete_refs [<option>]...
# --remote=<remote>: The remote to list refs from, can be the name of a
# --remote=<remote>: The remote to list refs from, can be the name of a
# configured remote, a path, or a URL.
# configured remote, a path, or a URL.
# --
track
: List unique remote branches for 'git
checkout
's tracking DWIMery.
# --
dwim
: List unique remote branches for 'git
switch
's tracking DWIMery.
# --pfx=<prefix>: A prefix to be added to each ref.
# --pfx=<prefix>: A prefix to be added to each ref.
# --cur=<word>: The current ref to be completed. Defaults to the current
# --cur=<word>: The current ref to be completed. Defaults to the current
# word to be completed.
# word to be completed.
# --sfx=<suffix>: A suffix to be appended to each ref instead of the default
# --sfx=<suffix>: A suffix to be appended to each ref instead of the default
# space.
# space.
# --mode=<mode>: What set of refs to complete, one of 'refs' (the default) to
# complete all refs, 'heads' to complete only branches, or
# 'remote-heads' to complete only remote branches. Note that
# --remote is only compatible with --mode=refs.
__git_complete_refs ()
__git_complete_refs ()
{
{
local
remote
track
pfx
cur_
=
"
$cur
"
sfx
=
" "
local remote
= dwim=
pfx
=
cur_="
$cur
" sfx="
"
mode="
refs
"
while test
$#
!= 0; do
while test
$#
!= 0; do
case "
$1
" in
case "
$1
" in
--remote=*) remote="
${
1
##--remote=
}
" ;;
--remote=*) remote="
${
1
##--remote=
}
" ;;
--track
)
track
=
"yes"
;;
--dwim) dwim="
yes
" ;;
# --track is an old spelling of --dwim
--track) dwim="
yes
" ;;
--pfx=*) pfx="
${
1
##--pfx=
}
" ;;
--pfx=*) pfx="
${
1
##--pfx=
}
" ;;
--cur=*) cur_="
${
1
##--cur=
}
" ;;
--cur=*) cur_="
${
1
##--cur=
}
" ;;
--sfx=*) sfx="
${
1
##--sfx=
}
" ;;
--sfx=*) sfx="
${
1
##--sfx=
}
" ;;
--mode=*) mode="
${
1
##--mode=
}
" ;;
*) return 1 ;;
*) return 1 ;;
esac
esac
shift
shift
done
done
__gitcomp_direct
"
$(
__git_refs
"
$remote
"
"
$track
"
"
$pfx
"
"
$cur_
"
"
$sfx
"
)
"
# complete references based on the specified mode
case "
$mode
" in
refs)
__gitcomp_direct "
$(
__git_refs
"
$remote
"
""
"
$pfx
"
"
$cur_
"
"
$sfx
"
)
" ;;
heads)
__gitcomp_direct "
$(
__git_heads
"
$pfx
"
"
$cur_
"
"
$sfx
"
)
" ;;
remote-heads)
__gitcomp_direct "
$(
__git_remote_heads
"
$pfx
"
"
$cur_
"
"
$sfx
"
)
" ;;
*)
return 1 ;;
esac
# Append DWIM remote branch names if requested
if [ "
$dwim
" = "
yes
" ]; then
__gitcomp_direct_append "
$(
__git_dwim_remote_heads
"
$pfx
"
"
$cur_
"
"
$sfx
"
)
"
fi
}
}
# __git_refs2 requires 1 argument (to pass to __git_refs)
# __git_refs2 requires 1 argument (to pass to __git_refs)
...
@@ -594,7 +1015,7 @@ __git_is_configured_remote ()
...
@@ -594,7 +1015,7 @@ __git_is_configured_remote ()
__git_list_merge_strategies ()
__git_list_merge_strategies ()
{
{
git merge
-s
help
2>&1 |
LANG=C LC_ALL=C
git merge -s help 2>&1 |
sed -n -e '/[Aa]vailable strategies are: /,/^
$/
{
sed -n -e '/[Aa]vailable strategies are: /,/^
$/
{
s/
\.
$/
/
s/
\.
$/
/
s/.*://
s/.*://
...
@@ -604,6 +1025,7 @@ __git_list_merge_strategies ()
...
@@ -604,6 +1025,7 @@ __git_list_merge_strategies ()
}'
}'
}
}
__git_merge_strategies_default='octopus ours recursive resolve subtree'
__git_merge_strategies=
__git_merge_strategies=
# 'git merge -s help' (and thus detection of the merge strategy
# 'git merge -s help' (and thus detection of the merge strategy
# list) fails, unfortunately, if run outside of any git working
# list) fails, unfortunately, if run outside of any git working
...
@@ -613,12 +1035,18 @@ __git_merge_strategies=
...
@@ -613,12 +1035,18 @@ __git_merge_strategies=
__git_compute_merge_strategies ()
__git_compute_merge_strategies ()
{
{
test -n "
$__git_merge_strategies
" ||
test -n "
$__git_merge_strategies
" ||
__git_merge_strategies
=
$(
__git_list_merge_strategies
)
{ __git_merge_strategies=
$(
__git_list_merge_strategies
)
;
__git_merge_strategies="
${
__git_merge_strategies
:-
__git_merge_strategies_default
}
"; }
}
}
__git_merge_strategy_options="
ours theirs subtree
subtree
=
patience
histogram diff-algorithm
=
ignore-space-change ignore-all-space
ignore-space-at-eol renormalize no-renormalize no-renames
find-renames find-renames
=
rename-threshold
=
"
__git_complete_revlist_file ()
__git_complete_revlist_file ()
{
{
local
pfx
ls
ref
cur_
=
"
$cur
"
local
dequoted_word
pfx ls ref cur_="
$cur
"
case "
$cur_
" in
case "
$cur_
" in
*..?*:*)
*..?*:*)
return
return
...
@@ -626,14 +1054,18 @@ __git_complete_revlist_file ()
...
@@ -626,14 +1054,18 @@ __git_complete_revlist_file ()
?*:*)
?*:*)
ref="
${
cur_
%%
:
*
}
"
ref="
${
cur_
%%
:
*
}
"
cur_="
${
cur_
#*
:
}
"
cur_="
${
cur_
#*
:
}
"
case
"
$cur_
"
in
__git_dequote "
$cur_
"
case "
$dequoted_word
" in
?*/*)
?*/*)
pfx
=
"
${
cur_
%/*
}
"
pfx="
${
dequoted_word
%/*
}
"
cur_
=
"
${
cur_
##*/
}
"
cur_="
${
dequoted_word
##*/
}
"
ls="
$ref
:
$pfx
"
ls="
$ref
:
$pfx
"
pfx="
$pfx
/
"
pfx="
$pfx
/
"
;;
;;
*)
*)
cur_="
$dequoted_word
"
ls="
$ref
"
ls="
$ref
"
;;
;;
esac
esac
...
@@ -643,21 +1075,10 @@ __git_complete_revlist_file ()
...
@@ -643,21 +1075,10 @@ __git_complete_revlist_file ()
*) pfx="
$ref
:
$pfx
" ;;
*) pfx="
$ref
:
$pfx
" ;;
esac
esac
__gitcomp_nl
"
$(
__git ls-tree
"
$ls
"
\
__gitcomp_file "
$(
__git ls-tree
"
$ls
"
\
|
sed
'/^100... blob /{
|
sed
's/^.* //
s,^.* ,,
s/$//'
)
"
\
s,$, ,
"
$pfx
" "
$cur_
"
}
/^120000 blob /{
s,^.* ,,
s,$, ,
}
/^040000 tree /{
s,^.* ,,
s,$,/,
}
s/^.* //'
)
"
\
"
$pfx
"
"
$cur_
"
""
;;
;;
*...*)
*...*)
pfx="
${
cur_
%...*
}
...
"
pfx="
${
cur_
%...*
}
...
"
...
@@ -675,26 +1096,6 @@ __git_complete_revlist_file ()
...
@@ -675,26 +1096,6 @@ __git_complete_revlist_file ()
esac
esac
}
}
# __git_complete_index_file requires 1 argument:
# 1: the options to pass to ls-file
#
# The exception is --committable, which finds the files appropriate commit.
__git_complete_index_file
()
{
local
pfx
=
""
cur_
=
"
$cur
"
case
"
$cur_
"
in
?
*
/
*
)
pfx
=
"
${
cur_
%/*
}
"
cur_
=
"
${
cur_
##*/
}
"
pfx
=
"
${
pfx
}
/"
;;
esac
__gitcomp_file
"
$(
__git_index_files
"
$1
"
${
pfx
:+
"
$pfx
"
}
)
"
"
$pfx
"
"
$cur_
"
}
__git_complete_file ()
__git_complete_file ()
{
{
__git_complete_revlist_file
__git_complete_revlist_file
...
@@ -726,6 +1127,7 @@ __git_complete_remote_or_refspec ()
...
@@ -726,6 +1127,7 @@ __git_complete_remote_or_refspec ()
*) ;;
*) ;;
esac
esac
;;
;;
--multiple) no_complete_refspec=1; break ;;
-*) ;;
-*) ;;
*) remote="
$i
"; break ;;
*) remote="
$i
"; break ;;
esac
esac
...
@@ -785,136 +1187,30 @@ __git_complete_strategy ()
...
@@ -785,136 +1187,30 @@ __git_complete_strategy ()
-s|--strategy)
-s|--strategy)
__gitcomp "
$__git_merge_strategies
"
__gitcomp "
$__git_merge_strategies
"
return 0
return 0
;;
-X)
__gitcomp "
$__git_merge_strategy_options
"
return 0
;;
esac
esac
case "
$cur
" in
case "
$cur
" in
--strategy=*)
--strategy=*)
__gitcomp "
$__git_merge_strategies
" "" "
${
cur
##--strategy=
}
"
__gitcomp "
$__git_merge_strategies
" "" "
${
cur
##--strategy=
}
"
return 0
return 0
;;
;;
--strategy-option=*)
__gitcomp "
$__git_merge_strategy_options
" "" "
${
cur
##--strategy-option=
}
"
return 0
;;
esac
esac
return 1
return 1
}
}
__git_commands
()
{
if
test
-n
"
${
GIT_TESTING_COMMAND_COMPLETION
:-}
"
then
printf
"%s"
"
${
GIT_TESTING_COMMAND_COMPLETION
}
"
else
git
help
-a
|egrep
'^ [a-zA-Z0-9]'
fi
}
__git_list_all_commands
()
{
local
i
IFS
=
" "
$'
\n
'
for
i
in
$(
__git_commands
)
do
case
$i
in
*
--
*
)
: helper pattern
;;
*
)
echo
$i
;;
esac
done
}
__git_all_commands=
__git_all_commands=
__git_compute_all_commands ()
__git_compute_all_commands ()
{
{
test -n "
$__git_all_commands
" ||
test -n "
$__git_all_commands
" ||
__git_all_commands
=
$(
__git_list_all_commands
)
__git_all_commands=
$(
__git
--list-cmds
=
main,others,alias,nohelpers
)
}
__git_list_porcelain_commands
()
{
local
i
IFS
=
" "
$'
\n
'
__git_compute_all_commands
for
i
in
$__git_all_commands
do
case
$i
in
*
--
*
)
: helper pattern
;;
applymbox
)
: ask gittus
;;
applypatch
)
: ask gittus
;;
archimport
)
: import
;;
cat-file
)
: plumbing
;;
check-attr
)
: plumbing
;;
check-ignore
)
: plumbing
;;
check-mailmap
)
: plumbing
;;
check-ref-format
)
: plumbing
;;
checkout-index
)
: plumbing
;;
column
)
: internal helper
;;
commit-tree
)
: plumbing
;;
count-objects
)
: infrequent
;;
credential
)
: credentials
;;
credential-
*
)
: credentials helper
;;
cvsexportcommit
)
:
export
;;
cvsimport
)
: import
;;
cvsserver
)
: daemon
;;
daemon
)
: daemon
;;
diff-files
)
: plumbing
;;
diff-index
)
: plumbing
;;
diff-tree
)
: plumbing
;;
fast-import
)
: import
;;
fast-export
)
:
export
;;
fsck-objects
)
: plumbing
;;
fetch-pack
)
: plumbing
;;
fmt-merge-msg
)
: plumbing
;;
for
-each-ref
)
: plumbing
;;
hash-object
)
: plumbing
;;
http-
*
)
: transport
;;
index-pack
)
: plumbing
;;
init-db
)
: deprecated
;;
local-fetch
)
: plumbing
;;
ls-files
)
: plumbing
;;
ls-remote
)
: plumbing
;;
ls-tree
)
: plumbing
;;
mailinfo
)
: plumbing
;;
mailsplit
)
: plumbing
;;
merge-
*
)
: plumbing
;;
mktree
)
: plumbing
;;
mktag
)
: plumbing
;;
pack-objects
)
: plumbing
;;
pack-redundant
)
: plumbing
;;
pack-refs
)
: plumbing
;;
parse-remote
)
: plumbing
;;
patch-id
)
: plumbing
;;
prune
)
: plumbing
;;
prune-packed
)
: plumbing
;;
quiltimport
)
: import
;;
read-tree
)
: plumbing
;;
receive-pack
)
: plumbing
;;
remote-
*
)
: transport
;;
rerere
)
: plumbing
;;
rev-list
)
: plumbing
;;
rev-parse
)
: plumbing
;;
runstatus
)
: plumbing
;;
sh-setup
)
: internal
;;
shell
)
: daemon
;;
show-ref
)
: plumbing
;;
send-pack
)
: plumbing
;;
show-index
)
: plumbing
;;
ssh-
*
)
: transport
;;
stripspace
)
: plumbing
;;
symbolic-ref
)
: plumbing
;;
unpack-file
)
: plumbing
;;
unpack-objects
)
: plumbing
;;
update-index
)
: plumbing
;;
update-ref
)
: plumbing
;;
update-server-info
)
: daemon
;;
upload-archive
)
: plumbing
;;
upload-pack
)
: plumbing
;;
write-tree
)
: plumbing
;;
var
)
: infrequent
;;
verify-pack
)
: infrequent
;;
verify-tag
)
: plumbing
;;
*
)
echo
$i
;;
esac
done
}
__git_porcelain_commands
=
__git_compute_porcelain_commands
()
{
test
-n
"
$__git_porcelain_commands
"
||
__git_porcelain_commands
=
$(
__git_list_porcelain_commands
)
}
}
# Lists all set config variables starting with the given section prefix,
# Lists all set config variables starting with the given section prefix,
...
@@ -932,11 +1228,6 @@ __git_pretty_aliases ()
...
@@ -932,11 +1228,6 @@ __git_pretty_aliases ()
__git_get_config_variables "
pretty
"
__git_get_config_variables "
pretty
"
}
}
__git_aliases
()
{
__git_get_config_variables
"alias"
}
# __git_aliased_command requires 1 argument
# __git_aliased_command requires 1 argument
__git_aliased_command ()
__git_aliased_command ()
{
{
...
@@ -962,15 +1253,32 @@ __git_aliased_command ()
...
@@ -962,15 +1253,32 @@ __git_aliased_command ()
done
done
}
}
# __git_find_on_cmdline requires 1 argument
# Check whether one of the given words is present on the command line,
# and print the first word found.
#
# Usage: __git_find_on_cmdline [<option>]... "
<wordlist>
"
# --show-idx: Optionally show the index of the found word in the
$words
array.
__git_find_on_cmdline ()
__git_find_on_cmdline ()
{
{
local
word subcommand
c
=
1
local word c=1 show_idx
while test
$#
-gt 1; do
case "
$1
" in
--show-idx) show_idx=y ;;
*) return 1 ;;
esac
shift
done
local wordlist="
$1
"
while [
$c
-lt
$cword
]; do
while [
$c
-lt
$cword
]; do
word
=
"
${
words
[c]
}
"
for word in
$wordlist
; do
for
subcommand
in
$1
;
do
if [ "
$word
" = "
${
words
[c]
}
" ]; then
if
[
"
$subcommand
"
=
"
$word
"
]
;
then
if [ -n "
${
show_idx
-
}
" ]; then
echo
"
$subcommand
"
echo "
$c
$word
"
else
echo "
$word
"
fi
return
return
fi
fi
done
done
...
@@ -978,6 +1286,40 @@ __git_find_on_cmdline ()
...
@@ -978,6 +1286,40 @@ __git_find_on_cmdline ()
done
done
}
}
# Similar to __git_find_on_cmdline, except that it loops backwards and thus
# prints the *last* word found. Useful for finding which of two options that
# supersede each other came last, such as "
--guess
" and "
--no-guess
".
#
# Usage: __git_find_last_on_cmdline [<option>]... "
<wordlist>
"
# --show-idx: Optionally show the index of the found word in the
$words
array.
__git_find_last_on_cmdline ()
{
local word c=
$cword
show_idx
while test
$#
-gt 1; do
case "
$1
" in
--show-idx) show_idx=y ;;
*) return 1 ;;
esac
shift
done
local wordlist="
$1
"
while [
$c
-gt 1 ]; do
((c--))
for word in
$wordlist
; do
if [ "
$word
" = "
${
words
[c]
}
" ]; then
if [ -n "
$show_idx
" ]; then
echo "
$c
$word
"
else
echo "
$word
"
fi
return
fi
done
done
}
# Echo the value of an option set on the command line or config
# Echo the value of an option set on the command line or config
#
#
#
$1
: short option name
#
$1
: short option name
...
@@ -1072,12 +1414,15 @@ __git_count_arguments ()
...
@@ -1072,12 +1414,15 @@ __git_count_arguments ()
}
}
__git_whitespacelist
=
"nowarn warn error error-all fix"
__git_whitespacelist
=
"nowarn warn error error-all fix"
__git_patchformat
=
"mbox stgit stgit-series hg mboxrd"
__git_showcurrentpatch
=
"diff raw"
__git_am_inprogress_options
=
"--skip --continue --resolved --abort --quit --show-current-patch"
_git_am
()
_git_am
()
{
{
__git_find_repo_path
__git_find_repo_path
if
[
-d
"
$__git_repo_path
"
/rebase-apply
]
;
then
if
[
-d
"
$__git_repo_path
"
/rebase-apply
]
;
then
__gitcomp
"
--skip --continue --resolved --abort
"
__gitcomp
"
$__git_am_inprogress_options
"
return
return
fi
fi
case
"
$cur
"
in
case
"
$cur
"
in
...
@@ -1085,13 +1430,17 @@ _git_am ()
...
@@ -1085,13 +1430,17 @@ _git_am ()
__gitcomp
"
$__git_whitespacelist
"
""
"
${
cur
##--whitespace=
}
"
__gitcomp
"
$__git_whitespacelist
"
""
"
${
cur
##--whitespace=
}
"
return
return
;;
;;
--patch-format
=
*
)
__gitcomp
"
$__git_patchformat
"
""
"
${
cur
##--patch-format=
}
"
return
;;
--show-current-patch
=
*
)
__gitcomp
"
$__git_showcurrentpatch
"
""
"
${
cur
##--show-current-patch=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin am
""
\
--3way --committer-date-is-author-date --ignore-date
"
$__git_am_inprogress_options
"
--ignore-whitespace --ignore-space-change
--interactive --keep --no-utf8 --signoff --utf8
--whitespace= --scissors
"
return
return
esac
esac
}
}
...
@@ -1104,14 +1453,7 @@ _git_apply ()
...
@@ -1104,14 +1453,7 @@ _git_apply ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin apply
--stat --numstat --summary --check --index
--cached --index-info --reverse --reject --unidiff-zero
--apply --no-add --exclude=
--ignore-whitespace --ignore-space-change
--whitespace= --inaccurate-eof --verbose
--recount --directory=
"
return
return
esac
esac
}
}
...
@@ -1119,11 +1461,12 @@ _git_apply ()
...
@@ -1119,11 +1461,12 @@ _git_apply ()
_git_add
()
_git_add
()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--chmod
=
*
)
__gitcomp
"+x -x"
""
"
${
cur
##--chmod=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin add
--interactive --refresh --patch --update --dry-run
--ignore-errors --intent-to-add --force --edit --chmod=
"
return
return
esac
esac
...
@@ -1147,10 +1490,7 @@ _git_archive ()
...
@@ -1147,10 +1490,7 @@ _git_archive ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin archive
"--format= --list --verbose --prefix= --worktree-attributes"
--format= --list --verbose
--prefix= --remote= --exec= --output
"
return
return
;;
;;
esac
esac
...
@@ -1182,6 +1522,8 @@ _git_bisect ()
...
@@ -1182,6 +1522,8 @@ _git_bisect ()
esac
esac
}
}
__git_ref_fieldlist
=
"refname objecttype objectsize objectname upstream push HEAD symref"
_git_branch
()
_git_branch
()
{
{
local
i
c
=
1
only_local_ref
=
"n"
has_r
=
"n"
local
i
c
=
1
only_local_ref
=
"n"
has_r
=
"n"
...
@@ -1200,13 +1542,7 @@ _git_branch ()
...
@@ -1200,13 +1542,7 @@ _git_branch ()
__git_complete_refs
--cur
=
"
${
cur
##--set-upstream-to=
}
"
__git_complete_refs
--cur
=
"
${
cur
##--set-upstream-to=
}
"
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin branch
--color --no-color --verbose --abbrev= --no-abbrev
--track --no-track --contains --no-contains --merged --no-merged
--set-upstream-to= --edit-description --list
--unset-upstream --delete --move --copy --remotes
--column --no-column --sort= --points-at
"
;;
;;
*
)
*
)
if
[
$only_local_ref
=
"y"
-a
$has_r
=
"n"
]
;
then
if
[
$only_local_ref
=
"y"
-a
$has_r
=
"n"
]
;
then
...
@@ -1238,49 +1574,111 @@ _git_bundle ()
...
@@ -1238,49 +1574,111 @@ _git_bundle ()
esac
esac
}
}
# Helper function to decide whether or not we should enable DWIM logic for
# git-switch and git-checkout.
#
# To decide between the following rules in priority order
# 1) the last provided of "--guess" or "--no-guess" explicitly enable or
# disable completion of DWIM logic respectively.
# 2) If the --no-track option is provided, take this as a hint to disable the
# DWIM completion logic
# 3) If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion
# logic, as requested by the user.
# 4) Enable DWIM logic otherwise.
#
__git_checkout_default_dwim_mode
()
{
local
last_option
dwim_opt
=
"--dwim"
if
[
"
${
GIT_COMPLETION_CHECKOUT_NO_GUESS
-
}
"
=
"1"
]
;
then
dwim_opt
=
""
fi
# --no-track disables DWIM, but with lower priority than
# --guess/--no-guess
if
[
-n
"
$(
__git_find_on_cmdline
"--no-track"
)
"
]
;
then
dwim_opt
=
""
fi
# Find the last provided --guess or --no-guess
last_option
=
"
$(
__git_find_last_on_cmdline
"--guess --no-guess"
)
"
case
"
$last_option
"
in
--guess
)
dwim_opt
=
"--dwim"
;;
--no-guess
)
dwim_opt
=
""
;;
esac
echo
"
$dwim_opt
"
}
_git_checkout
()
_git_checkout
()
{
{
__git_has_doubledash
&&
return
__git_has_doubledash
&&
return
local
dwim_opt
=
"
$(
__git_checkout_default_dwim_mode
)
"
case
"
$prev
"
in
-b
|
-B
|
--orphan
)
# Complete local branches (and DWIM branch
# remote branch names) for an option argument
# specifying a new branch name. This is for
# convenience, assuming new branches are
# possibly based on pre-existing branch names.
__git_complete_refs
$dwim_opt
--mode
=
"heads"
return
;;
*
)
;;
esac
case
"
$cur
"
in
case
"
$cur
"
in
--conflict
=
*
)
--conflict
=
*
)
__gitcomp
"diff3 merge"
""
"
${
cur
##--conflict=
}
"
__gitcomp
"diff3 merge"
""
"
${
cur
##--conflict=
}
"
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin checkout
--quiet --ours --theirs --track --no-track --merge
--conflict= --orphan --patch --detach --ignore-skip-worktree-bits
--recurse-submodules --no-recurse-submodules
"
;;
;;
*
)
*
)
# check if --track, --no-track, or --no-guess was specified
# At this point, we've already handled special completion for
# if so, disable DWIM mode
# the arguments to -b/-B, and --orphan. There are 3 main
local
flags
=
"--track --no-track --no-guess"
track_opt
=
"--track"
# things left we can possibly complete:
if
[
"
$GIT_COMPLETION_CHECKOUT_NO_GUESS
"
=
"1"
]
||
# 1) a start-point for -b/-B, -d/--detach, or --orphan
[
-n
"
$(
__git_find_on_cmdline
"
$flags
"
)
"
]
;
then
# 2) a remote head, for --track
track_opt
=
''
# 3) an arbitrary reference, possibly including DWIM names
#
if
[
-n
"
$(
__git_find_on_cmdline
"-b -B -d --detach --orphan"
)
"
]
;
then
__git_complete_refs
--mode
=
"refs"
elif
[
-n
"
$(
__git_find_on_cmdline
"--track"
)
"
]
;
then
__git_complete_refs
--mode
=
"remote-heads"
else
__git_complete_refs
$dwim_opt
--mode
=
"refs"
fi
fi
__git_complete_refs
$track_opt
;;
;;
esac
esac
}
}
_git_cherry
()
__git_sequencer_inprogress_options
=
"--continue --quit --abort --skip"
{
__git_complete_refs
__git_cherry_pick_inprogress_options
=
$__git_sequencer_inprogress_options
}
_git_cherry_pick
()
_git_cherry_pick
()
{
{
__git_find_repo_path
__git_find_repo_path
if
[
-f
"
$__git_repo_path
"
/CHERRY_PICK_HEAD
]
;
then
if
[
-f
"
$__git_repo_path
"
/CHERRY_PICK_HEAD
]
;
then
__gitcomp
"
--continue --quit --abort
"
__gitcomp
"
$__git_cherry_pick_inprogress_options
"
return
return
fi
fi
__git_complete_strategy
&&
return
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--edit --no-commit --signoff --strategy= --mainline"
__gitcomp_builtin cherry-pick
""
\
"
$__git_cherry_pick_inprogress_options
"
;;
;;
*
)
*
)
__git_complete_refs
__git_complete_refs
...
@@ -1292,7 +1690,7 @@ _git_clean ()
...
@@ -1292,7 +1690,7 @@ _git_clean ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--dry-run --quiet"
__gitcomp
_builtin clean
return
return
;;
;;
esac
esac
...
@@ -1303,28 +1701,20 @@ _git_clean ()
...
@@ -1303,28 +1701,20 @@ _git_clean ()
_git_clone
()
_git_clone
()
{
{
case
"
$prev
"
in
-c
|
--config
)
__git_complete_config_variable_name_and_value
return
;;
esac
case
"
$cur
"
in
case
"
$cur
"
in
--config
=
*
)
__git_complete_config_variable_name_and_value
\
--cur
=
"
${
cur
##--config=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin clone
--local
--no-hardlinks
--shared
--reference
--quiet
--no-checkout
--bare
--mirror
--origin
--upload-pack
--template=
--depth
--single-branch
--no-tags
--branch
--recurse-submodules
--no-single-branch
--shallow-submodules
"
return
return
;;
;;
esac
esac
...
@@ -1357,16 +1747,7 @@ _git_commit ()
...
@@ -1357,16 +1747,7 @@ _git_commit ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin commit
--all --author= --signoff --verify --no-verify
--edit --no-edit
--amend --include --only --interactive
--dry-run --reuse-message= --reedit-message=
--reset-author --file= --message= --template=
--cleanup= --untracked-files --untracked-files=
--verbose --quiet --fixup= --squash=
--patch --short --date --allow-empty
"
return
return
esac
esac
...
@@ -1382,11 +1763,7 @@ _git_describe ()
...
@@ -1382,11 +1763,7 @@ _git_describe ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin describe
--all --tags --contains --abbrev= --candidates=
--exact-match --debug --long --match --always --first-parent
--exclude --dirty --broken
"
return
return
esac
esac
__git_complete_refs
__git_complete_refs
...
@@ -1396,9 +1773,16 @@ __git_diff_algorithms="myers minimal patience histogram"
...
@@ -1396,9 +1773,16 @@ __git_diff_algorithms="myers minimal patience histogram"
__git_diff_submodule_formats
=
"diff log short"
__git_diff_submodule_formats
=
"diff log short"
__git_color_moved_opts
=
"no default plain blocks zebra dimmed-zebra"
__git_color_moved_ws_opts
=
"no ignore-space-at-eol ignore-space-change
ignore-all-space allow-indentation-change"
__git_diff_common_options
=
"--stat --numstat --shortstat --summary
__git_diff_common_options
=
"--stat --numstat --shortstat --summary
--patch-with-stat --name-only --name-status --color
--patch-with-stat --name-only --name-status --color
--no-color --color-words --no-renames --check
--no-color --color-words --no-renames --check
--color-moved --color-moved= --no-color-moved
--color-moved-ws= --no-color-moved-ws
--full-index --binary --abbrev --diff-filter=
--full-index --binary --abbrev --diff-filter=
--find-copies-harder --ignore-cr-at-eol
--find-copies-harder --ignore-cr-at-eol
--text --ignore-space-at-eol --ignore-space-change
--text --ignore-space-at-eol --ignore-space-change
...
@@ -1411,7 +1795,9 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
...
@@ -1411,7 +1795,9 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--dirstat --dirstat= --dirstat-by-file
--dirstat --dirstat= --dirstat-by-file
--dirstat-by-file= --cumulative
--dirstat-by-file= --cumulative
--diff-algorithm=
--diff-algorithm=
--submodule --submodule=
--submodule --submodule= --ignore-submodules
--indent-heuristic --no-indent-heuristic
--textconv --no-textconv
"
"
_git_diff
()
_git_diff
()
...
@@ -1427,6 +1813,14 @@ _git_diff ()
...
@@ -1427,6 +1813,14 @@ _git_diff ()
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
return
return
;;
;;
--color-moved
=
*
)
__gitcomp
"
$__git_color_moved_opts
"
""
"
${
cur
##--color-moved=
}
"
return
;;
--color-moved-ws
=
*
)
__gitcomp
"
$__git_color_moved_ws_opts
"
""
"
${
cur
##--color-moved-ws=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
__gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
--base --ours --theirs --no-index
--base --ours --theirs --no-index
...
@@ -1439,7 +1833,8 @@ _git_diff ()
...
@@ -1439,7 +1833,8 @@ _git_diff ()
}
}
__git_mergetools_common
=
"diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
__git_mergetools_common
=
"diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc codecompare
tkdiff vimdiff nvimdiff gvimdiff xxdiff araxis p4merge
bc codecompare smerge
"
"
_git_difftool
()
_git_difftool
()
...
@@ -1452,11 +1847,11 @@ _git_difftool ()
...
@@ -1452,11 +1847,11 @@ _git_difftool ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
__gitcomp
_builtin difftool
"
$__git_diff_common_options
--base --ours --theirs
--base
--cached
--ours --theirs
--no-renames --diff-filter= --find-copies-harder
--pickaxe-all --pickaxe-regex
--relative --
ignore-submodules
--relative --
staged
--tool=
"
"
return
return
;;
;;
esac
esac
...
@@ -1465,12 +1860,6 @@ _git_difftool ()
...
@@ -1465,12 +1860,6 @@ _git_difftool ()
__git_fetch_recurse_submodules
=
"yes on-demand no"
__git_fetch_recurse_submodules
=
"yes on-demand no"
__git_fetch_options
=
"
--quiet --verbose --append --upload-pack --force --keep --depth=
--tags --no-tags --all --prune --dry-run --recurse-submodules=
--unshallow --update-shallow
"
_git_fetch
()
_git_fetch
()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
...
@@ -1478,21 +1867,21 @@ _git_fetch ()
...
@@ -1478,21 +1867,21 @@ _git_fetch ()
__gitcomp
"
$__git_fetch_recurse_submodules
"
""
"
${
cur
##--recurse-submodules=
}
"
__gitcomp
"
$__git_fetch_recurse_submodules
"
""
"
${
cur
##--recurse-submodules=
}
"
return
return
;;
;;
--filter
=
*
)
__gitcomp
"blob:none blob:limit= sparse:oid="
""
"
${
cur
##--filter=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
$__git_fetch_options
"
__gitcomp
_builtin fetch
return
return
;;
;;
esac
esac
__git_complete_remote_or_refspec
__git_complete_remote_or_refspec
}
}
__git_format_patch_options
=
"
__git_format_patch_extra_options
=
"
--stdout --attach --no-attach --thread --thread= --no-thread
--full-index --not --all --no-prefix --src-prefix=
--numbered --start-number --numbered-files --keep-subject --signoff
--dst-prefix= --notes
--signature --no-signature --in-reply-to= --cc= --full-index --binary
--not --all --cover-letter --no-prefix --src-prefix= --dst-prefix=
--inline --suffix= --ignore-if-in-upstream --subject-prefix=
--output-directory --reroll-count --to= --quiet --notes
"
"
_git_format_patch
()
_git_format_patch
()
...
@@ -1504,32 +1893,23 @@ _git_format_patch ()
...
@@ -1504,32 +1893,23 @@ _git_format_patch ()
"
""
"
${
cur
##--thread=
}
"
"
""
"
${
cur
##--thread=
}
"
return
return
;;
;;
--
*
)
--
base
=
*
|
--interdiff
=
*
|
--range-diff
=
*
)
__gitcomp
"
$__git_format_patch_options
"
__git
_
comp
lete_refs
--cur
=
"
${
cur
#--*=
}
"
return
return
;;
;;
esac
__git_complete_revlist
}
_git_fsck
()
{
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin format-patch
"
$__git_format_patch_extra_options
"
--tags --root --unreachable --cache --no-reflogs --full
--strict --verbose --lost-found --name-objects
"
return
return
;;
;;
esac
esac
__git_complete_revlist
}
}
_git_
gc
()
_git_
fsck
()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--prune --aggressive"
__gitcomp
_builtin fsck
return
return
;;
;;
esac
esac
...
@@ -1585,21 +1965,7 @@ _git_grep ()
...
@@ -1585,21 +1965,7 @@ _git_grep ()
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin
grep
--cached
--text --ignore-case --word-regexp --invert-match
--full-name --line-number
--extended-regexp --basic-regexp --fixed-strings
--perl-regexp
--threads
--files-with-matches --name-only
--files-without-match
--max-depth
--count
--and --or --not --all-match
--break --heading --show-function --function-context
--untracked --no-index
"
return
return
;;
;;
esac
esac
...
@@ -1617,17 +1983,16 @@ _git_help ()
...
@@ -1617,17 +1983,16 @@ _git_help ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--all --guides --info --man --web"
__gitcomp
_builtin
help
return
return
;;
;;
esac
esac
__git_compute_all_commands
if
test
-n
"
$GIT_TESTING_ALL_COMMAND_LIST
"
__gitcomp
"
$__git_all_commands
$(
__git_aliases
)
then
attributes cli core-tutorial cvs-migration
__gitcomp
"
$GIT_TESTING_ALL_COMMAND_LIST
$(
__git
--list-cmds
=
alias
,list-guide
)
gitk"
diffcore everyday gitk glossary hooks ignore modules
else
namespaces repository-layout revisions tutorial tutorial-2
__gitcomp
"
$(
__git
--list-cmds
=
main,nohelpers,alias,list-guide
)
gitk"
workflows
fi
"
}
}
_git_init
()
_git_init
()
...
@@ -1640,7 +2005,7 @@ _git_init ()
...
@@ -1640,7 +2005,7 @@ _git_init ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"--quiet --bare --template= --shared --shared="
__gitcomp
_builtin init
return
return
;;
;;
esac
esac
...
@@ -1650,13 +2015,7 @@ _git_ls_files ()
...
@@ -1650,13 +2015,7 @@ _git_ls_files ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--cached --deleted --modified --others --ignored
__gitcomp_builtin ls-files
--stage --directory --no-empty-directory --unmerged
--killed --exclude= --exclude-from=
--exclude-per-directory= --exclude-standard
--error-unmatch --with-tree= --full-name
--abbrev --ignored --exclude-per-directory
"
return
return
;;
;;
esac
esac
...
@@ -1670,7 +2029,7 @@ _git_ls_remote ()
...
@@ -1670,7 +2029,7 @@ _git_ls_remote ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--heads --tags --refs --get-url --symref"
__gitcomp
_builtin ls-remote
return
return
;;
;;
esac
esac
...
@@ -1679,6 +2038,13 @@ _git_ls_remote ()
...
@@ -1679,6 +2038,13 @@ _git_ls_remote ()
_git_ls_tree
()
_git_ls_tree
()
{
{
case
"
$cur
"
in
--
*
)
__gitcomp_builtin ls-tree
return
;;
esac
__git_complete_file
__git_complete_file
}
}
...
@@ -1705,8 +2071,8 @@ __git_log_shortlog_options="
...
@@ -1705,8 +2071,8 @@ __git_log_shortlog_options="
--all-match --invert-grep
--all-match --invert-grep
"
"
__git_log_pretty_formats
=
"oneline short medium full fuller email raw format:"
__git_log_pretty_formats
=
"oneline short medium full fuller
reference
email raw format:
tformat: mboxrd
"
__git_log_date_formats
=
"relative iso8601 rfc2822 short local default raw"
__git_log_date_formats
=
"relative iso8601
iso8601-strict
rfc2822 short local default raw
unix format:
"
_git_log
()
_git_log
()
{
{
...
@@ -1752,6 +2118,10 @@ _git_log ()
...
@@ -1752,6 +2118,10 @@ _git_log ()
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
return
return
;;
;;
--no-walk
=
*
)
__gitcomp
"sorted unsorted"
""
"
${
cur
##--no-walk=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp
"
$__git_log_common_options
$__git_log_common_options
...
@@ -1759,19 +2129,23 @@ _git_log ()
...
@@ -1759,19 +2129,23 @@ _git_log ()
$__git_log_gitk_options
$__git_log_gitk_options
--root --topo-order --date-order --reverse
--root --topo-order --date-order --reverse
--follow --full-diff
--follow --full-diff
--abbrev-commit --abbrev=
--abbrev-commit
--no-abbrev-commit
--abbrev=
--relative-date --date=
--relative-date --date=
--pretty= --format= --oneline
--pretty= --format= --oneline
--show-signature
--show-signature
--cherry-mark
--cherry-mark
--cherry-pick
--cherry-pick
--graph
--graph
--decorate --decorate=
--decorate --decorate=
--no-decorate
--walk-reflogs
--walk-reflogs
--no-walk --no-walk= --do-walk
--parents --children
--parents --children
--expand-tabs --expand-tabs= --no-expand-tabs
--patch
$merge
$merge
$__git_diff_common_options
$__git_diff_common_options
--pickaxe-all --pickaxe-regex
--pickaxe-all --pickaxe-regex
--patch --no-patch
"
"
return
return
;;
;;
...
@@ -1794,22 +2168,13 @@ _git_log ()
...
@@ -1794,22 +2168,13 @@ _git_log ()
__git_complete_revlist
__git_complete_revlist
}
}
# Common merge options shared by git-merge(1) and git-pull(1).
__git_merge_options
=
"
--no-commit --no-stat --log --no-log --squash --strategy
--commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
--verify-signatures --no-verify-signatures --gpg-sign
--quiet --verbose --progress --no-progress
"
_git_merge
()
_git_merge
()
{
{
__git_complete_strategy
&&
return
__git_complete_strategy
&&
return
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
$__git_merge_options
__gitcomp_builtin merge
--rerere-autoupdate --no-rerere-autoupdate --abort --continue"
return
return
esac
esac
__git_complete_refs
__git_complete_refs
...
@@ -1823,7 +2188,7 @@ _git_mergetool ()
...
@@ -1823,7 +2188,7 @@ _git_mergetool ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"--tool= --prompt --no-prompt"
__gitcomp
"--tool= --prompt --no-prompt
--gui --no-gui
"
return
return
;;
;;
esac
esac
...
@@ -1833,7 +2198,7 @@ _git_merge_base ()
...
@@ -1833,7 +2198,7 @@ _git_merge_base ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--octopus --independent --is-ancestor --fork-point"
__gitcomp
_builtin merge-base
return
return
;;
;;
esac
esac
...
@@ -1844,7 +2209,7 @@ _git_mv ()
...
@@ -1844,7 +2209,7 @@ _git_mv ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--dry-run"
__gitcomp
_builtin
mv
return
return
;;
;;
esac
esac
...
@@ -1858,19 +2223,14 @@ _git_mv ()
...
@@ -1858,19 +2223,14 @@ _git_mv ()
fi
fi
}
}
_git_name_rev
()
{
__gitcomp
"--tags --all --stdin"
}
_git_notes
()
_git_notes
()
{
{
local
subcommands
=
'add append copy edit
list
prune remove show'
local
subcommands
=
'add append copy edit
get-ref list merge
prune remove show'
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
case
"
$subcommand
,
$cur
"
in
case
"
$subcommand
,
$cur
"
in
,--
*
)
,--
*
)
__gitcomp
'--ref'
__gitcomp
_builtin notes
;;
;;
,
*
)
,
*
)
case
"
$prev
"
in
case
"
$prev
"
in
...
@@ -1882,21 +2242,14 @@ _git_notes ()
...
@@ -1882,21 +2242,14 @@ _git_notes ()
;;
;;
esac
esac
;;
;;
add,--reuse-message
=
*
|
append,--reuse-message
=
*
|
\
*
,--reuse-message
=
*
|
*
,--reedit-message
=
*
)
add,--reedit-message
=
*
|
append,--reedit-message
=
*
)
__git_complete_refs
--cur
=
"
${
cur
#*=
}
"
__git_complete_refs
--cur
=
"
${
cur
#*=
}
"
;;
;;
add,--
*
|
append,--
*
)
*
,--
*
)
__gitcomp
'--file= --message= --reedit-message=
__gitcomp_builtin notes_
$subcommand
--reuse-message='
;;
copy,--
*
)
__gitcomp
'--stdin'
;;
prune,--
*
)
__gitcomp
'--dry-run --verbose'
;;
;;
prune,
*
)
prune,
*
|
get-ref,
*
)
# this command does not take a ref, do not complete it
;;
;;
*
)
*
)
case
"
$prev
"
in
case
"
$prev
"
in
...
@@ -1920,12 +2273,8 @@ _git_pull ()
...
@@ -1920,12 +2273,8 @@ _git_pull ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin pull
--rebase --no-rebase
--autostash --no-autostash
$__git_merge_options
$__git_fetch_options
"
return
return
;;
;;
esac
esac
...
@@ -1975,28 +2324,40 @@ _git_push ()
...
@@ -1975,28 +2324,40 @@ _git_push ()
__git_complete_force_with_lease
"
${
cur
##--force-with-lease=
}
"
__git_complete_force_with_lease
"
${
cur
##--force-with-lease=
}
"
return
return
;;
;;
--
*
)
__gitcomp_builtin push
return
;;
esac
__git_complete_remote_or_refspec
}
_git_range_diff
()
{
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp
"
--all --mirror --tags --dry-run --force --verbose
--creation-factor= --no-dual-color
--quiet --prune --delete --follow-tags
$__git_diff_common_options
--receive-pack= --repo= --set-upstream
--force-with-lease --force-with-lease= --recurse-submodules=
"
"
return
return
;;
;;
esac
esac
__git_complete_re
mote_or_refspec
__git_complete_re
vlist
}
}
__git_rebase_inprogress_options
=
"--continue --skip --abort --quit --show-current-patch"
__git_rebase_interactive_inprogress_options
=
"
$__git_rebase_inprogress_options
--edit-todo"
_git_rebase
()
_git_rebase
()
{
{
__git_find_repo_path
__git_find_repo_path
if
[
-f
"
$__git_repo_path
"
/rebase-merge/interactive
]
;
then
if
[
-f
"
$__git_repo_path
"
/rebase-merge/interactive
]
;
then
__gitcomp
"
--continue --skip --abort --quit --edit-todo
"
__gitcomp
"
$__git_rebase_interactive_inprogress_options
"
return
return
elif
[
-d
"
$__git_repo_path
"
/rebase-apply
]
||
\
elif
[
-d
"
$__git_repo_path
"
/rebase-apply
]
||
\
[
-d
"
$__git_repo_path
"
/rebase-merge
]
;
then
[
-d
"
$__git_repo_path
"
/rebase-merge
]
;
then
__gitcomp
"
--continue --skip --abort --quit
"
__gitcomp
"
$__git_rebase_inprogress_options
"
return
return
fi
fi
__git_complete_strategy
&&
return
__git_complete_strategy
&&
return
...
@@ -2005,19 +2366,13 @@ _git_rebase ()
...
@@ -2005,19 +2366,13 @@ _git_rebase ()
__gitcomp
"
$__git_whitespacelist
"
""
"
${
cur
##--whitespace=
}
"
__gitcomp
"
$__git_whitespacelist
"
""
"
${
cur
##--whitespace=
}
"
return
return
;;
;;
--onto
=
*
)
__git_complete_refs
--cur
=
"
${
cur
##--onto=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin rebase
""
\
--onto --merge --strategy --interactive
"
$__git_rebase_interactive_inprogress_options
"
--preserve-merges --stat --no-stat
--committer-date-is-author-date --ignore-date
--ignore-whitespace --whitespace=
--autosquash --no-autosquash
--fork-point --no-fork-point
--autostash --no-autostash
--verify --no-verify
--keep-empty --root --force-rebase --no-ff
--exec
"
return
return
esac
esac
...
@@ -2077,16 +2432,16 @@ _git_send_email ()
...
@@ -2077,16 +2432,16 @@ _git_send_email ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"--annotate --bcc --cc --cc-cmd --chain-reply-to
__gitcomp
_builtin send-email
"--annotate --bcc --cc --cc-cmd --chain-reply-to
--compose --confirm= --dry-run --envelope-sender
--compose --confirm= --dry-run --envelope-sender
--from --identity
--from --identity
--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
--no-suppress-from --no-thread --quiet
--no-suppress-from --no-thread --quiet
--reply-to
--signed-off-by-cc --smtp-pass --smtp-server
--signed-off-by-cc --smtp-pass --smtp-server
--smtp-server-port --smtp-encryption= --smtp-user
--smtp-server-port --smtp-encryption= --smtp-user
--subject --suppress-cc= --suppress-from --thread --to
--subject --suppress-cc= --suppress-from --thread --to
--validate --no-validate
--validate --no-validate
$__git_format_patch_options
"
$__git_format_patch_
extra_
options
"
return
return
;;
;;
esac
esac
...
@@ -2119,11 +2474,7 @@ _git_status ()
...
@@ -2119,11 +2474,7 @@ _git_status ()
return
return
;;
;;
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin status
--short --branch --porcelain --long --verbose
--untracked-files= --ignore-submodules= --ignored
--column= --no-column
"
return
return
;;
;;
esac
esac
...
@@ -2148,6 +2499,57 @@ _git_status ()
...
@@ -2148,6 +2499,57 @@ _git_status ()
__git_complete_index_file
"
$complete_opt
"
__git_complete_index_file
"
$complete_opt
"
}
}
_git_switch
()
{
local
dwim_opt
=
"
$(
__git_checkout_default_dwim_mode
)
"
case
"
$prev
"
in
-c
|
-C
|
--orphan
)
# Complete local branches (and DWIM branch
# remote branch names) for an option argument
# specifying a new branch name. This is for
# convenience, assuming new branches are
# possibly based on pre-existing branch names.
__git_complete_refs
$dwim_opt
--mode
=
"heads"
return
;;
*
)
;;
esac
case
"
$cur
"
in
--conflict
=
*
)
__gitcomp
"diff3 merge"
""
"
${
cur
##--conflict=
}
"
;;
--
*
)
__gitcomp_builtin switch
;;
*
)
# Unlike in git checkout, git switch --orphan does not take
# a start point. Thus we really have nothing to complete after
# the branch name.
if
[
-n
"
$(
__git_find_on_cmdline
"--orphan"
)
"
]
;
then
return
fi
# At this point, we've already handled special completion for
# -c/-C, and --orphan. There are 3 main things left to
# complete:
# 1) a start-point for -c/-C or -d/--detach
# 2) a remote head, for --track
# 3) a branch name, possibly including DWIM remote branches
if
[
-n
"
$(
__git_find_on_cmdline
"-c -C -d --detach"
)
"
]
;
then
__git_complete_refs
--mode
=
"refs"
elif
[
-n
"
$(
__git_find_on_cmdline
"--track"
)
"
]
;
then
__git_complete_refs
--mode
=
"remote-heads"
else
__git_complete_refs
$dwim_opt
--mode
=
"heads"
fi
;;
esac
}
__git_config_get_set_variables
()
__git_config_get_set_variables
()
{
{
local
prevword word
config_file
=
c
=
$cword
local
prevword word
config_file
=
c
=
$cword
...
@@ -2170,496 +2572,287 @@ __git_config_get_set_variables ()
...
@@ -2170,496 +2572,287 @@ __git_config_get_set_variables ()
__git config
$config_file
--name-only
--list
__git config
$config_file
--name-only
--list
}
}
_git_config
()
__git_config_vars
=
__git_compute_config_vars
()
{
{
case
"
$prev
"
in
test
-n
"
$__git_config_vars
"
||
__git_config_vars
=
"
$(
git
help
--config-for-completion
|
sort
-u
)
"
}
# Completes possible values of various configuration variables.
#
# Usage: __git_complete_config_variable_value [<option>]...
# --varname=<word>: The name of the configuration variable whose value is
# to be completed. Defaults to the previous word on the
# command line.
# --cur=<word>: The current value to be completed. Defaults to the current
# word to be completed.
__git_complete_config_variable_value
()
{
local
varname
=
"
$prev
"
cur_
=
"
$cur
"
while
test
$#
!=
0
;
do
case
"
$1
"
in
--varname
=
*
)
varname
=
"
${
1
##--varname=
}
"
;;
--cur
=
*
)
cur_
=
"
${
1
##--cur=
}
"
;;
*
)
return
1
;;
esac
shift
done
if
[
"
${
BASH_VERSINFO
[0]
:-
0
}
"
-ge
4
]
;
then
varname
=
"
${
varname
,,
}
"
else
varname
=
"
$(
echo
"
$varname
"
|tr A-Z a-z
)
"
fi
case
"
$varname
"
in
branch.
*
.remote|branch.
*
.pushremote
)
branch.
*
.remote|branch.
*
.pushremote
)
__gitcomp_nl
"
$(
__git_remotes
)
"
__gitcomp_nl
"
$(
__git_remotes
)
"
""
"
$cur_
"
return
return
;;
;;
branch.
*
.merge
)
branch.
*
.merge
)
__git_complete_refs
__git_complete_refs
--cur
=
"
$cur_
"
return
return
;;
;;
branch.
*
.rebase
)
branch.
*
.rebase
)
__gitcomp
"false true preserve interactive"
__gitcomp
"false true
merges
preserve interactive"
""
"
$cur_
"
return
return
;;
;;
remote.pushdefault
)
remote.pushdefault
)
__gitcomp_nl
"
$(
__git_remotes
)
"
__gitcomp_nl
"
$(
__git_remotes
)
"
""
"
$cur_
"
return
return
;;
;;
remote.
*
.fetch
)
remote.
*
.fetch
)
local
remote
=
"
${
prev
#remote.
}
"
local
remote
=
"
${
varname
#remote.
}
"
remote
=
"
${
remote
%.fetch
}
"
remote
=
"
${
remote
%.fetch
}
"
if
[
-z
"
$cur
"
]
;
then
if
[
-z
"
$cur
_
"
]
;
then
__gitcomp_nl
"refs/heads/"
""
""
""
__gitcomp_nl
"refs/heads/"
""
""
""
return
return
fi
fi
__gitcomp_nl
"
$(
__git_refs_remotes
"
$remote
"
)
"
__gitcomp_nl
"
$(
__git_refs_remotes
"
$remote
"
)
"
""
"
$cur_
"
return
return
;;
;;
remote.
*
.push
)
remote.
*
.push
)
local
remote
=
"
${
prev
#remote.
}
"
local
remote
=
"
${
varname
#remote.
}
"
remote
=
"
${
remote
%.push
}
"
remote
=
"
${
remote
%.push
}
"
__gitcomp_nl
"
$(
__git
for
-each-ref
\
__gitcomp_nl
"
$(
__git
for
-each-ref
\
--format
=
'%(refname):%(refname)'
refs/heads
)
"
--format
=
'%(refname):%(refname)'
refs/heads
)
"
""
"
$cur_
"
return
return
;;
;;
pull.twohead|pull.octopus
)
pull.twohead|pull.octopus
)
__git_compute_merge_strategies
__git_compute_merge_strategies
__gitcomp
"
$__git_merge_strategies
"
__gitcomp
"
$__git_merge_strategies
"
""
"
$cur_
"
return
;;
color.branch|color.diff|color.interactive|
\
color.showbranch|color.status|color.ui
)
__gitcomp
"always never auto"
return
return
;;
;;
color.pager
)
color.pager
)
__gitcomp
"false true"
__gitcomp
"false true"
""
"
$cur_
"
return
return
;;
;;
color.
*
.
*
)
color.
*
.
*
)
__gitcomp
"
__gitcomp
"
normal black red green yellow blue magenta cyan white
normal black red green yellow blue magenta cyan white
bold dim ul blink reverse
bold dim ul blink reverse
"
"
""
"
$cur_
"
return
;;
color.
*
)
__gitcomp
"false true always never auto"
""
"
$cur_
"
return
return
;;
;;
diff.submodule
)
diff.submodule
)
__gitcomp
"
log short
"
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
$cur_
"
return
return
;;
;;
help.format
)
help.format
)
__gitcomp
"man info web html"
__gitcomp
"man info web html"
""
"
$cur_
"
return
return
;;
;;
log.date
)
log.date
)
__gitcomp
"
$__git_log_date_formats
"
__gitcomp
"
$__git_log_date_formats
"
""
"
$cur_
"
return
return
;;
;;
sendemail.alias
es
filetype
)
sendemail.aliasfiletype
)
__gitcomp
"mutt mailrc pine elm gnus"
__gitcomp
"mutt mailrc pine elm gnus"
""
"
$cur_
"
return
return
;;
;;
sendemail.confirm
)
sendemail.confirm
)
__gitcomp
"
$__git_send_email_confirm_options
"
__gitcomp
"
$__git_send_email_confirm_options
"
""
"
$cur_
"
return
return
;;
;;
sendemail.suppresscc
)
sendemail.suppresscc
)
__gitcomp
"
$__git_send_email_suppresscc_options
"
__gitcomp
"
$__git_send_email_suppresscc_options
"
""
"
$cur_
"
return
return
;;
;;
sendemail.transferencoding
)
sendemail.transferencoding
)
__gitcomp
"7bit 8bit quoted-printable base64"
__gitcomp
"7bit 8bit quoted-printable base64"
""
"
$cur_
"
return
;;
--get
|
--get-all
|
--unset
|
--unset-all
)
__gitcomp_nl
"
$(
__git_config_get_set_variables
)
"
return
return
;;
;;
*
.
*
)
*
.
*
)
return
return
;;
;;
esac
esac
case
"
$cur
"
in
}
--
*
)
__gitcomp
"
# Completes configuration sections, subsections, variable names.
--system --global --local --file=
#
--list --replace-all
# Usage: __git_complete_config_variable_name [<option>]...
--get --get-all --get-regexp
# --cur=<word>: The current configuration section/variable name to be
--add --unset --unset-all
# completed. Defaults to the current word to be completed.
--remove-section --rename-section
# --sfx=<suffix>: A suffix to be appended to each fully completed
--name-only
# configuration variable name (but not to sections or
"
# subsections) instead of the default space.
return
__git_complete_config_variable_name
()
;;
{
local
cur_
=
"
$cur
"
sfx
while
test
$#
!=
0
;
do
case
"
$1
"
in
--cur
=
*
)
cur_
=
"
${
1
##--cur=
}
"
;;
--sfx
=
*
)
sfx
=
"
${
1
##--sfx=
}
"
;;
*
)
return
1
;;
esac
shift
done
case
"
$cur_
"
in
branch.
*
.
*
)
branch.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
__gitcomp
"remote pushremote merge mergeoptions rebase"
"
$pfx
"
"
$cur_
"
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"remote pushRemote merge mergeOptions rebase"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
branch.
*
)
branch.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
#*.
}
"
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
#*.
}
"
__gitcomp_direct
"
$(
__git_heads
"
$pfx
"
"
$cur_
"
"."
)
"
__gitcomp_direct
"
$(
__git_heads
"
$pfx
"
"
$cur_
"
"."
)
"
__gitcomp_nl_append
$'auto
s
etup
m
erge
\n
auto
s
etup
r
ebase
\n
'
"
$pfx
"
"
$cur_
"
__gitcomp_nl_append
$'auto
S
etup
M
erge
\n
auto
S
etup
R
ebase
\n
'
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
guitool.
*
.
*
)
guitool.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"
__gitcomp
"
arg
p
rompt cmd confirm needs
f
ile no
c
onsole no
r
escan
arg
P
rompt cmd confirm needs
F
ile no
C
onsole no
R
escan
prompt rev
p
rompt rev
u
nmerged title
prompt rev
P
rompt rev
U
nmerged title
"
"
$pfx
"
"
$cur_
"
"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
difftool.
*
.
*
)
difftool.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
__gitcomp
"cmd path"
"
$pfx
"
"
$cur_
"
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"cmd path"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
man.
*
.
*
)
man.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
__gitcomp
"cmd path"
"
$pfx
"
"
$cur_
"
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"cmd path"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
mergetool.
*
.
*
)
mergetool.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
__gitcomp
"cmd path trustExitCode"
"
$pfx
"
"
$cur_
"
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"cmd path trustExitCode"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
pager.
*
)
pager.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
#*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
cur_
=
"
${
cur_
#*.
}
"
__git_compute_all_commands
__git_compute_all_commands
__gitcomp_nl
"
$__git_all_commands
"
"
$pfx
"
"
$cur_
"
__gitcomp_nl
"
$__git_all_commands
"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
remote.
*
.
*
)
remote.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"
__gitcomp
"
url proxy fetch push mirror skipDefaultUpdate
url proxy fetch push mirror skipDefaultUpdate
receivepack uploadpack tag
o
pt pushurl
receivepack uploadpack tag
O
pt pushurl
"
"
$pfx
"
"
$cur_
"
"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
remote.
*
)
remote.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
#*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
cur_
=
"
${
cur_
#*.
}
"
__gitcomp_nl
"
$(
__git_remotes
)
"
"
$pfx
"
"
$cur_
"
"."
__gitcomp_nl
"
$(
__git_remotes
)
"
"
$pfx
"
"
$cur_
"
"."
__gitcomp_nl_append
"push
d
efault"
"
$pfx
"
"
$cur_
"
__gitcomp_nl_append
"push
D
efault"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
url.
*
.
*
)
url.
*
.
*
)
local
pfx
=
"
${
cur
%.*
}
."
cur_
=
"
${
cur
##*.
}
"
local
pfx
=
"
${
cur_
%.*
}
."
__gitcomp
"insteadOf pushInsteadOf"
"
$pfx
"
"
$cur_
"
cur_
=
"
${
cur_
##*.
}
"
__gitcomp
"insteadOf pushInsteadOf"
"
$pfx
"
"
$cur_
"
"
$sfx
"
return
return
;;
;;
*
.
*
)
__git_compute_config_vars
__gitcomp
"
$__git_config_vars
"
""
"
$cur_
"
"
$sfx
"
;;
*
)
__git_compute_config_vars
__gitcomp
"
$(
echo
"
$__git_config_vars
"
|
awk
-F
.
'{
sections[$1] = 1
}
END {
for (s in sections)
print s "."
}
'
)
"
""
"
$cur_
"
;;
esac
}
# Completes '='-separated configuration sections/variable names and values
# for 'git -c section.name=value'.
#
# Usage: __git_complete_config_variable_name_and_value [<option>]...
# --cur=<word>: The current configuration section/variable name/value to be
# completed. Defaults to the current word to be completed.
__git_complete_config_variable_name_and_value
()
{
local
cur_
=
"
$cur
"
while
test
$#
!=
0
;
do
case
"
$1
"
in
--cur
=
*
)
cur_
=
"
${
1
##--cur=
}
"
;;
*
)
return
1
;;
esac
shift
done
case
"
$cur_
"
in
*
=
*
)
__git_complete_config_variable_value
\
--varname
=
"
${
cur_
%%=*
}
"
--cur
=
"
${
cur_
#*=
}
"
;;
*
)
__git_complete_config_variable_name
--cur
=
"
$cur_
"
--sfx
=
'='
;;
esac
}
_git_config
()
{
case
"
$prev
"
in
--get
|
--get-all
|
--unset
|
--unset-all
)
__gitcomp_nl
"
$(
__git_config_get_set_variables
)
"
return
;;
*
.
*
)
__git_complete_config_variable_value
return
;;
esac
case
"
$cur
"
in
--
*
)
__gitcomp_builtin config
;;
*
)
__git_complete_config_variable_name
;;
esac
esac
__gitcomp
"
add.ignoreErrors
advice.amWorkDir
advice.commitBeforeMerge
advice.detachedHead
advice.implicitIdentity
advice.pushAlreadyExists
advice.pushFetchFirst
advice.pushNeedsForce
advice.pushNonFFCurrent
advice.pushNonFFMatching
advice.pushUpdateRejected
advice.resolveConflict
advice.rmHints
advice.statusHints
advice.statusUoption
advice.ignoredHook
alias.
am.keepcr
am.threeWay
apply.ignorewhitespace
apply.whitespace
branch.autosetupmerge
branch.autosetuprebase
browser.
clean.requireForce
color.branch
color.branch.current
color.branch.local
color.branch.plain
color.branch.remote
color.decorate.HEAD
color.decorate.branch
color.decorate.remoteBranch
color.decorate.stash
color.decorate.tag
color.diff
color.diff.commit
color.diff.frag
color.diff.func
color.diff.meta
color.diff.new
color.diff.old
color.diff.plain
color.diff.whitespace
color.grep
color.grep.context
color.grep.filename
color.grep.function
color.grep.linenumber
color.grep.match
color.grep.selected
color.grep.separator
color.interactive
color.interactive.error
color.interactive.header
color.interactive.help
color.interactive.prompt
color.pager
color.showbranch
color.status
color.status.added
color.status.changed
color.status.header
color.status.localBranch
color.status.nobranch
color.status.remoteBranch
color.status.unmerged
color.status.untracked
color.status.updated
color.ui
commit.cleanup
commit.gpgSign
commit.status
commit.template
commit.verbose
core.abbrev
core.askpass
core.attributesfile
core.autocrlf
core.bare
core.bigFileThreshold
core.checkStat
core.commentChar
core.compression
core.createObject
core.deltaBaseCacheLimit
core.editor
core.eol
core.excludesfile
core.fileMode
core.fsyncobjectfiles
core.gitProxy
core.hideDotFiles
core.hooksPath
core.ignoreStat
core.ignorecase
core.logAllRefUpdates
core.loosecompression
core.notesRef
core.packedGitLimit
core.packedGitWindowSize
core.packedRefsTimeout
core.pager
core.precomposeUnicode
core.preferSymlinkRefs
core.preloadindex
core.protectHFS
core.protectNTFS
core.quotepath
core.repositoryFormatVersion
core.safecrlf
core.sharedRepository
core.sparseCheckout
core.splitIndex
core.sshCommand
core.symlinks
core.trustctime
core.untrackedCache
core.warnAmbiguousRefs
core.whitespace
core.worktree
credential.helper
credential.useHttpPath
credential.username
credentialCache.ignoreSIGHUP
diff.autorefreshindex
diff.external
diff.ignoreSubmodules
diff.mnemonicprefix
diff.noprefix
diff.renameLimit
diff.renames
diff.statGraphWidth
diff.submodule
diff.suppressBlankEmpty
diff.tool
diff.wordRegex
diff.algorithm
difftool.
difftool.prompt
fetch.recurseSubmodules
fetch.unpackLimit
format.attach
format.cc
format.coverLetter
format.from
format.headers
format.numbered
format.pretty
format.signature
format.signoff
format.subjectprefix
format.suffix
format.thread
format.to
gc.
gc.aggressiveDepth
gc.aggressiveWindow
gc.auto
gc.autoDetach
gc.autopacklimit
gc.logExpiry
gc.packrefs
gc.pruneexpire
gc.reflogexpire
gc.reflogexpireunreachable
gc.rerereresolved
gc.rerereunresolved
gc.worktreePruneExpire
gitcvs.allbinary
gitcvs.commitmsgannotation
gitcvs.dbTableNamePrefix
gitcvs.dbdriver
gitcvs.dbname
gitcvs.dbpass
gitcvs.dbuser
gitcvs.enabled
gitcvs.logfile
gitcvs.usecrlfattr
guitool.
gui.blamehistoryctx
gui.commitmsgwidth
gui.copyblamethreshold
gui.diffcontext
gui.encoding
gui.fastcopyblame
gui.matchtrackingbranch
gui.newbranchtemplate
gui.pruneduringfetch
gui.spellingdictionary
gui.trustmtime
help.autocorrect
help.browser
help.format
http.lowSpeedLimit
http.lowSpeedTime
http.maxRequests
http.minSessions
http.noEPSV
http.postBuffer
http.proxy
http.sslCipherList
http.sslVersion
http.sslCAInfo
http.sslCAPath
http.sslCert
http.sslCertPasswordProtected
http.sslKey
http.sslVerify
http.useragent
i18n.commitEncoding
i18n.logOutputEncoding
imap.authMethod
imap.folder
imap.host
imap.pass
imap.port
imap.preformattedHTML
imap.sslverify
imap.tunnel
imap.user
init.templatedir
instaweb.browser
instaweb.httpd
instaweb.local
instaweb.modulepath
instaweb.port
interactive.singlekey
log.date
log.decorate
log.showroot
mailmap.file
man.
man.viewer
merge.
merge.conflictstyle
merge.log
merge.renameLimit
merge.renormalize
merge.stat
merge.tool
merge.verbosity
mergetool.
mergetool.keepBackup
mergetool.keepTemporaries
mergetool.prompt
notes.displayRef
notes.rewrite.
notes.rewrite.amend
notes.rewrite.rebase
notes.rewriteMode
notes.rewriteRef
pack.compression
pack.deltaCacheLimit
pack.deltaCacheSize
pack.depth
pack.indexVersion
pack.packSizeLimit
pack.threads
pack.window
pack.windowMemory
pager.
pretty.
pull.octopus
pull.twohead
push.default
push.followTags
rebase.autosquash
rebase.stat
receive.autogc
receive.denyCurrentBranch
receive.denyDeleteCurrent
receive.denyDeletes
receive.denyNonFastForwards
receive.fsckObjects
receive.unpackLimit
receive.updateserverinfo
remote.pushdefault
remotes.
repack.usedeltabaseoffset
rerere.autoupdate
rerere.enabled
sendemail.
sendemail.aliasesfile
sendemail.aliasfiletype
sendemail.bcc
sendemail.cc
sendemail.cccmd
sendemail.chainreplyto
sendemail.confirm
sendemail.envelopesender
sendemail.from
sendemail.identity
sendemail.multiedit
sendemail.signedoffbycc
sendemail.smtpdomain
sendemail.smtpencryption
sendemail.smtppass
sendemail.smtpserver
sendemail.smtpserveroption
sendemail.smtpserverport
sendemail.smtpuser
sendemail.suppresscc
sendemail.suppressfrom
sendemail.thread
sendemail.to
sendemail.tocmd
sendemail.validate
sendemail.smtpbatchsize
sendemail.smtprelogindelay
showbranch.default
status.relativePaths
status.showUntrackedFiles
status.submodulesummary
submodule.
tar.umask
transfer.unpackLimit
url.
user.email
user.name
user.signingkey
web.browser
branch. remote.
"
}
}
_git_remote
()
_git_remote
()
...
@@ -2672,7 +2865,7 @@ _git_remote ()
...
@@ -2672,7 +2865,7 @@ _git_remote ()
if
[
-z
"
$subcommand
"
]
;
then
if
[
-z
"
$subcommand
"
]
;
then
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--verbose"
__gitcomp
_builtin remote
;;
;;
*
)
*
)
__gitcomp
"
$subcommands
"
__gitcomp
"
$subcommands
"
...
@@ -2683,33 +2876,33 @@ _git_remote ()
...
@@ -2683,33 +2876,33 @@ _git_remote ()
case
"
$subcommand
,
$cur
"
in
case
"
$subcommand
,
$cur
"
in
add,--
*
)
add,--
*
)
__gitcomp
"--track --master --fetch --tags --no-tags --mirror="
__gitcomp
_builtin remote_add
;;
;;
add,
*
)
add,
*
)
;;
;;
set-head,--
*
)
set-head,--
*
)
__gitcomp
"--auto --delete"
__gitcomp
_builtin remote_set-head
;;
;;
set-branches,--
*
)
set-branches,--
*
)
__gitcomp
"--add"
__gitcomp
_builtin remote_set-branches
;;
;;
set-head,
*
|
set-branches,
*
)
set-head,
*
|
set-branches,
*
)
__git_complete_remote_or_refspec
__git_complete_remote_or_refspec
;;
;;
update,--
*
)
update,--
*
)
__gitcomp
"--prune"
__gitcomp
_builtin remote_update
;;
;;
update,
*
)
update,
*
)
__gitcomp
"
$(
__git_get_config_variables
"remotes"
)
"
__gitcomp
"
$(
__git_remotes
)
$(
__git_get_config_variables
"remotes"
)
"
;;
;;
set-url,--
*
)
set-url,--
*
)
__gitcomp
"--push --add --delete"
__gitcomp
_builtin remote_set-url
;;
;;
get-url,--
*
)
get-url,--
*
)
__gitcomp
"--push --all"
__gitcomp
_builtin remote_get-url
;;
;;
prune,--
*
)
prune,--
*
)
__gitcomp
"--dry-
run
"
__gitcomp
_builtin remote_p
run
e
;;
;;
*
)
*
)
__gitcomp_nl
"
$(
__git_remotes
)
"
__gitcomp_nl
"
$(
__git_remotes
)
"
...
@@ -2720,8 +2913,12 @@ _git_remote ()
...
@@ -2720,8 +2913,12 @@ _git_remote ()
_git_replace
()
_git_replace
()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--format
=
*
)
__gitcomp
"short medium long"
""
"
${
cur
##--format=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"--edit --graft --format= --list --delete"
__gitcomp
_builtin replace
return
return
;;
;;
esac
esac
...
@@ -2745,26 +2942,49 @@ _git_reset ()
...
@@ -2745,26 +2942,49 @@ _git_reset ()
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--merge --mixed --hard --soft --patch --keep"
__gitcomp
_builtin reset
return
return
;;
;;
esac
esac
__git_complete_refs
__git_complete_refs
}
}
_git_restore
()
{
case
"
$prev
"
in
-s
)
__git_complete_refs
return
;;
esac
case
"
$cur
"
in
--conflict
=
*
)
__gitcomp
"diff3 merge"
""
"
${
cur
##--conflict=
}
"
;;
--source
=
*
)
__git_complete_refs
--cur
=
"
${
cur
##--source=
}
"
;;
--
*
)
__gitcomp_builtin restore
;;
esac
}
__git_revert_inprogress_options
=
$__git_sequencer_inprogress_options
_git_revert
()
_git_revert
()
{
{
__git_find_repo_path
__git_find_repo_path
if
[
-f
"
$__git_repo_path
"
/REVERT_HEAD
]
;
then
if
[
-f
"
$__git_repo_path
"
/REVERT_HEAD
]
;
then
__gitcomp
"
--continue --quit --abort
"
__gitcomp
"
$__git_revert_inprogress_options
"
return
return
fi
fi
__git_complete_strategy
&&
return
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin revert
""
\
--edit --mainline --no-edit --no-commit --signoff
"
$__git_revert_inprogress_options
"
--strategy= --strategy-option=
"
return
return
;;
;;
esac
esac
...
@@ -2775,7 +2995,7 @@ _git_rm ()
...
@@ -2775,7 +2995,7 @@ _git_rm ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
__gitcomp
_builtin
rm
return
return
;;
;;
esac
esac
...
@@ -2818,9 +3038,18 @@ _git_show ()
...
@@ -2818,9 +3038,18 @@ _git_show ()
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
__gitcomp
"
$__git_diff_submodule_formats
"
""
"
${
cur
##--submodule=
}
"
return
return
;;
;;
--color-moved
=
*
)
__gitcomp
"
$__git_color_moved_opts
"
""
"
${
cur
##--color-moved=
}
"
return
;;
--color-moved-ws
=
*
)
__gitcomp
"
$__git_color_moved_ws_opts
"
""
"
${
cur
##--color-moved-ws=
}
"
return
;;
--
*
)
--
*
)
__gitcomp
"--pretty= --format= --abbrev-commit --oneline
__gitcomp
"--pretty= --format= --abbrev-commit --no-abbrev-commit
--show-signature
--oneline --show-signature --patch
--expand-tabs --expand-tabs= --no-expand-tabs
$__git_diff_common_options
$__git_diff_common_options
"
"
return
return
...
@@ -2833,28 +3062,52 @@ _git_show_branch ()
...
@@ -2833,28 +3062,52 @@ _git_show_branch ()
{
{
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin show-branch
--all --remotes --topo-order --date-order --current --more=
--list --independent --merge-base --no-name
--color --no-color
--sha1-name --sparse --topics --reflog
"
return
return
;;
;;
esac
esac
__git_complete_revlist
__git_complete_revlist
}
}
_git_sparse_checkout
()
{
local
subcommands
=
"list init set disable"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
if
[
-z
"
$subcommand
"
]
;
then
__gitcomp
"
$subcommands
"
return
fi
case
"
$subcommand
,
$cur
"
in
init,--
*
)
__gitcomp
"--cone"
;;
set
,--
*
)
__gitcomp
"--stdin"
;;
*
)
;;
esac
}
_git_stash
()
_git_stash
()
{
{
local
save_opts
=
'--all --keep-index --no-keep-index --quiet --patch --include-untracked'
local
save_opts
=
'--all --keep-index --no-keep-index --quiet --patch --include-untracked'
local
subcommands
=
'push save list show apply clear drop pop create branch'
local
subcommands
=
'push list show apply clear drop pop create branch'
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
save"
)
"
if
[
-z
"
$subcommand
"
-a
-n
"
$(
__git_find_on_cmdline
"-p"
)
"
]
;
then
subcommand
=
"push"
fi
if
[
-z
"
$subcommand
"
]
;
then
if
[
-z
"
$subcommand
"
]
;
then
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
$save_opts
"
__gitcomp
"
$save_opts
"
;;
;;
sa
*
)
if
[
-z
"
$(
__git_find_on_cmdline
"
$save_opts
"
)
"
]
;
then
__gitcomp
"save"
fi
;;
*
)
*
)
if
[
-z
"
$(
__git_find_on_cmdline
"
$save_opts
"
)
"
]
;
then
if
[
-z
"
$(
__git_find_on_cmdline
"
$save_opts
"
)
"
]
;
then
__gitcomp
"
$subcommands
"
__gitcomp
"
$subcommands
"
...
@@ -2875,6 +3128,9 @@ _git_stash ()
...
@@ -2875,6 +3128,9 @@ _git_stash ()
drop,--
*
)
drop,--
*
)
__gitcomp
"--quiet"
__gitcomp
"--quiet"
;;
;;
list,--
*
)
__gitcomp
"--name-status --oneline --patch-with-stat"
;;
show,--
*
|
branch,--
*
)
show,--
*
|
branch,--
*
)
;;
;;
branch,
*
)
branch,
*
)
...
@@ -2899,7 +3155,7 @@ _git_submodule ()
...
@@ -2899,7 +3155,7 @@ _git_submodule ()
{
{
__git_has_doubledash
&&
return
__git_has_doubledash
&&
return
local
subcommands
=
"add status init deinit update summary foreach sync"
local
subcommands
=
"add status init deinit update
set-branch set-url
summary foreach sync
absorbgitdirs
"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
if
[
-z
"
$subcommand
"
]
;
then
if
[
-z
"
$subcommand
"
]
;
then
case
"
$cur
"
in
case
"
$cur
"
in
...
@@ -2930,6 +3186,9 @@ _git_submodule ()
...
@@ -2930,6 +3186,9 @@ _git_submodule ()
--force --rebase --merge --reference --depth --recursive --jobs
--force --rebase --merge --reference --depth --recursive --jobs
"
"
;;
;;
set-branch,--
*
)
__gitcomp
"--default --branch"
;;
summary,--
*
)
summary,--
*
)
__gitcomp
"--cached --files --summary-limit"
__gitcomp
"--cached --files --summary-limit"
;;
;;
...
@@ -2960,6 +3219,7 @@ _git_svn ()
...
@@ -2960,6 +3219,7 @@ _git_svn ()
--log-window-size= --no-checkout --quiet
--log-window-size= --no-checkout --quiet
--repack-flags --use-log-author --localtime
--repack-flags --use-log-author --localtime
--add-author-from
--add-author-from
--recursive
--ignore-paths= --include-paths=
$remote_opts
--ignore-paths= --include-paths=
$remote_opts
"
"
local
init_opts
=
"
local
init_opts
=
"
...
@@ -3045,7 +3305,7 @@ _git_tag ()
...
@@ -3045,7 +3305,7 @@ _git_tag ()
while
[
$c
-lt
$cword
]
;
do
while
[
$c
-lt
$cword
]
;
do
i
=
"
${
words
[c]
}
"
i
=
"
${
words
[c]
}
"
case
"
$i
"
in
case
"
$i
"
in
-d
|
-
v
)
-d
|
-
-delete
|
-v
|
--verify
)
__gitcomp_direct
"
$(
__git_tags
""
"
$cur
"
" "
)
"
__gitcomp_direct
"
$(
__git_tags
""
"
$cur
"
" "
)
"
return
return
;;
;;
...
@@ -3071,11 +3331,7 @@ _git_tag ()
...
@@ -3071,11 +3331,7 @@ _git_tag ()
case
"
$cur
"
in
case
"
$cur
"
in
--
*
)
--
*
)
__gitcomp
"
__gitcomp_builtin tag
--list --delete --verify --annotate --message --file
--sign --cleanup --local-user --force --column --sort=
--contains --no-contains --points-at --merged --no-merged --create-reflog
"
;;
;;
esac
esac
}
}
...
@@ -3085,29 +3341,128 @@ _git_whatchanged ()
...
@@ -3085,29 +3341,128 @@ _git_whatchanged ()
_git_log
_git_log
}
}
__git_complete_worktree_paths
()
{
local
IFS
=
$'
\n
'
__gitcomp_nl
"
$(
git worktree list
--porcelain
|
# Skip the first entry: it's the path of the main worktree,
# which can't be moved, removed, locked, etc.
sed
-n
-e
'2,$ s/^worktree //p'
)
"
}
_git_worktree
()
_git_worktree
()
{
{
local
subcommands
=
"add list lock prune unlock"
local
subcommands
=
"add list lock move prune remove unlock"
local
subcommand
=
"
$(
__git_find_on_cmdline
"
$subcommands
"
)
"
local
subcommand subcommand_idx
if
[
-z
"
$subcommand
"
]
;
then
subcommand
=
"
$(
__git_find_on_cmdline
--show-idx
"
$subcommands
"
)
"
subcommand_idx
=
"
${
subcommand
% *
}
"
subcommand
=
"
${
subcommand
#*
}
"
case
"
$subcommand
,
$cur
"
in
,
*
)
__gitcomp
"
$subcommands
"
__gitcomp
"
$subcommands
"
;;
*
,--
*
)
__gitcomp_builtin worktree_
$subcommand
;;
add,
*
)
# usage: git worktree add [<options>] <path> [<commit-ish>]
# Here we are not completing an --option, it's either the
# path or a ref.
case
"
$prev
"
in
-b
|
-B
)
# Complete refs for branch to be created/reseted.
__git_complete_refs
;;
-
*
)
# The previous word is an -o|--option without an
# unstuck argument: have to complete the path for
# the new worktree, so don't list anything, but let
# Bash fall back to filename completion.
;;
*
)
# The previous word is not an --option, so it must
# be either the 'add' subcommand, the unstuck
# argument of an option (e.g. branch for -b|-B), or
# the path for the new worktree.
if
[
$cword
-eq
$((
subcommand_idx+1
))
]
;
then
# Right after the 'add' subcommand: have to
# complete the path, so fall back to Bash
# filename completion.
:
else
else
case
"
$subcommand
,
$cur
"
in
case
"
${
words
[cword-2]
}
"
in
add,--
*
)
-b
|
-B
)
# After '-b <branch>': have to
__gitcomp
"--detach"
# complete the path, so fall back
# to Bash filename completion.
;;
;;
list,--
*
)
*
)
# After the path: have to complete
__gitcomp
"--porcelain"
# the ref to be checked out.
__git_complete_refs
;;
;;
lock,--
*
)
esac
__gitcomp
"--reason"
fi
;;
;;
prune,--
*
)
esac
__gitcomp
"--dry-run --expire --verbose"
;;
lock,
*
|
remove,
*
|
unlock,
*
)
__git_complete_worktree_paths
;;
move,
*
)
if
[
$cword
-eq
$((
subcommand_idx+1
))
]
;
then
# The first parameter must be an existing working
# tree to be moved.
__git_complete_worktree_paths
else
# The second parameter is the destination: it could
# be any path, so don't list anything, but let Bash
# fall back to filename completion.
:
fi
;;
esac
}
__git_complete_common
()
{
local command
=
"
$1
"
case
"
$cur
"
in
--
*
)
__gitcomp_builtin
"
$command
"
;;
esac
}
__git_cmds_with_parseopt_helper
=
__git_support_parseopt_helper
()
{
test
-n
"
$__git_cmds_with_parseopt_helper
"
||
__git_cmds_with_parseopt_helper
=
"
$(
__git
--list-cmds
=
parseopt
)
"
case
"
$__git_cmds_with_parseopt_helper
"
in
*
"
$1
"
*
)
return
0
;;
;;
*
)
*
)
return
1
;;
;;
esac
esac
}
__git_complete_command
()
{
local command
=
"
$1
"
local
completion_func
=
"_git_
${
command
//-/_
}
"
if
!
declare
-f
$completion_func
>
/dev/null 2>/dev/null
&&
declare
-f
_completion_loader
>
/dev/null 2>/dev/null
then
_completion_loader
"git-
$command
"
fi
if
declare
-f
$completion_func
>
/dev/null 2>/dev/null
then
$completion_func
return
0
elif
__git_support_parseopt_helper
"
$command
"
then
__git_complete_common
"
$command
"
return
0
else
return
1
fi
fi
}
}
...
@@ -3134,14 +3489,18 @@ __git_main ()
...
@@ -3134,14 +3489,18 @@ __git_main ()
((
c++
))
((
c++
))
done
done
if
[
-z
"
$command
"
]
;
then
if
[
-z
"
$
{
command
-
}
"
]
;
then
case
"
$prev
"
in
case
"
$prev
"
in
--git-dir
|
-C
|
--work-tree
)
--git-dir
|
-C
|
--work-tree
)
# these need a path argument, let's fall back to
# these need a path argument, let's fall back to
# Bash filename completion
# Bash filename completion
return
return
;;
;;
-c
|
--namespace
)
-c
)
__git_complete_config_variable_name_and_value
return
;;
--namespace
)
# we don't support completing these options' arguments
# we don't support completing these options' arguments
return
return
;;
;;
...
@@ -3164,20 +3523,24 @@ __git_main ()
...
@@ -3164,20 +3523,24 @@ __git_main ()
--help
--help
"
"
;;
;;
*
)
__git_compute_porcelain_commands
*
)
__gitcomp
"
$__git_porcelain_commands
$(
__git_aliases
)
"
;;
if
test
-n
"
${
GIT_TESTING_PORCELAIN_COMMAND_LIST
-
}
"
then
__gitcomp
"
$GIT_TESTING_PORCELAIN_COMMAND_LIST
"
else
__gitcomp
"
$(
__git
--list-cmds
=
list-mainporcelain,others,nohelpers,alias,list-complete,config
)
"
fi
;;
esac
esac
return
return
fi
fi
local
completion_func
=
"_git_
${
command
//-/_
}
"
__git_complete_command
"
$command
"
&&
return
declare
-f
$completion_func
>
/dev/null 2>/dev/null
&&
$completion_func
&&
return
local
expansion
=
$(
__git_aliased_command
"
$command
"
)
local
expansion
=
$(
__git_aliased_command
"
$command
"
)
if
[
-n
"
$expansion
"
]
;
then
if
[
-n
"
$expansion
"
]
;
then
words[1]
=
$expansion
words[1]
=
$expansion
completion_func
=
"_git_
${
expansion
//-/_
}
"
__git_complete_command
"
$expansion
"
declare
-f
$completion_func
>
/dev/null 2>/dev/null
&&
$completion_func
fi
fi
}
}
...
@@ -3205,76 +3568,8 @@ __gitk_main ()
...
@@ -3205,76 +3568,8 @@ __gitk_main ()
__git_complete_revlist
__git_complete_revlist
}
}
if
[[
-n
${
ZSH_VERSION
-
}
]]
;
then
if
[[
-n
${
ZSH_VERSION
-
}
&&
-z
${
GIT_SOURCING_ZSH_COMPLETION
-
}
]]
;
then
echo
"WARNING: this script is deprecated, please see git-completion.zsh"
1>&2
echo
"ERROR: this script is obsolete, please see git-completion.zsh"
1>&2
autoload
-U
+X compinit
&&
compinit
__gitcomp
()
{
emulate
-L
zsh
local
cur_
=
"
${
3
-
$cur
}
"
case
"
$cur_
"
in
--
*
=
)
;;
*
)
local
c
IFS
=
$'
\t\n
'
local
-a
array
for
c
in
${
=1
}
;
do
c
=
"
$c
${
4
-
}
"
case
$c
in
--
*
=
*
|
*
.
)
;;
*
)
c
=
"
$c
"
;;
esac
array[
${#
array
[@]
}
+1]
=
"
$c
"
done
compset
-P
'*[=:]'
compadd
-Q
-S
''
-p
"
${
2
-
}
"
-a
--
array
&&
_ret
=
0
;;
esac
}
__gitcomp_direct
()
{
emulate
-L
zsh
local
IFS
=
$'
\n
'
compset
-P
'*[=:]'
compadd
-Q
--
${
=1
}
&&
_ret
=
0
}
__gitcomp_nl
()
{
emulate
-L
zsh
local
IFS
=
$'
\n
'
compset
-P
'*[=:]'
compadd
-Q
-S
"
${
4
-
}
"
-p
"
${
2
-
}
"
--
${
=1
}
&&
_ret
=
0
}
__gitcomp_file
()
{
emulate
-L
zsh
local
IFS
=
$'
\n
'
compset
-P
'*[=:]'
compadd
-Q
-p
"
${
2
-
}
"
-f
--
${
=1
}
&&
_ret
=
0
}
_git
()
{
local
_ret
=
1 cur cword prev
cur
=
${
words
[CURRENT]
}
prev
=
${
words
[CURRENT-1]
}
let
cword
=
CURRENT-1
emulate ksh
-c
__
${
service
}
_main
let
_ret
&&
_default
&&
_ret
=
0
return
_ret
}
compdef _git git gitk
return
return
fi
fi
...
@@ -3290,23 +3585,50 @@ __git_func_wrap ()
...
@@ -3290,23 +3585,50 @@ __git_func_wrap ()
# This is NOT a public function; use at your own risk.
# This is NOT a public function; use at your own risk.
__git_complete
()
__git_complete
()
{
{
test
-n
"
$ZSH_VERSION
"
&&
return
local
wrapper
=
"__git_wrap
${
2
}
"
local
wrapper
=
"__git_wrap
${
2
}
"
eval
"
$wrapper
() { __git_func_wrap
$2
; }"
eval
"
$wrapper
() { __git_func_wrap
$2
; }"
complete
-o
bashdefault
-o
default
-o
nospace
-F
$wrapper
$1
2>/dev/null
\
complete
-o
bashdefault
-o
default
-o
nospace
-F
$wrapper
$1
2>/dev/null
\
||
complete
-o
default
-o
nospace
-F
$wrapper
$1
||
complete
-o
default
-o
nospace
-F
$wrapper
$1
}
}
# wrapper for backwards compatibility
if
!
git
--list-cmds
=
main
>
/dev/null 2>&1
;
then
_git
()
{
__git_wrap__git_main
}
# wrapper for backwards compatibility
declare
-A
__git_cmds
_gitk
()
__git_cmds[list-complete]
=
"apply blame cherry config difftool fsck help instaweb mergetool prune reflog remote repack replace request-pull send-email show-branch stage whatchanged"
{
__git_cmds[list-guide]
=
"attributes cli core-tutorial credentials cvs-migration diffcore everyday faq glossary hooks ignore modules namespaces remote-helpers repository-layout revisions submodules tutorial-2 tutorial workflows"
__git_wrap__gitk_main
__git_cmds[list-mainporcelain]
=
"add am archive bisect branch bundle checkout cherry-pick citool clean clone commit describe diff fetch format-patch gc grep gui init gitk log maintenance merge mv notes pull push range-diff rebase reset restore revert rm shortlog show sparse-checkout stash status submodule switch tag worktree"
}
__git_cmds[main]
=
"add add--interactive am annotate apply archimport archive bisect bisect--helper blame branch bugreport bundle cat-file check-attr check-ignore check-mailmap check-ref-format checkout checkout-index cherry cherry-pick citool clean clone column commit commit-graph commit-tree config count-objects credential credential-cache credential-cache--daemon credential-gnome-keyring credential-libsecret credential-store cvsexportcommit cvsimport cvsserver daemon describe diff diff-files diff-index diff-tree difftool difftool--helper env--helper fast-export fast-import fetch fetch-pack filter-branch fmt-merge-msg for-each-ref format-patch fsck fsck-objects gc get-tar-commit-id grep gui gui--askpass hash-object help http-backend http-fetch http-push imap-send index-pack init init-db instaweb interpret-trailers log ls-files ls-remote ls-tree mailinfo mailsplit maintenance merge merge-base merge-file merge-index merge-octopus merge-one-file merge-ours merge-recursive merge-recursive-ours merge-recursive-theirs merge-resolve merge-subtree merge-tree mergetool mktag mktree multi-pack-index mv mw name-rev notes p4 pack-objects pack-redundant pack-refs patch-id pickaxe prune prune-packed pull push quiltimport range-diff read-tree rebase rebase--interactive receive-pack reflog remote remote-ext remote-fd remote-ftp remote-ftps remote-http remote-https remote-mediawiki repack replace request-pull rerere reset restore rev-list rev-parse revert rm send-email send-pack sh-i18n--envsubst shell shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace submodule submodule--helper subtree svn switch symbolic-ref tag unpack-file unpack-objects update-index update-ref update-server-info upload-archive upload-archive--writer upload-pack var verify-commit verify-pack verify-tag version web--browse whatchanged worktree write-tree"
__git_cmds[others]
=
"compare reintegrate related remote-hg remote-sync send-series smartlist"
__git_cmds[parseopt]
=
"add am apply archive bisect--helper blame branch bugreport cat-file check-attr check-ignore check-mailmap checkout checkout-index cherry cherry-pick clean clone column commit commit-graph config count-objects credential-cache credential-cache--daemon credential-store describe difftool env--helper fast-export fetch fmt-merge-msg for-each-ref format-patch fsck fsck-objects gc grep hash-object help init init-db interpret-trailers log ls-files ls-remote ls-tree merge merge-base merge-file mktree multi-pack-index mv name-rev notes pack-objects pack-refs pickaxe prune prune-packed pull push range-diff read-tree rebase rebase--interactive receive-pack reflog remote repack replace rerere reset restore revert rm send-pack shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace switch symbolic-ref tag update-index update-ref update-server-info upload-pack verify-commit verify-pack verify-tag version whatchanged write-tree "
# Override __git
__git
()
{
case
"
$1
"
in
--list-cmds
=
*
)
IFS
=
,
read
-r
-a
cmds
<<<
"
${
1
##--list-cmds=
}
"
for
x
in
${
cmds
[@]
}
;
do
case
"
$x
"
in
nohelpers
)
;;
alias
)
;;
config
)
;;
*
)
echo
${
__git_cmds
[
$x
]
}
;;
esac
done
return
;;
esac
git
${
__git_C_args
:+
"
${
__git_C_args
[@]
}
"
}
\
${
__git_dir
:+--git-dir
=
"
$__git_dir
"
}
"
$@
"
2>/dev/null
}
fi
__git_complete git __git_main
__git_complete git __git_main
__git_complete gitk __gitk_main
__git_complete gitk __gitk_main
...
@@ -3315,6 +3637,6 @@ __git_complete gitk __gitk_main
...
@@ -3315,6 +3637,6 @@ __git_complete gitk __gitk_main
# when the user has tab-completed the executable name and consequently
# when the user has tab-completed the executable name and consequently
# included the '.exe' suffix.
# included the '.exe' suffix.
#
#
if
[
[
"
$OSTYPE
"
=
cygwin
*
]
]
;
then
if
[
"
$OSTYPE
"
=
cygwin
]
;
then
__git_complete git.exe __git_main
__git_complete git.exe __git_main
fi
fi
plugins/gitfast/git-prompt.sh
View file @
a32564e0
...
@@ -70,6 +70,15 @@
...
@@ -70,6 +70,15 @@
# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
# is SP.
# is SP.
#
#
# When there is an in-progress operation such as a merge, rebase,
# revert, cherry-pick, or bisect, the prompt will include information
# related to the operation, often in the form "|<OPERATION-NAME>".
#
# When the repository has a sparse-checkout, a notification of the form
# "|SPARSE" will be included in the prompt. This can be shortened to a
# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
# by setting GIT_PS1_OMITSPARSESTATE.
#
# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
# find one, or @{upstream} otherwise. Once you have set
# find one, or @{upstream} otherwise. Once you have set
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
...
@@ -88,7 +97,8 @@
...
@@ -88,7 +97,8 @@
# If you would like a colored hint about the current dirty state, set
# If you would like a colored hint about the current dirty state, set
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# the colored output of "git status -sb" and are available only when
# the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd.
# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
# but always available in Zsh.
#
#
# If you would like __git_ps1 to do nothing in the case when the current
# If you would like __git_ps1 to do nothing in the case when the current
# directory is set up to be ignored by git, then set
# directory is set up to be ignored by git, then set
...
@@ -286,6 +296,37 @@ __git_eread ()
...
@@ -286,6 +296,37 @@ __git_eread ()
test
-r
"
$1
"
&&
IFS
=
$'
\r\n
'
read
"
$2
"
<
"
$1
"
test
-r
"
$1
"
&&
IFS
=
$'
\r\n
'
read
"
$2
"
<
"
$1
"
}
}
# see if a cherry-pick or revert is in progress, if the user has committed a
# conflict resolution with 'git commit' in the middle of a sequence of picks or
# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
# the todo file.
__git_sequencer_status
()
{
local
todo
if
test
-f
"
$g
/CHERRY_PICK_HEAD"
then
r
=
"|CHERRY-PICKING"
return
0
;
elif
test
-f
"
$g
/REVERT_HEAD"
then
r
=
"|REVERTING"
return
0
;
elif
__git_eread
"
$g
/sequencer/todo"
todo
then
case
"
$todo
"
in
p[
\ \
]
|
pick[
\ \
]
*
)
r
=
"|CHERRY-PICKING"
return
0
;;
revert[
\ \
]
*
)
r
=
"|REVERTING"
return
0
;;
esac
fi
return
1
}
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
# when called from PS1 using command substitution
# when called from PS1 using command substitution
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
...
@@ -390,6 +431,13 @@ __git_ps1 ()
...
@@ -390,6 +431,13 @@ __git_ps1 ()
return
$exit
return
$exit
fi
fi
local
sparse
=
""
if
[
-z
"
${
GIT_PS1_COMPRESSSPARSESTATE
}
"
]
&&
[
-z
"
${
GIT_PS1_OMITSPARSESTATE
}
"
]
&&
[
"
$(
git config
--bool
core.sparseCheckout
)
"
=
"true"
]
;
then
sparse
=
"|SPARSE"
fi
local
r
=
""
local
r
=
""
local
b
=
""
local
b
=
""
local
step
=
""
local
step
=
""
...
@@ -398,11 +446,7 @@ __git_ps1 ()
...
@@ -398,11 +446,7 @@ __git_ps1 ()
__git_eread
"
$g
/rebase-merge/head-name"
b
__git_eread
"
$g
/rebase-merge/head-name"
b
__git_eread
"
$g
/rebase-merge/msgnum"
step
__git_eread
"
$g
/rebase-merge/msgnum"
step
__git_eread
"
$g
/rebase-merge/end"
total
__git_eread
"
$g
/rebase-merge/end"
total
if
[
-f
"
$g
/rebase-merge/interactive"
]
;
then
r
=
"|REBASE"
r
=
"|REBASE-i"
else
r
=
"|REBASE-m"
fi
else
else
if
[
-d
"
$g
/rebase-apply"
]
;
then
if
[
-d
"
$g
/rebase-apply"
]
;
then
__git_eread
"
$g
/rebase-apply/next"
step
__git_eread
"
$g
/rebase-apply/next"
step
...
@@ -417,10 +461,8 @@ __git_ps1 ()
...
@@ -417,10 +461,8 @@ __git_ps1 ()
fi
fi
elif
[
-f
"
$g
/MERGE_HEAD"
]
;
then
elif
[
-f
"
$g
/MERGE_HEAD"
]
;
then
r
=
"|MERGING"
r
=
"|MERGING"
elif
[
-f
"
$g
/CHERRY_PICK_HEAD"
]
;
then
elif
__git_sequencer_status
;
then
r
=
"|CHERRY-PICKING"
:
elif
[
-f
"
$g
/REVERT_HEAD"
]
;
then
r
=
"|REVERTING"
elif
[
-f
"
$g
/BISECT_LOG"
]
;
then
elif
[
-f
"
$g
/BISECT_LOG"
]
;
then
r
=
"|BISECTING"
r
=
"|BISECTING"
fi
fi
...
@@ -467,6 +509,7 @@ __git_ps1 ()
...
@@ -467,6 +509,7 @@ __git_ps1 ()
local
i
=
""
local
i
=
""
local
s
=
""
local
s
=
""
local
u
=
""
local
u
=
""
local
h
=
""
local
c
=
""
local
c
=
""
local
p
=
""
local
p
=
""
...
@@ -499,6 +542,11 @@ __git_ps1 ()
...
@@ -499,6 +542,11 @@ __git_ps1 ()
u
=
"%
${
ZSH_VERSION
+%
}
"
u
=
"%
${
ZSH_VERSION
+%
}
"
fi
fi
if
[
-n
"
${
GIT_PS1_COMPRESSSPARSESTATE
}
"
]
&&
[
"
$(
git config
--bool
core.sparseCheckout
)
"
=
"true"
]
;
then
h
=
"?"
fi
if
[
-n
"
${
GIT_PS1_SHOWUPSTREAM
-
}
"
]
;
then
if
[
-n
"
${
GIT_PS1_SHOWUPSTREAM
-
}
"
]
;
then
__git_ps1_show_upstream
__git_ps1_show_upstream
fi
fi
...
@@ -519,8 +567,8 @@ __git_ps1 ()
...
@@ -519,8 +567,8 @@ __git_ps1 ()
b
=
"
\$
{__git_ps1_branch_name}"
b
=
"
\$
{__git_ps1_branch_name}"
fi
fi
local
f
=
"
$w$i$s$u
"
local
f
=
"
$
h$
w$i$s$u
"
local
gitstring
=
"
$c$b
${
f
:+
$z$f
}
$r$p
"
local
gitstring
=
"
$c$b
${
f
:+
$z$f
}$
{
sparse
}
$
r$p
"
if
[
$pcmode
=
yes
]
;
then
if
[
$pcmode
=
yes
]
;
then
if
[
"
${
__git_printf_supports_v
-
}
"
!=
yes
]
;
then
if
[
"
${
__git_printf_supports_v
-
}
"
!=
yes
]
;
then
...
...
plugins/gitfast/update
View file @
a32564e0
#!/bin/sh
#!/bin/sh
url
=
"https://
git.kernel.org/pub/scm/git/git.git/plain/contrib/
completion"
url
=
"https://
raw.githubusercontent.com/felipec/git-
completion"
version
=
"
2.16
.0"
version
=
"
1
.0"
curl
-s
-o
_git
"
${
url
}
/git-completion.zsh?h=v
${
version
}
"
&&
curl
-s
-o
_git
"
${
url
}
/v
${
version
}
/git-completion.zsh"
&&
curl
-s
-o
git-completion.bash
"
${
url
}
/git-completion.bash?h=v
${
version
}
"
&&
curl
-s
-o
git-completion.bash
"
${
url
}
/v
${
version
}
/git-completion.bash"
&&
curl
-s
-o
git-prompt.sh
"
${
url
}
/git-prompt.sh?h=v
${
version
}
"
&&
curl
-s
-o
git-prompt.sh
"
${
url
}
/v
${
version
}
/git-prompt.sh"
git apply updates.patch
plugins/gitfast/updates.patch
deleted
100644 → 0
View file @
3b1699b5
diff --git b/plugins/gitfast/_git a/plugins/gitfast/_git
index e2554130..a2e3bef5 100644
--- b/plugins/gitfast/_git
+++ a/plugins/gitfast/_git
@@ -30,7 +30,7 @@
if [ -z "$script" ]; then
local -a locations
local e
locations=(
- $(dirname ${funcsourcetrace[1]%:*})/git-completion.bash
+ "$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
'/etc/bash_completion.d/git' # fedora, old debian
'/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
'/usr/share/bash-completion/git' # gentoo
@@ -214,8 +214,10 @@
_git ()
if (( $+functions[__${service}_zsh_main] )); then
__${service}_zsh_main
- else
+ elif (( $+functions[__${service}_main] )); then
emulate ksh -c __${service}_main
+ elif (( $+functions[_${service}] )); then
+ emulate ksh -c _${service}
fi
let _ret && _default && _ret=0
diff --git b/plugins/gitfast/git-completion.bash a/plugins/gitfast/git-completion.bash
index 9c8f7380..14012cab 100644
--- b/plugins/gitfast/git-completion.bash
+++ a/plugins/gitfast/git-completion.bash
@@ -2915,6 +2915,6 @@
__git_complete gitk __gitk_main
# when the user has tab-completed the executable name and consequently
# included the '.exe' suffix.
#
-if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
+if [[ "$OSTYPE" = cygwin* ]]; then
__git_complete git.exe __git_main
fi
diff --git b/plugins/gitfast/git-prompt.sh a/plugins/gitfast/git-prompt.sh
index 97eacd78..c1de34eb 100644
--- b/plugins/gitfast/git-prompt.sh
+++ a/plugins/gitfast/git-prompt.sh
@@ -502,9 +502,11 @@
__git_ps1 ()
local z="${GIT_PS1_STATESEPARATOR-" "}"
- # NO color option unless in PROMPT_COMMAND mode
- if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
- __git_ps1_colorize_gitstring
+ # NO color option unless in PROMPT_COMMAND mode or it's Zsh
+ if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+ if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
+ __git_ps1_colorize_gitstring
+ fi
fi
b=${b##refs/heads/}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment