提交 b84e2977 编写于 作者: J Junio C Hamano

Merge branch 'cy/zsh-completion-SP-in-path'

With zsh, "git cmd path<TAB>" 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
......@@ -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 @@ __git_complete_revlist_file ()
?*:*)
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 @@ __git_complete_revlist_file ()
*) 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 @@ 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 @@ if [[ -n ${ZSH_VERSION-} ]] &&
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
compadd -p "${2-}" -f -- ${=1} && _ret=0
}
_git ()
......
......@@ -99,7 +99,7 @@ __gitcomp_file_direct ()
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -f -- ${=1} && _ret=0
compadd -f -- ${=1} && _ret=0
}
__gitcomp_file ()
......@@ -108,7 +108,7 @@ __gitcomp_file ()
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
compadd -p "${2-}" -f -- ${=1} && _ret=0
}
__git_zsh_bash_func ()
......
......@@ -1516,8 +1516,8 @@ test_expect_success 'show completes all refs' '
test_expect_success '<ref>: completes paths' '
test_completion "git show mytag:f" <<-\EOF
file1 Z
file2 Z
file1Z
file2Z
EOF
'
......@@ -1526,7 +1526,7 @@ test_expect_success 'complete tree filename with spaces' '
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 +1535,8 @@ test_expect_success 'complete tree filename with metacharacters' '
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
'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册