diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-04-27 15:10:05 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-27 14:32:29 -0700 |
commit | 3ffa4df4b2a26768938fc6bf1ed0640885b2bdf1 (patch) | |
tree | 20909f327198cd5a25c9ef31adece3b7bc87fe59 /contrib/completion/git-completion.bash | |
parent | completion: refactor __git_complete_index_file() (diff) | |
download | tgif-3ffa4df4b2a26768938fc6bf1ed0640885b2bdf1.tar.xz |
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>
Diffstat (limited to 'contrib/completion/git-completion.bash')
-rw-r--r-- | contrib/completion/git-completion.bash | 43 |
1 files changed, 7 insertions, 36 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,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 () 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 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 () |