Browse Source

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>
maint
Felipe Contreras 12 years ago committed by Junio C Hamano
parent
commit
3ffa4df4b2
  1. 43
      contrib/completion/git-completion.bash

43
contrib/completion/git-completion.bash

@ -254,33 +254,21 @@ __gitcomp_file () @@ -254,33 +254,21 @@ __gitcomp_file ()
# completion will be used.
__gitcompadd "$1" "${2-}" "${3-$cur}" ""

# Tell Bash that compspec generates filenames.
compopt -o filenames 2>/dev/null
# use a hack to enable file mode in bash < 4
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 ()
# 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 ()
{
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" ;;
@ -288,15 +276,6 @@ __git_index_file_list_filter_bash () @@ -288,15 +276,6 @@ __git_index_file_list_filter_bash ()
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', unless the --committable option is specified, in
# which case it runs 'git diff-index' to find out the files that can be
# committed. It return paths relative to the directory specified in the first
@ -2651,14 +2630,6 @@ if [[ -n ${ZSH_VERSION-} ]]; then @@ -2651,14 +2630,6 @@ if [[ -n ${ZSH_VERSION-} ]]; then

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 ()

Loading…
Cancel
Save