If this option causes so much trouble, lets just not use it. The supposed advantages of specifying the 'filenames' is that 1) a slash is added at the end, 2) trailing spaces are removed (which doesn't seem to be true), and 3) special characters are quoted. We can do all those things by ourselves. Also, this will allow us to add a space after the completion, just like it happened before fea16b4 (git-completion.bash: add support for path completion), and just like the rest of the script does. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/completion/git-completion.bash | 43 ++++------------------------------ t/t9902-completion.sh | 6 ++--- 2 files changed, 7 insertions(+), 42 deletions(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 9cea170..5dd6646 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -253,12 +253,12 @@ __gitcomp_file () # This means that COMPREPLY will be empty and Bash default # 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 () +# 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 @@ -270,33 +270,6 @@ __git_index_file_list_filter_compat () 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', 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 +2624,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 () diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 81a1657..e6cdb05 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -396,10 +396,10 @@ test_expect_success 'complete files' ' : TODO .gitignore should not be here && test_completion "git mv modified " <<-\EOF && .gitignore - dir + dir/ modified untracked - untracked-dir + untracked-dir/ EOF test_completion "git commit " "modified" && @@ -407,7 +407,7 @@ test_expect_success 'complete files' ' : TODO .gitignore should not be here && test_completion "git ls-files " <<-\EOF .gitignore - dir + dir/ modified EOF -- 1.8.2.1.1031.g2ee5873 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html