# bash completion for pkgdev

source "/usr/share/bash-completion/helpers/gentoo-common.sh"

_pkgdev() {
    local i=1 cmd cur prev words cword split
    _init_completion || return

    local subcommands="
        bugs
        commit
        manifest
        mask
        push
        showkw
        tatt
    "

    local base_options="
        -h --help
        --version
        --debug
        -q --quiet
        -v --verbose
        --color
    "

    local boolean_options="
        true
        false
    "

    _list_repo_atoms() {
        builtin cd "$(git rev-parse --show-toplevel)" || return
        if [[ $cur == */* ]]; then
            compgen -W "$(compgen -G "${cur}*" )" -- "${cur}"
        else
            compgen -W "$(compgen -G "${cur}*" -S / )" -- "${cur}"
        fi
    }

    if [[ ${prev} = "--color" ]]; then
        COMPREPLY=($(compgen -W "${boolean_options}" -- "${cur}"))
        return
    fi
    COMPREPLY=($(compgen -W "${base_options}" -- "${cur}"))

    # find the subcommand
    while [[ "${i}" -lt "${COMP_CWORD}" ]]; do
        local s="${COMP_WORDS[i]}"
        case "${s}" in
            -*) ;;
            *)
                cmd="${s}"
                break
                ;;
        esac
        ((i++))
    done

    if [[ "${i}" -eq "${COMP_CWORD}" ]]; then
        COMPREPLY+=($(compgen -W "${subcommands}" -- "${cur}"))
        return
    fi

    local subcmd_options
    case "${cmd}" in
        commit)
            subcmd_options="
                -b --bug
                -c --closes
                -T --tag
                -n --dry-run
                -s --scan
                -A --ask
                --mangle
                --signoff
                -m --message
                -M --message-template
                -e --edit
                -u --update
                -a --all
            "

            case "${prev}" in
                -[bcTm] | --bug | --closes | --tag | --message)
                    COMPREPLY=()
                    ;;
                -M | --message-template)
                    COMPREPLY=($(compgen -f -- "${cur}"))
                    ;;
                -s | --scan | --mangle)
                    COMPREPLY=($(compgen -W "${boolean_options}" -- "${cur}"))
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    ;;
            esac
            ;;
        manifest)
            subcmd_options="
                -f --force
                -m --mirrors
                -d --distdir
                --if-modified
            "

            case "${prev}" in
                -d | --distdir)
                    COMPREPLY=($(compgen -d -- "${cur}"))
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    COMPREPLY+=($(_list_repo_atoms))
                    ;;
            esac
            ;;
        mask)
            subcmd_options="
                -r --rites
                -b --bugs
                --email
            "

            case "${prev}" in
                -[rb] | --rites | --bugs)
                    COMPREPLY=()
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    COMPREPLY+=($(_list_repo_atoms))
                    ;;
            esac
            ;;
        push)
            subcmd_options="
                -A --ask
                -n --dry-run
                --pull
            "

            COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
            ;;
        showkw)
            subcmd_options="
                -f --format
                -c --collapse
                -s --stable
                -u --unstable
                -o --only-unstable
                -p --prefix
                -a --arch
                -r --repo
            "

            case "${prev}" in
                -f | --format)
                    format_options="
                        fancy_grid
                        fancy_outline
                        github
                        grid
                        html
                        jira
                        latex
                        latex_booktabs
                        latex_longtable
                        latex_raw
                        mediawiki
                        moinmoin
                        orgtbl
                        pipe
                        plain
                        presto
                        pretty
                        psql
                        rst
                        showkw
                        simple
                        textile
                        tsv
                        unsafehtml
                        youtrack
                    "
                    COMPREPLY=($(compgen -W "${format_options}" -- "${cur}"))
                    ;;
                -r | --repo)
                    COMPREPLY=($(compgen -W "$(_parsereposconf -l)" -- "${cur}"))
                    ;;
                -a | --arch)
                    COMPREPLY=()
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    COMPREPLY+=($(_list_repo_atoms))
                    ;;
            esac
            ;;
        tatt)
            subcmd_options="
                --api-key
                -j --job-name
                -b --bug
                -t --test
                -u --use-combos
                --ignore-prefixes
                --use-default
                --use-random
                --use-expand-random
                -p --package
                -s --stablereq
                -k --keywording
                --template-file
                --logs-dir
                --emerge-opts
            "

            case "${prev}" in
                -[jbup] | --api-key | --job-name | --bug | --use-combos | --package | --emerge-opts)
                    COMPREPLY=()
                    ;;
                --template-file)
                    COMPREPLY=($(compgen -f -- "${cur}"))
                    ;;
                --logs-dir)
                    COMPREPLY=($(compgen -d -- "${cur}"))
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    ;;
            esac
            ;;
        bugs)
            subcmd_options="
                --api-key
                --auto-cc-arches
                --dot
                -s --stablereq
                -k --keywording
            "

            case "${prev}" in
                --api-key | --auto-cc-arches)
                    COMPREPLY=()
                    ;;
                --dot)
                    COMPREPLY=($(compgen -f -- "${cur}"))
                    ;;
                *)
                    COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                    ;;
            esac
            ;;
    esac
}
complete -F _pkgdev pkgdev

# vim: set ft=bash sw=4 et sts=4 :
