completion: add hack to enable file mode in bash < 4
This way we don't need all the compat stuff, different filters, and so on. Also, now we complete exactly the same in bash 3 and bash 4. This is the way bash-completion did it for quite some time, when bash 3 was supported. For more information about the hack: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=272660#64 Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fda54ef1aa
commit
3ffa4df4b2
@ -254,38 +254,9 @@ __gitcomp_file ()
|
|||||||
# completion will be used.
|
# completion will be used.
|
||||||
__gitcompadd "$1" "${2-}" "${3-$cur}" ""
|
__gitcompadd "$1" "${2-}" "${3-$cur}" ""
|
||||||
|
|
||||||
# Tell Bash that compspec generates filenames.
|
# use a hack to enable file mode in bash < 4
|
||||||
compopt -o filenames 2>/dev/null
|
compopt -o filenames 2>/dev/null ||
|
||||||
}
|
compgen -f /non-existing-dir/ > /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"
|
# Process path list returned by "ls-files" and "diff-index --name-only"
|
||||||
@ -293,8 +264,16 @@ __git_index_file_list_filter_bash ()
|
|||||||
# directory, and append a slash to directory names.
|
# directory, and append a slash to directory names.
|
||||||
__git_index_file_list_filter ()
|
__git_index_file_list_filter ()
|
||||||
{
|
{
|
||||||
# Default to Bash >= 4.x
|
local path
|
||||||
__git_index_file_list_filter_bash
|
|
||||||
|
while read -r path; do
|
||||||
|
case "$path" in
|
||||||
|
?*/*)
|
||||||
|
echo "${path%%/*}" ;;
|
||||||
|
*)
|
||||||
|
echo "$path" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Execute 'git ls-files', unless the --committable option is specified, in
|
# Execute 'git ls-files', unless the --committable option is specified, in
|
||||||
@ -2651,14 +2630,6 @@ if [[ -n ${ZSH_VERSION-} ]]; then
|
|||||||
|
|
||||||
compdef _git git gitk
|
compdef _git git gitk
|
||||||
return
|
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
|
fi
|
||||||
|
|
||||||
__git_func_wrap ()
|
__git_func_wrap ()
|
||||||
|
Loading…
Reference in New Issue
Block a user