@ -280,6 +280,39 @@ __gitcomp ()
@@ -280,6 +280,39 @@ __gitcomp ()
esac
}
# This function is equivalent to
#
# __gitcomp "$(git xxx --git-completion-helper) ..."
#
# except that the output is cached. Accept 1-3 arguments:
# 1: the git command to execute, this is also the cache key
# 2: extra options to be added on top (e.g. negative forms)
# 3: options to be excluded
__gitcomp_builtin ()
{
# spaces must be replaced with underscore for multi-word
# commands, e.g. "git remote add" becomes remote_add.
local cmd="$1"
local incl="$2"
local excl="$3"
local var=__gitcomp_builtin_"${cmd/-/_}"
local options
eval "options=\$$var"
if [ -z "$options" ]; then
# leading and trailing spaces are significant to make
# option removal work correctly.
options=" $(__git ${cmd/_/ } --git-completion-helper) $incl "
for i in $excl; do
options="${options/ $i / }"
done
eval "$var=\"$options\""
fi
__gitcomp "$options"
}
# Variation of __gitcomp_nl () that appends to the existing list of
# completion candidates, COMPREPLY.
__gitcomp_nl_append ()
@ -1072,12 +1105,13 @@ __git_count_arguments ()
@@ -1072,12 +1105,13 @@ __git_count_arguments ()
}
__git_whitespacelist="nowarn warn error error-all fix"
__git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
_git_am ()
{
__git_find_repo_path
if [ -d "$__git_repo_path"/rebase-apply ]; then
__gitcomp "--skip --continue --resolved --abort --quit --show-current-patch"
__gitcomp "$__git_am_inprogress_options"
return
fi
case "$cur" in
@ -1086,12 +1120,8 @@ _git_am ()
@@ -1086,12 +1120,8 @@ _git_am ()
return
;;
--*)
__gitcomp "
--3way --committer-date-is-author-date --ignore-date
--ignore-whitespace --ignore-space-change
--interactive --keep --no-utf8 --signoff --utf8
--whitespace= --scissors
"
__gitcomp_builtin am "--no-utf8" \
"$__git_am_inprogress_options"
return
esac
}
@ -1104,14 +1134,7 @@ _git_apply ()
@@ -1104,14 +1134,7 @@ _git_apply ()
return
;;
--*)
__gitcomp "
--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=
"
__gitcomp_builtin apply
return
esac
}
@ -1120,10 +1143,7 @@ _git_add ()
@@ -1120,10 +1143,7 @@ _git_add ()
{
case "$cur" in
--*)
__gitcomp "
--interactive --refresh --patch --update --dry-run
--ignore-errors --intent-to-add --force --edit --chmod=
"
__gitcomp_builtin add
return
esac
@ -1200,12 +1220,8 @@ _git_branch ()
@@ -1200,12 +1220,8 @@ _git_branch ()
__git_complete_refs --cur="${cur##--set-upstream-to=}"
;;
--*)
__gitcomp "
--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
__gitcomp_builtin branch "--no-color --no-abbrev
--no-track --no-column
"
;;
*)
@ -1247,11 +1263,7 @@ _git_checkout ()
@@ -1247,11 +1263,7 @@ _git_checkout ()
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
;;
--*)
__gitcomp "
--quiet --ours --theirs --track --no-track --merge
--conflict= --orphan --patch --detach --ignore-skip-worktree-bits
--recurse-submodules --no-recurse-submodules
"
__gitcomp_builtin checkout "--no-track --no-recurse-submodules"
;;
*)
# check if --track, --no-track, or --no-guess was specified
@ -1271,16 +1283,19 @@ _git_cherry ()
@@ -1271,16 +1283,19 @@ _git_cherry ()
__git_complete_refs
}
__git_cherry_pick_inprogress_options="--continue --quit --abort"
_git_cherry_pick ()
{
__git_find_repo_path
if [ -f "$__git_repo_path"/CHERRY_PICK_HEAD ]; then
__gitcomp "--continue --quit --abort"
__gitcomp "$__git_cherry_pick_inprogress_options"
return
fi
case "$cur" in
--*)
__gitcomp "--edit --no-commit --signoff --strategy= --mainline"
__gitcomp_builtin cherry-pick "" \
"$__git_cherry_pick_inprogress_options"
;;
*)
__git_complete_refs
@ -1292,7 +1307,7 @@ _git_clean ()
@@ -1292,7 +1307,7 @@ _git_clean ()
{
case "$cur" in
--*)
__gitcomp "--dry-run --quiet"
__gitcomp_builtin clean
return
;;
esac
@ -1305,26 +1320,7 @@ _git_clone ()
@@ -1305,26 +1320,7 @@ _git_clone ()
{
case "$cur" in
--*)
__gitcomp "
--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
"
__gitcomp_builtin clone "--no-single-branch"
return
;;
esac
@ -1357,16 +1353,7 @@ _git_commit ()
@@ -1357,16 +1353,7 @@ _git_commit ()
return
;;
--*)
__gitcomp "
--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
"
__gitcomp_builtin commit "--no-edit --verify"
return
esac
@ -1382,11 +1369,7 @@ _git_describe ()
@@ -1382,11 +1369,7 @@ _git_describe ()
{
case "$cur" in
--*)
__gitcomp "
--all --tags --contains --abbrev= --candidates=
--exact-match --debug --long --match --always --first-parent
--exclude --dirty --broken
"
__gitcomp_builtin describe
return
esac
__git_complete_refs
@ -1411,7 +1394,7 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
@@ -1411,7 +1394,7 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--dirstat --dirstat= --dirstat-by-file
--dirstat-by-file= --cumulative
--diff-algorithm=
--submodule --submodule=
--submodule --submodule= --ignore-submodules
"
_git_diff ()
@ -1452,11 +1435,11 @@ _git_difftool ()
@@ -1452,11 +1435,11 @@ _git_difftool ()
return
;;
--*)
__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
--base --ours --theirs
--no-renames --diff-filter= --find-copies-harder
--relative --ignore-submodules
--tool="
__gitcomp_builtin difftool "$__git_diff_common_options
--base --cached --ours --theirs
--pickaxe-all --pickaxe-regex
--relative --staged
"
return
;;
esac
@ -1465,12 +1448,6 @@ _git_difftool ()
@@ -1465,12 +1448,6 @@ _git_difftool ()
__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 --prune-tags
"
_git_fetch ()
{
case "$cur" in
@ -1479,7 +1456,7 @@ _git_fetch ()
@@ -1479,7 +1456,7 @@ _git_fetch ()
return
;;
--*)
__gitcomp "$__git_fetch_options"
__gitcomp_builtin fetch "--no-tags"
return
;;
esac
@ -1516,10 +1493,7 @@ _git_fsck ()
@@ -1516,10 +1493,7 @@ _git_fsck ()
{
case "$cur" in
--*)
__gitcomp "
--tags --root --unreachable --cache --no-reflogs --full
--strict --verbose --lost-found --name-objects
"
__gitcomp_builtin fsck "--no-reflogs"
return
;;
esac
@ -1529,7 +1503,7 @@ _git_gc ()
@@ -1529,7 +1503,7 @@ _git_gc ()
{
case "$cur" in
--*)
__gitcomp "--prune --aggressive"
__gitcomp_builtin gc
return
;;
esac
@ -1585,21 +1559,7 @@ _git_grep ()
@@ -1585,21 +1559,7 @@ _git_grep ()
case "$cur" in
--*)
__gitcomp "
--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
"
__gitcomp_builtin grep
return
;;
esac
@ -1617,7 +1577,7 @@ _git_help ()
@@ -1617,7 +1577,7 @@ _git_help ()
{
case "$cur" in
--*)
__gitcomp "--all --guides --info --man --web"
__gitcomp_builtin help
return
;;
esac
@ -1640,7 +1600,7 @@ _git_init ()
@@ -1640,7 +1600,7 @@ _git_init ()
return
;;
--*)
__gitcomp "--quiet --bare --template= --shared --shared="
__gitcomp_builtin init
return
;;
esac
@ -1650,13 +1610,7 @@ _git_ls_files ()
@@ -1650,13 +1610,7 @@ _git_ls_files ()
{
case "$cur" in
--*)
__gitcomp "--cached --deleted --modified --others --ignored
--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
"
__gitcomp_builtin ls-files "--no-empty-directory"
return
;;
esac
@ -1670,7 +1624,7 @@ _git_ls_remote ()
@@ -1670,7 +1624,7 @@ _git_ls_remote ()
{
case "$cur" in
--*)
__gitcomp "--heads --tags --refs --get-url --symref"
__gitcomp_builtin ls-remote
return
;;
esac
@ -1794,22 +1748,18 @@ _git_log ()
@@ -1794,22 +1748,18 @@ _git_log ()
__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_complete_strategy && return
case "$cur" in
--*)
__gitcomp "$__git_merge_options
--rerere-autoupdate --no-rerere-autoupdate --abort --continue"
__gitcomp_builtin merge "--no-rerere-autoupdate
--no-commit --no-edit --no-ff
--no-log --no-progress
--no-squash --no-stat
--no-verify-signatures
"
return
esac
__git_complete_refs
@ -1833,7 +1783,7 @@ _git_merge_base ()
@@ -1833,7 +1783,7 @@ _git_merge_base ()
{
case "$cur" in
--*)
__gitcomp "--octopus --independent --is-ancestor --fork-point"
__gitcomp_builtin merge-base
return
;;
esac
@ -1844,7 +1794,7 @@ _git_mv ()
@@ -1844,7 +1794,7 @@ _git_mv ()
{
case "$cur" in
--*)
__gitcomp "--dry-run"
__gitcomp_builtin mv
return
;;
esac
@ -1860,17 +1810,17 @@ _git_mv ()
@@ -1860,17 +1810,17 @@ _git_mv ()
_git_name_rev ()
{
__gitcomp "--tags --all --stdin"
__gitcomp_builtin name-rev
}
_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")"
case "$subcommand,$cur" in
,--*)
__gitcomp '--ref'
__gitcomp_builtin notes
;;
,*)
case "$prev" in
@ -1882,21 +1832,14 @@ _git_notes ()
@@ -1882,21 +1832,14 @@ _git_notes ()
;;
esac
;;
add,--reuse-message=*|append,--reuse-message=*|\
add,--reedit-message=*|append,--reedit-message=*)
*,--reuse-message=*|*,--reedit-message=*)
__git_complete_refs --cur="${cur#*=}"
;;
add,--*|append,--*)
__gitcomp '--file= --message= --reedit-message=
--reuse-message='
*,--*)
__gitcomp_builtin notes_$subcommand
;;
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
@ -1920,12 +1863,11 @@ _git_pull ()
@@ -1920,12 +1863,11 @@ _git_pull ()
return
;;
--*)
__gitcomp "
--rebase --no-rebase
--autostash --no-autostash
$__git_merge_options
$__git_fetch_options
"
__gitcomp_builtin pull "--no-autostash --no-commit --no-edit
--no-ff --no-log --no-progress --no-rebase
--no-squash --no-stat --no-tags
--no-verify-signatures"
return
;;
esac
@ -1976,12 +1918,7 @@ _git_push ()
@@ -1976,12 +1918,7 @@ _git_push ()
return
;;
--*)
__gitcomp "
--all --mirror --tags --dry-run --force --verbose
--quiet --prune --delete --follow-tags
--receive-pack= --repo= --set-upstream
--force-with-lease --force-with-lease= --recurse-submodules=
"
__gitcomp_builtin push
return
;;
esac
@ -2016,6 +1953,7 @@ _git_rebase ()
@@ -2016,6 +1953,7 @@ _git_rebase ()
--autostash --no-autostash
--verify --no-verify
--keep-empty --root --force-rebase --no-ff
--rerere-autoupdate
--exec
"
@ -2119,11 +2057,7 @@ _git_status ()
@@ -2119,11 +2057,7 @@ _git_status ()
return
;;
--*)
__gitcomp "
--short --branch --porcelain --long --verbose
--untracked-files= --ignore-submodules= --ignored
--column= --no-column
"
__gitcomp_builtin status "--no-column"
return
;;
esac
@ -2265,14 +2199,7 @@ _git_config ()
@@ -2265,14 +2199,7 @@ _git_config ()
esac
case "$cur" in
--*)
__gitcomp "
--system --global --local --file=
--list --replace-all
--get --get-all --get-regexp
--add --unset --unset-all
--remove-section --rename-section
--name-only
"
__gitcomp_builtin config
return
;;
branch.*.*)
@ -2672,7 +2599,7 @@ _git_remote ()
@@ -2672,7 +2599,7 @@ _git_remote ()
if [ -z "$subcommand" ]; then
case "$cur" in
--*)
__gitcomp "--verbose"
__gitcomp_builtin remote
;;
*)
__gitcomp "$subcommands"
@ -2683,33 +2610,33 @@ _git_remote ()
@@ -2683,33 +2610,33 @@ _git_remote ()
case "$subcommand,$cur" in
add,--*)
__gitcomp "--track --master --fetch --tags --no-tags --mirror="
__gitcomp_builtin remote_add "--no-tags"
;;
add,*)
;;
set-head,--*)
__gitcomp "--auto --delete"
__gitcomp_builtin remote_set-head
;;
set-branches,--*)
__gitcomp "--add"
__gitcomp_builtin remote_set-branches
;;
set-head,*|set-branches,*)
__git_complete_remote_or_refspec
;;
update,--*)
__gitcomp "--prune"
__gitcomp_builtin remote_update
;;
update,*)
__gitcomp "$(__git_get_config_variables "remotes")"
;;
set-url,--*)
__gitcomp "--push --add --delete"
__gitcomp_builtin remote_set-url
;;
get-url,--*)
__gitcomp "--push --all"
__gitcomp_builtin remote_get-url
;;
prune,--*)
__gitcomp "--dry-run"
__gitcomp_builtin remote_prune
;;
*)
__gitcomp_nl "$(__git_remotes)"
@ -2721,7 +2648,7 @@ _git_replace ()
@@ -2721,7 +2648,7 @@ _git_replace ()
{
case "$cur" in
--*)
__gitcomp "--edit --graft --format= --list --delete"
__gitcomp_builtin replace
return
;;
esac
@ -2745,26 +2672,26 @@ _git_reset ()
@@ -2745,26 +2672,26 @@ _git_reset ()
case "$cur" in
--*)
__gitcomp "--merge --mixed --hard --soft --patch --keep"
__gitcomp_builtin reset
return
;;
esac
__git_complete_refs
}
__git_revert_inprogress_options="--continue --quit --abort"
_git_revert ()
{
__git_find_repo_path
if [ -f "$__git_repo_path"/REVERT_HEAD ]; then
__gitcomp "--continue --quit --abort"
__gitcomp "$__git_revert_inprogress_options"
return
fi
case "$cur" in
--*)
__gitcomp "
--edit --mainline --no-edit --no-commit --signoff
--strategy= --strategy-option=
"
__gitcomp_builtin revert "--no-edit" \
"$__git_revert_inprogress_options"
return
;;
esac
@ -2775,7 +2702,7 @@ _git_rm ()
@@ -2775,7 +2702,7 @@ _git_rm ()
{
case "$cur" in
--*)
__gitcomp "--cached --dry-run --ignore-unmatch --quiet"
__gitcomp_builtin rm
return
;;
esac
@ -2833,12 +2760,7 @@ _git_show_branch ()
@@ -2833,12 +2760,7 @@ _git_show_branch ()
{
case "$cur" in
--*)
__gitcomp "
--all --remotes --topo-order --date-order --current --more=
--list --independent --merge-base --no-name
--color --no-color
--sha1-name --sparse --topics --reflog
"
__gitcomp_builtin show-branch "--no-color"
return
;;
esac
@ -3071,11 +2993,7 @@ _git_tag ()
@@ -3071,11 +2993,7 @@ _git_tag ()
case "$cur" in
--*)
__gitcomp "
--list --delete --verify --annotate --message --file
--sign --cleanup --local-user --force --column --sort=
--contains --no-contains --points-at --merged --no-merged --create-reflog
"
__gitcomp_builtin tag
;;
esac
}
@ -3094,16 +3012,16 @@ _git_worktree ()
@@ -3094,16 +3012,16 @@ _git_worktree ()
else
case "$subcommand,$cur" in
add,--*)
__gitcomp "--detach"
__gitcomp_builtin worktree_add
;;
list,--*)
__gitcomp "--porcelain"
__gitcomp_builtin worktree_list
;;
lock,--*)
__gitcomp "--reason"
__gitcomp_builtin worktree_lock
;;
prune,--*)
__gitcomp "--dry-run --expire --verbose"
__gitcomp_builtin worktree_prune
;;
remove,--*)
__gitcomp "--force"