|
@@ -13,6 +13,7 @@
|
|
|
# *) .git/remotes file names
|
|
|
# *) git 'subcommands'
|
|
|
# *) tree paths within 'ref:path/to/file' expressions
|
|
|
+# *) file paths within current working directory and index
|
|
|
# *) common --long-options
|
|
|
#
|
|
|
# To use these routines:
|
|
@@ -23,10 +24,6 @@
|
|
|
# 3) Consider changing your PS1 to also show the current branch,
|
|
|
# see git-prompt.sh for details.
|
|
|
|
|
|
-if [[ -n ${ZSH_VERSION-} ]]; then
|
|
|
- autoload -U +X bashcompinit && bashcompinit
|
|
|
-fi
|
|
|
-
|
|
|
case "$COMP_WORDBREAKS" in
|
|
|
*:*) : great ;;
|
|
|
*) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
|
|
@@ -169,7 +166,6 @@ __git_reassemble_comp_words_by_ref()
|
|
|
}
|
|
|
|
|
|
if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
|
|
|
-if [[ -z ${ZSH_VERSION:+set} ]]; then
|
|
|
_get_comp_words_by_ref ()
|
|
|
{
|
|
|
local exclude cur_ words_ cword_
|
|
@@ -197,32 +193,6 @@ _get_comp_words_by_ref ()
|
|
|
shift
|
|
|
done
|
|
|
}
|
|
|
-else
|
|
|
-_get_comp_words_by_ref ()
|
|
|
-{
|
|
|
- while [ $# -gt 0 ]; do
|
|
|
- case "$1" in
|
|
|
- cur)
|
|
|
- cur=${COMP_WORDS[COMP_CWORD]}
|
|
|
- ;;
|
|
|
- prev)
|
|
|
- prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
- ;;
|
|
|
- words)
|
|
|
- words=("${COMP_WORDS[@]}")
|
|
|
- ;;
|
|
|
- cword)
|
|
|
- cword=$COMP_CWORD
|
|
|
- ;;
|
|
|
- -n)
|
|
|
- # assume COMP_WORDBREAKS is already set sanely
|
|
|
- shift
|
|
|
- ;;
|
|
|
- esac
|
|
|
- shift
|
|
|
- done
|
|
|
-}
|
|
|
-fi
|
|
|
fi
|
|
|
|
|
|
# Generates completion reply with compgen, appending a space to possible
|
|
@@ -264,6 +234,124 @@ __gitcomp_nl ()
|
|
|
COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
|
|
|
}
|
|
|
|
|
|
+# Generates completion reply with compgen from newline-separated possible
|
|
|
+# completion filenames.
|
|
|
+# It accepts 1 to 3 arguments:
|
|
|
+# 1: List of possible completion filenames, separated by a single newline.
|
|
|
+# 2: A directory prefix to be added to each possible completion filename
|
|
|
+# (optional).
|
|
|
+# 3: Generate possible completion matches for this word (optional).
|
|
|
+__gitcomp_file ()
|
|
|
+{
|
|
|
+ local IFS=$'\n'
|
|
|
+
|
|
|
+ # XXX does not work when the directory prefix contains a tilde,
|
|
|
+ # since tilde expansion is not applied.
|
|
|
+ # This means that COMPREPLY will be empty and Bash default
|
|
|
+ # completion will be used.
|
|
|
+ COMPREPLY=($(compgen -P "${2-}" -W "$1" -- "${3-$cur}"))
|
|
|
+
|
|
|
+ # Tell Bash that compspec generates filenames.
|
|
|
+ compopt -o filenames 2>/dev/null
|
|
|
+}
|
|
|
+
|
|
|
+__git_index_file_list_filter_compat ()
|
|
|
+{
|
|
|
+ local path
|
|
|
+
|
|
|
+ while read -r path; do
|
|
|
+ case "$path" in
|
|
|
+ ?*/*) echo "${path%%/*}/" ;;
|
|
|
+ *) echo "$path" ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+__git_index_file_list_filter_bash ()
|
|
|
+{
|
|
|
+ local path
|
|
|
+
|
|
|
+ while read -r path; do
|
|
|
+ case "$path" in
|
|
|
+ ?*/*)
|
|
|
+ # XXX if we append a slash to directory names when using
|
|
|
+ # `compopt -o filenames`, Bash will append another slash.
|
|
|
+ # This is pretty stupid, and this the reason why we have to
|
|
|
+ # define a compatible version for this function.
|
|
|
+ echo "${path%%/*}" ;;
|
|
|
+ *)
|
|
|
+ echo "$path" ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+# Process path list returned by "ls-files" and "diff-index --name-only"
|
|
|
+# commands, in order to list only file names relative to a specified
|
|
|
+# directory, and append a slash to directory names.
|
|
|
+__git_index_file_list_filter ()
|
|
|
+{
|
|
|
+ # Default to Bash >= 4.x
|
|
|
+ __git_index_file_list_filter_bash
|
|
|
+}
|
|
|
+
|
|
|
+# Execute git ls-files, returning paths relative to the directory
|
|
|
+# specified in the first argument, and using the options specified in
|
|
|
+# the second argument.
|
|
|
+__git_ls_files_helper ()
|
|
|
+{
|
|
|
+ (
|
|
|
+ test -n "${CDPATH+set}" && unset CDPATH
|
|
|
+ # NOTE: $2 is not quoted in order to support multiple options
|
|
|
+ cd "$1" && git ls-files --exclude-standard $2
|
|
|
+ ) 2>/dev/null
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+# Execute git diff-index, returning paths relative to the directory
|
|
|
+# specified in the first argument, and using the tree object id
|
|
|
+# specified in the second argument.
|
|
|
+__git_diff_index_helper ()
|
|
|
+{
|
|
|
+ (
|
|
|
+ test -n "${CDPATH+set}" && unset CDPATH
|
|
|
+ cd "$1" && git diff-index --name-only --relative "$2"
|
|
|
+ ) 2>/dev/null
|
|
|
+}
|
|
|
+
|
|
|
+# __git_index_files accepts 1 or 2 arguments:
|
|
|
+# 1: Options to pass to ls-files (required).
|
|
|
+# Supported options are --cached, --modified, --deleted, --others,
|
|
|
+# and --directory.
|
|
|
+# 2: A directory path (optional).
|
|
|
+# If provided, only files within the specified directory are listed.
|
|
|
+# Sub directories are never recursed. Path must have a trailing
|
|
|
+# slash.
|
|
|
+__git_index_files ()
|
|
|
+{
|
|
|
+ local dir="$(__gitdir)" root="${2-.}"
|
|
|
+
|
|
|
+ if [ -d "$dir" ]; then
|
|
|
+ __git_ls_files_helper "$root" "$1" | __git_index_file_list_filter |
|
|
|
+ sort | uniq
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# __git_diff_index_files accepts 1 or 2 arguments:
|
|
|
+# 1) The id of a tree object.
|
|
|
+# 2) A directory path (optional).
|
|
|
+# If provided, only files within the specified directory are listed.
|
|
|
+# Sub directories are never recursed. Path must have a trailing
|
|
|
+# slash.
|
|
|
+__git_diff_index_files ()
|
|
|
+{
|
|
|
+ local dir="$(__gitdir)" root="${2-.}"
|
|
|
+
|
|
|
+ if [ -d "$dir" ]; then
|
|
|
+ __git_diff_index_helper "$root" "$1" | __git_index_file_list_filter |
|
|
|
+ sort | uniq
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
__git_heads ()
|
|
|
{
|
|
|
local dir="$(__gitdir)"
|
|
@@ -321,7 +409,7 @@ __git_refs ()
|
|
|
if [[ "$ref" == "$cur"* ]]; then
|
|
|
echo "$ref"
|
|
|
fi
|
|
|
- done | uniq -u
|
|
|
+ done | sort | uniq -u
|
|
|
fi
|
|
|
return
|
|
|
fi
|
|
@@ -428,7 +516,7 @@ __git_complete_revlist_file ()
|
|
|
*) pfx="$ref:$pfx" ;;
|
|
|
esac
|
|
|
|
|
|
- __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
|
|
|
+ __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" 2>/dev/null \
|
|
|
| sed '/^100... blob /{
|
|
|
s,^.* ,,
|
|
|
s,$, ,
|
|
@@ -461,6 +549,46 @@ __git_complete_revlist_file ()
|
|
|
}
|
|
|
|
|
|
|
|
|
+# __git_complete_index_file requires 1 argument: the options to pass to
|
|
|
+# ls-file
|
|
|
+__git_complete_index_file ()
|
|
|
+{
|
|
|
+ local pfx cur_="$cur"
|
|
|
+
|
|
|
+ case "$cur_" in
|
|
|
+ ?*/*)
|
|
|
+ pfx="${cur_%/*}"
|
|
|
+ cur_="${cur_##*/}"
|
|
|
+ pfx="${pfx}/"
|
|
|
+
|
|
|
+ __gitcomp_file "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_"
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ __gitcomp_file "$(__git_index_files "$1")" "" "$cur_"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+}
|
|
|
+
|
|
|
+# __git_complete_diff_index_file requires 1 argument: the id of a tree
|
|
|
+# object
|
|
|
+__git_complete_diff_index_file ()
|
|
|
+{
|
|
|
+ local pfx cur_="$cur"
|
|
|
+
|
|
|
+ case "$cur_" in
|
|
|
+ ?*/*)
|
|
|
+ pfx="${cur_%/*}"
|
|
|
+ cur_="${cur_##*/}"
|
|
|
+ pfx="${pfx}/"
|
|
|
+
|
|
|
+ __gitcomp_file "$(__git_diff_index_files "$1" "$pfx")" "$pfx" "$cur_"
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ __gitcomp_file "$(__git_diff_index_files "$1")" "" "$cur_"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+}
|
|
|
+
|
|
|
__git_complete_file ()
|
|
|
{
|
|
|
__git_complete_revlist_file
|
|
@@ -562,10 +690,19 @@ __git_complete_strategy ()
|
|
|
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 help -a|egrep '^ [a-zA-Z0-9]')
|
|
|
+ for i in $(__git_commands)
|
|
|
do
|
|
|
case $i in
|
|
|
*--*) : helper pattern;;
|
|
@@ -585,7 +722,7 @@ __git_list_porcelain_commands ()
|
|
|
{
|
|
|
local i IFS=" "$'\n'
|
|
|
__git_compute_all_commands
|
|
|
- for i in "help" $__git_all_commands
|
|
|
+ for i in $__git_all_commands
|
|
|
do
|
|
|
case $i in
|
|
|
*--*) : helper pattern;;
|
|
@@ -594,6 +731,7 @@ __git_list_porcelain_commands ()
|
|
|
archimport) : import;;
|
|
|
cat-file) : plumbing;;
|
|
|
check-attr) : plumbing;;
|
|
|
+ check-ignore) : plumbing;;
|
|
|
check-ref-format) : plumbing;;
|
|
|
checkout-index) : plumbing;;
|
|
|
commit-tree) : plumbing;;
|
|
@@ -753,6 +891,43 @@ __git_has_doubledash ()
|
|
|
return 1
|
|
|
}
|
|
|
|
|
|
+# Try to count non option arguments passed on the command line for the
|
|
|
+# specified git command.
|
|
|
+# When options are used, it is necessary to use the special -- option to
|
|
|
+# tell the implementation were non option arguments begin.
|
|
|
+# XXX this can not be improved, since options can appear everywhere, as
|
|
|
+# an example:
|
|
|
+# git mv x -n y
|
|
|
+#
|
|
|
+# __git_count_arguments requires 1 argument: the git command executed.
|
|
|
+__git_count_arguments ()
|
|
|
+{
|
|
|
+ local word i c=0
|
|
|
+
|
|
|
+ # Skip "git" (first argument)
|
|
|
+ for ((i=1; i < ${#words[@]}; i++)); do
|
|
|
+ word="${words[i]}"
|
|
|
+
|
|
|
+ case "$word" in
|
|
|
+ --)
|
|
|
+ # Good; we can assume that the following are only non
|
|
|
+ # option arguments.
|
|
|
+ ((c = 0))
|
|
|
+ ;;
|
|
|
+ "$1")
|
|
|
+ # Skip the specified git command and discard git
|
|
|
+ # main options
|
|
|
+ ((c = 0))
|
|
|
+ ;;
|
|
|
+ ?*)
|
|
|
+ ((c++))
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+
|
|
|
+ printf "%d" $c
|
|
|
+}
|
|
|
+
|
|
|
__git_whitespacelist="nowarn warn error error-all fix"
|
|
|
|
|
|
_git_am ()
|
|
@@ -801,8 +976,6 @@ _git_apply ()
|
|
|
|
|
|
_git_add ()
|
|
|
{
|
|
|
- __git_has_doubledash && return
|
|
|
-
|
|
|
case "$cur" in
|
|
|
--*)
|
|
|
__gitcomp "
|
|
@@ -811,7 +984,9 @@ _git_add ()
|
|
|
"
|
|
|
return
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ # XXX should we check for --update and --all options ?
|
|
|
+ __git_complete_index_file "--others --modified"
|
|
|
}
|
|
|
|
|
|
_git_archive ()
|
|
@@ -961,15 +1136,15 @@ _git_cherry_pick ()
|
|
|
|
|
|
_git_clean ()
|
|
|
{
|
|
|
- __git_has_doubledash && return
|
|
|
-
|
|
|
case "$cur" in
|
|
|
--*)
|
|
|
__gitcomp "--dry-run --quiet"
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ # XXX should we check for -x option ?
|
|
|
+ __git_complete_index_file "--others"
|
|
|
}
|
|
|
|
|
|
_git_clone ()
|
|
@@ -989,6 +1164,8 @@ _git_clone ()
|
|
|
--upload-pack
|
|
|
--template=
|
|
|
--depth
|
|
|
+ --single-branch
|
|
|
+ --branch
|
|
|
"
|
|
|
return
|
|
|
;;
|
|
@@ -998,7 +1175,19 @@ _git_clone ()
|
|
|
|
|
|
_git_commit ()
|
|
|
{
|
|
|
- __git_has_doubledash && return
|
|
|
+ case "$prev" in
|
|
|
+ -c|-C)
|
|
|
+ __gitcomp_nl "$(__git_refs)" "" "${cur}"
|
|
|
+ return
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ case "$prev" in
|
|
|
+ -c|-C)
|
|
|
+ __gitcomp_nl "$(__git_refs)" "" "${cur}"
|
|
|
+ return
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
|
|
|
case "$cur" in
|
|
|
--cleanup=*)
|
|
@@ -1027,7 +1216,13 @@ _git_commit ()
|
|
|
"
|
|
|
return
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ if git rev-parse --verify --quiet HEAD >/dev/null; then
|
|
|
+ __git_complete_diff_index_file "HEAD"
|
|
|
+ else
|
|
|
+ # This is the first commit
|
|
|
+ __git_complete_index_file "--cached"
|
|
|
+ fi
|
|
|
}
|
|
|
|
|
|
_git_describe ()
|
|
@@ -1043,6 +1238,8 @@ _git_describe ()
|
|
|
__gitcomp_nl "$(__git_refs)"
|
|
|
}
|
|
|
|
|
|
+__git_diff_algorithms="myers minimal patience histogram"
|
|
|
+
|
|
|
__git_diff_common_options="--stat --numstat --shortstat --summary
|
|
|
--patch-with-stat --name-only --name-status --color
|
|
|
--no-color --color-words --no-renames --check
|
|
@@ -1053,10 +1250,11 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
|
|
|
--no-ext-diff
|
|
|
--no-prefix --src-prefix= --dst-prefix=
|
|
|
--inter-hunk-context=
|
|
|
- --patience
|
|
|
+ --patience --histogram --minimal
|
|
|
--raw
|
|
|
--dirstat --dirstat= --dirstat-by-file
|
|
|
--dirstat-by-file= --cumulative
|
|
|
+ --diff-algorithm=
|
|
|
"
|
|
|
|
|
|
_git_diff ()
|
|
@@ -1064,6 +1262,10 @@ _git_diff ()
|
|
|
__git_has_doubledash && return
|
|
|
|
|
|
case "$cur" in
|
|
|
+ --diff-algorithm=*)
|
|
|
+ __gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
|
|
|
+ return
|
|
|
+ ;;
|
|
|
--*)
|
|
|
__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
|
|
|
--base --ours --theirs --no-index
|
|
@@ -1116,6 +1318,14 @@ _git_fetch ()
|
|
|
__git_complete_remote_or_refspec
|
|
|
}
|
|
|
|
|
|
+__git_format_patch_options="
|
|
|
+ --stdout --attach --no-attach --thread --thread= --output-directory
|
|
|
+ --numbered --start-number --numbered-files --keep-subject --signoff
|
|
|
+ --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=
|
|
|
+"
|
|
|
+
|
|
|
_git_format_patch ()
|
|
|
{
|
|
|
case "$cur" in
|
|
@@ -1126,21 +1336,7 @@ _git_format_patch ()
|
|
|
return
|
|
|
;;
|
|
|
--*)
|
|
|
- __gitcomp "
|
|
|
- --stdout --attach --no-attach --thread --thread=
|
|
|
- --output-directory
|
|
|
- --numbered --start-number
|
|
|
- --numbered-files
|
|
|
- --keep-subject
|
|
|
- --signoff --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=
|
|
|
- "
|
|
|
+ __gitcomp "$__git_format_patch_options"
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
@@ -1251,8 +1447,6 @@ _git_init ()
|
|
|
|
|
|
_git_ls_files ()
|
|
|
{
|
|
|
- __git_has_doubledash && return
|
|
|
-
|
|
|
case "$cur" in
|
|
|
--*)
|
|
|
__gitcomp "--cached --deleted --modified --others --ignored
|
|
@@ -1265,7 +1459,10 @@ _git_ls_files ()
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ # XXX ignore options like --modified and always suggest all cached
|
|
|
+ # files.
|
|
|
+ __git_complete_index_file "--cached"
|
|
|
}
|
|
|
|
|
|
_git_ls_remote ()
|
|
@@ -1397,7 +1594,14 @@ _git_mv ()
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ if [ $(__git_count_arguments "mv") -gt 0 ]; then
|
|
|
+ # We need to show both cached and untracked files (including
|
|
|
+ # empty directories) since this may not be the last argument.
|
|
|
+ __git_complete_index_file "--cached --others --directory"
|
|
|
+ else
|
|
|
+ __git_complete_index_file "--cached"
|
|
|
+ fi
|
|
|
}
|
|
|
|
|
|
_git_name_rev ()
|
|
@@ -1554,6 +1758,12 @@ _git_send_email ()
|
|
|
__gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
|
|
|
return
|
|
|
;;
|
|
|
+ --thread=*)
|
|
|
+ __gitcomp "
|
|
|
+ deep shallow
|
|
|
+ " "" "${cur##--thread=}"
|
|
|
+ return
|
|
|
+ ;;
|
|
|
--*)
|
|
|
__gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
|
|
|
--compose --confirm= --dry-run --envelope-sender
|
|
@@ -1563,11 +1773,12 @@ _git_send_email ()
|
|
|
--signed-off-by-cc --smtp-pass --smtp-server
|
|
|
--smtp-server-port --smtp-encryption= --smtp-user
|
|
|
--subject --suppress-cc= --suppress-from --thread --to
|
|
|
- --validate --no-validate"
|
|
|
+ --validate --no-validate
|
|
|
+ $__git_format_patch_options"
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+ __git_complete_revlist
|
|
|
}
|
|
|
|
|
|
_git_stage ()
|
|
@@ -1581,7 +1792,7 @@ __git_config_get_set_variables ()
|
|
|
while [ $c -gt 1 ]; do
|
|
|
word="${words[c]}"
|
|
|
case "$word" in
|
|
|
- --global|--system|--file=*)
|
|
|
+ --system|--global|--local|--file=*)
|
|
|
config_file="$word"
|
|
|
break
|
|
|
;;
|
|
@@ -1687,7 +1898,7 @@ _git_config ()
|
|
|
case "$cur" in
|
|
|
--*)
|
|
|
__gitcomp "
|
|
|
- --global --system --file=
|
|
|
+ --system --global --local --file=
|
|
|
--list --replace-all
|
|
|
--get --get-all --get-regexp
|
|
|
--add --unset --unset-all
|
|
@@ -1860,6 +2071,7 @@ _git_config ()
|
|
|
diff.suppressBlankEmpty
|
|
|
diff.tool
|
|
|
diff.wordRegex
|
|
|
+ diff.algorithm
|
|
|
difftool.
|
|
|
difftool.prompt
|
|
|
fetch.recurseSubmodules
|
|
@@ -2096,15 +2308,14 @@ _git_revert ()
|
|
|
|
|
|
_git_rm ()
|
|
|
{
|
|
|
- __git_has_doubledash && return
|
|
|
-
|
|
|
case "$cur" in
|
|
|
--*)
|
|
|
__gitcomp "--cached --dry-run --ignore-unmatch --quiet"
|
|
|
return
|
|
|
;;
|
|
|
esac
|
|
|
- COMPREPLY=()
|
|
|
+
|
|
|
+ __git_complete_index_file "--cached"
|
|
|
}
|
|
|
|
|
|
_git_shortlog ()
|
|
@@ -2134,6 +2345,10 @@ _git_show ()
|
|
|
" "" "${cur#*=}"
|
|
|
return
|
|
|
;;
|
|
|
+ --diff-algorithm=*)
|
|
|
+ __gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
|
|
|
+ return
|
|
|
+ ;;
|
|
|
--*)
|
|
|
__gitcomp "--pretty= --format= --abbrev-commit --oneline
|
|
|
$__git_diff_common_options
|
|
@@ -2429,20 +2644,88 @@ __gitk_main ()
|
|
|
__git_complete_revlist
|
|
|
}
|
|
|
|
|
|
-__git_func_wrap ()
|
|
|
-{
|
|
|
- if [[ -n ${ZSH_VERSION-} ]]; then
|
|
|
- emulate -L bash
|
|
|
- setopt KSH_TYPESET
|
|
|
+if [[ -n ${ZSH_VERSION-} ]]; then
|
|
|
+ echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
|
|
|
|
|
|
- # workaround zsh's bug that leaves 'words' as a special
|
|
|
- # variable in versions < 4.3.12
|
|
|
- typeset -h words
|
|
|
+ autoload -U +X compinit && compinit
|
|
|
|
|
|
- # workaround zsh's bug that quotes spaces in the COMPREPLY
|
|
|
- # array if IFS doesn't contain spaces.
|
|
|
- typeset -h IFS
|
|
|
+ __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_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_zsh_helper ()
|
|
|
+ {
|
|
|
+ emulate -L ksh
|
|
|
+ local cur cword prev
|
|
|
+ cur=${words[CURRENT-1]}
|
|
|
+ prev=${words[CURRENT-2]}
|
|
|
+ let cword=CURRENT-1
|
|
|
+ __${service}_main
|
|
|
+ }
|
|
|
+
|
|
|
+ _git ()
|
|
|
+ {
|
|
|
+ emulate -L zsh
|
|
|
+ local _ret=1
|
|
|
+ __git_zsh_helper
|
|
|
+ let _ret && _default -S '' && _ret=0
|
|
|
+ return _ret
|
|
|
+ }
|
|
|
+
|
|
|
+ compdef _git git gitk
|
|
|
+ return
|
|
|
+elif [[ -n ${BASH_VERSION-} ]]; then
|
|
|
+ if ((${BASH_VERSINFO[0]} < 4)); then
|
|
|
+ # compopt is not supported
|
|
|
+ __git_index_file_list_filter ()
|
|
|
+ {
|
|
|
+ __git_index_file_list_filter_compat
|
|
|
+ }
|
|
|
fi
|
|
|
+fi
|
|
|
+
|
|
|
+__git_func_wrap ()
|
|
|
+{
|
|
|
local cur words cword prev
|
|
|
_get_comp_words_by_ref -n =: cur words cword prev
|
|
|
$1
|