_git__sprig() {
    local i cur prev opts cmd
    COMPREPLY=()
    if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
        cur="$2"
    else
        cur="${COMP_WORDS[COMP_CWORD]}"
    fi
    prev="$3"
    cmd=""
    opts=""

    for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
    do
        case "${cmd},${i}" in
            ",$1")
                cmd="git__sprig"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        git__sprig)
            opts="-C -b -c -j -q -v -h -V --repo --rev --basedir --force --stage --raw --no-recursive --max-depth --remote-url --config --tempdir --jobs --dry-run --quiet --verbose --generate-man --generate-completions --help --version"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --repo)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -C)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rev)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --basedir)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -b)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --max-depth)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --remote-url)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --config)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -c)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --tempdir)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --jobs)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -j)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --generate-completions)
                    COMPREPLY=($(compgen -W "bash fish zsh" -- "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
    esac
}

if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
    complete -F _git__sprig -o nosort -o bashdefault -o default git-sprig
else
    complete -F _git__sprig -o bashdefault -o default git-sprig
fi

# `git sprig`: git's completion calls _git_<command> for commands in PATH.
_git_sprig ()
{
	case "$prev" in
	--rev)
		__git_complete_refs
		return
		;;
	--generate-completions)
		__gitcomp "bash fish zsh"
		return
		;;
	esac
	case "$cur" in
	--rev=*)
		__git_complete_refs --cur="${cur##--rev=}"
		return
		;;
	--generate-completions=*)
		__gitcomp "bash fish zsh" "" "${cur##--generate-completions=}"
		return
		;;
	--*=*)
		return
		;;
	-*)
		__gitcomp "--repo= --rev= --basedir= --force --stage --raw --no-recursive --max-depth= --remote-url= --config= --tempdir= --jobs= --dry-run --quiet --verbose --generate-man --generate-completions="
		return
		;;
	esac
}
