From: Junio C Hamano Date: Fri, 18 Jan 2019 21:49:54 +0000 (-0800) Subject: Merge branch 'cy/zsh-completion-SP-in-path' X-Git-Tag: v2.21.0-rc0~92 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/b84e2977534b677ae1ac8670489002637fab6438?ds=inline;hp=-c Merge branch 'cy/zsh-completion-SP-in-path' With zsh, "git cmd path" was completed to "git cmd path name" when the completed path has a special character like SP in it, without any attempt to keep "path name" a single filename. This has been fixed to complete it to "git cmd path\ name" just like Bash completion does. * cy/zsh-completion-SP-in-path: completion: treat results of git ls-tree as file paths zsh: complete unquoted paths with spaces correctly --- b84e2977534b677ae1ac8670489002637fab6438 diff --combined contrib/completion/git-completion.bash index 86a9719a51,26ea310fda..499e56f83d --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@@ -438,7 -438,7 +438,7 @@@ __gitcomp_nl ( # Callers must take care of providing only paths that match the current path # to be completed and adding any prefix path components, if necessary. # 1: List of newline-separated matching paths, complete with all prefix -# path componens. +# path components. __gitcomp_file_direct () { local IFS=$'\n' @@@ -855,7 -855,7 +855,7 @@@ __git_compute_merge_strategies ( __git_complete_revlist_file () { - local pfx ls ref cur_="$cur" + local dequoted_word pfx ls ref cur_="$cur" case "$cur_" in *..?*:*) return @@@ -863,14 -863,18 +863,18 @@@ ?*:*) ref="${cur_%%:*}" cur_="${cur_#*:}" - case "$cur_" in + + __git_dequote "$cur_" + + case "$dequoted_word" in ?*/*) - pfx="${cur_%/*}" - cur_="${cur_##*/}" + pfx="${dequoted_word%/*}" + cur_="${dequoted_word##*/}" ls="$ref:$pfx" pfx="$pfx/" ;; *) + cur_="$dequoted_word" ls="$ref" ;; esac @@@ -880,21 -884,10 +884,10 @@@ *) pfx="$ref:$pfx" ;; esac - __gitcomp_nl "$(__git ls-tree "$ls" \ - | sed '/^100... blob /{ - s,^.* ,, - s,$, , - } - /^120000 blob /{ - s,^.* ,, - s,$, , - } - /^040000 tree /{ - s,^.* ,, - s,$,/, - } - s/^.* //')" \ - "$pfx" "$cur_" "" + __gitcomp_file "$(__git ls-tree "$ls" \ + | sed 's/^.* // + s/$//')" \ + "$pfx" "$cur_" ;; *...*) pfx="${cur_%...*}..." @@@ -2993,7 -2986,7 +2986,7 @@@ if [[ -n ${ZSH_VERSION-} ]] & local IFS=$'\n' compset -P '*[=:]' - compadd -Q -f -- ${=1} && _ret=0 + compadd -f -- ${=1} && _ret=0 } __gitcomp_file () @@@ -3002,7 -2995,7 +2995,7 @@@ local IFS=$'\n' compset -P '*[=:]' - compadd -Q -p "${2-}" -f -- ${=1} && _ret=0 + compadd -p "${2-}" -f -- ${=1} && _ret=0 } _git () diff --combined t/t9902-completion.sh index 6558eee499,94157e5879..3a2c6326d8 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@@ -1434,8 -1434,7 +1434,8 @@@ test_expect_success 'double dash "git c --ignore-other-worktrees Z --recurse-submodules Z --progress Z - --no-quiet Z + --guess Z + --no-guess Z --no-... Z EOF ' @@@ -1516,8 -1515,8 +1516,8 @@@ test_expect_success 'show completes al test_expect_success ': completes paths' ' test_completion "git show mytag:f" <<-\EOF - file1 Z - file2 Z + file1Z + file2Z EOF ' @@@ -1526,7 -1525,7 +1526,7 @@@ test_expect_success 'complete tree file git add "name with spaces" && git commit -m spaces && test_completion "git show HEAD:nam" <<-\EOF - name with spaces Z + name with spacesZ EOF ' @@@ -1535,8 -1534,8 +1535,8 @@@ test_expect_success 'complete tree file git add "name with \${meta}" && git commit -m meta && test_completion "git show HEAD:nam" <<-\EOF - name with ${meta} Z - name with spaces Z + name with ${meta}Z + name with spacesZ EOF '