From: Junio C Hamano Date: Thu, 17 May 2012 22:21:55 +0000 (-0700) Subject: Merge branch 'fc/git-complete-helper' X-Git-Tag: v1.7.11-rc0~25 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/8be441ea1fbd6e39952c5c314014162900c2c148?ds=sidebyside;hp=-c Merge branch 'fc/git-complete-helper' By Felipe Contreras * fc/git-complete-helper: completion: add new __git_complete helper --- 8be441ea1fbd6e39952c5c314014162900c2c148 diff --combined contrib/completion/git-completion.bash index 2f60825b21,d60bb8ac8f..cd92322161 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@@ -676,7 -676,9 +676,7 @@@ __git_complete_revlist_file ( *) pfx="$ref:$pfx" ;; esac - local IFS=$'\n' - COMPREPLY=($(compgen -P "$pfx" \ - -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \ + __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \ | sed '/^100... blob /{ s,^.* ,, s,$, , @@@ -690,7 -692,7 +690,7 @@@ s,$,/, } s/^.* //')" \ - -- "$cur_")) + "$pfx" "$cur_" "" ;; *...*) pfx="${cur_%...*}..." @@@ -2601,21 -2603,6 +2601,6 @@@ _git ( { local i c=1 command __git_dir - if [[ -n ${ZSH_VERSION-} ]]; then - emulate -L bash - setopt KSH_TYPESET - - # workaround zsh's bug that leaves 'words' as a special - # variable in versions < 4.3.12 - typeset -h words - - # workaround zsh's bug that quotes spaces in the COMPREPLY - # array if IFS doesn't contain spaces. - typeset -h IFS - fi - - local cur words cword prev - _get_comp_words_by_ref -n =: cur words cword prev while [ $c -lt $cword ]; do i="${words[c]}" case "$i" in @@@ -2665,22 -2652,6 +2650,6 @@@ _gitk () { - if [[ -n ${ZSH_VERSION-} ]]; then - emulate -L bash - setopt KSH_TYPESET - - # workaround zsh's bug that leaves 'words' as a special - # variable in versions < 4.3.12 - typeset -h words - - # workaround zsh's bug that quotes spaces in the COMPREPLY - # array if IFS doesn't contain spaces. - typeset -h IFS - fi - - local cur words cword prev - _get_comp_words_by_ref -n =: cur words cword prev - __git_has_doubledash && return local g="$(__gitdir)" @@@ -2701,16 -2672,43 +2670,43 @@@ __git_complete_revlist } - complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \ - || complete -o default -o nospace -F _git git - complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \ - || complete -o default -o nospace -F _gitk gitk + __git_func_wrap () + { + if [[ -n ${ZSH_VERSION-} ]]; then + emulate -L bash + setopt KSH_TYPESET + + # workaround zsh's bug that leaves 'words' as a special + # variable in versions < 4.3.12 + typeset -h words + + # workaround zsh's bug that quotes spaces in the COMPREPLY + # array if IFS doesn't contain spaces. + typeset -h IFS + fi + local cur words cword prev + _get_comp_words_by_ref -n =: cur words cword prev + $1 + } + + # Setup completion for certain functions defined above by setting common + # variables and workarounds. + # This is NOT a public function; use at your own risk. + __git_complete () + { + local wrapper="__git_wrap${2}" + eval "$wrapper () { __git_func_wrap $2 ; }" + complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \ + || complete -o default -o nospace -F $wrapper $1 + } + + __git_complete git _git + __git_complete gitk _gitk # The following are necessary only for Cygwin, and only are needed # when the user has tab-completed the executable name and consequently # included the '.exe' suffix. # if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then - complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \ - || complete -o default -o nospace -F _git git.exe + __git_complete git.exe _git fi