Merge branch 'fc/git-complete-helper'
authorJunio C Hamano <gitster@pobox.com>
Thu, 17 May 2012 22:21:55 +0000 (15:21 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 17 May 2012 22:21:55 +0000 (15:21 -0700)
By Felipe Contreras
* fc/git-complete-helper:
completion: add new __git_complete helper

1  2 
contrib/completion/git-completion.bash
index 2f60825b21e33d8a00d1763d9bcad4dc6e6a60a7,d60bb8ac8f62d44cafea3282867be158c6b68cbb..cd92322161a89a23d3f494a7c7b7aaf5867a5781
@@@ -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,$, ,
                                           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
  
  _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)"
        __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