]> git.ipfire.org Git - thirdparty/git.git/blobdiff - contrib/completion/git-completion.zsh
completion: zsh: refactor command completion
[thirdparty/git.git] / contrib / completion / git-completion.zsh
index 60efddb4a9fdca62881e42a980ba35b217f7bc6f..858864f3fb049cc678088d7909e2e11c6287ebd4 100644 (file)
@@ -134,20 +134,32 @@ __gitcomp_file_direct ()
        __gitcomp_file "$1" ""
 }
 
+__git_complete_command ()
+{
+       emulate -L zsh
+
+       local command="$1"
+       local completion_func="_git_${command//-/_}"
+       if (( $+functions[$completion_func] )); then
+               emulate ksh -c $completion_func
+               return 0
+       else
+               return 1
+       fi
+}
+
 __git_zsh_bash_func ()
 {
        emulate -L ksh
 
        local command=$1
 
-       local completion_func="_git_${command//-/_}"
-       declare -f $completion_func >/dev/null && $completion_func && return
+       __git_complete_command "$command" && return
 
        local expansion=$(__git_aliased_command "$command")
        if [ -n "$expansion" ]; then
                words[1]=$expansion
-               completion_func="_git_${expansion//-/_}"
-               declare -f $completion_func >/dev/null && $completion_func
+               __git_complete_command "$expansion"
        fi
 }