From 3ffa4df4b2a26768938fc6bf1ed0640885b2bdf1 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Sat, 27 Apr 2013 15:10:05 -0500 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- contrib/completion/git-completion.bash | 55 ++++++-------------------- 1 file changed, 13 insertions(+), 42 deletions(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 9cea17036e..f9e8e7dae5 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -254,38 +254,9 @@ __gitcomp_file () # completion will be used. __gitcompadd "$1" "${2-}" "${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 + # use a hack to enable file mode in bash < 4 + compopt -o filenames 2>/dev/null || + compgen -f /non-existing-dir/ > /dev/null } # 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. __git_index_file_list_filter () { - # Default to Bash >= 4.x - __git_index_file_list_filter_bash + local path + + 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 @@ -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 ()