# bash completion for rpmdevtools
# Requires bash-completion >= 20080705 (for _get_cword)

# TODO: rpmdev-diff, rpmdev-vercmp

_rpmdev_rpmfiles()
{
    local cur=${cur:-`_get_cword`}
    _filedir '[rs]pm'
}

_rpmdev_archives()
{
    local cur=${cur:-`_get_cword`}
    _filedir '@([rs]pm|deb|zip|?([ejtw])ar|tzo|[glx7]z|bz2|lzma|cpio|arj|zoo|cab|rar|ace|lha)'
}

_rpmdev_specfiles()
{
    local cur=${cur:-`_get_cword`}
    _filedir spec
}

complete -F _rpmdev_rpmfiles -o filenames rpmdev-checksig

complete -F _rpmdev_archives -o filenames \
    rpmdev-{cksum,md5,sha{1,224,256,384,512},sum}

_spectool()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|-help) ]] && return 0
    done

    local cur=`_get_cword`
    case $3 in
        -C|--directory)
            _filedir -d
            return 0
            ;;
        -s|--source|-p|--patch|-d|--define)
            # TODO: do better with these
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '--list-files --get-files --help --all
                                   --sources --patches --source --patch
                                   --define --directory --sourcedir --dry-run
                                   --debug' -- "$cur" ) )
    else
        _rpmdev_specfiles
    fi
}
complete -F _spectool -o filenames spectool

_rpmdev_bumpspec()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|-help|v|-version) ]] && return 0
    done

    [[ $3 == -@(c|-comment|u|-userstring) ]] && return 0

    local cur=`_get_cword`
    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '--help --comment --userstring --rightmost
                                   --verbose --version' -- "$cur" ) )
    else
        _rpmdev_specfiles
    fi
}
complete -F _rpmdev_bumpspec -o filenames rpmdev-bumpspec

_rpmdev_rmdevelrpms()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|-help|v|-version) ]] && return 0
    done

    [[ $3 == --@(qf|queryformat) ]] && return 0

    COMPREPLY=( $( compgen -W '--help --list-only --queryformat --yes
                               --version' -- `_get_cword` ) )
}
complete -F _rpmdev_rmdevelrpms rpmdev-rmdevelrpms

_rpmdev_setuptree()
{
    local cur=`_get_cword`
    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-d' -- "$cur" ) )
    fi
}
complete -F _rpmdev_setuptree rpmdev-setuptree

_rpmls()
{
    COMPREPLY=()
    local cur=`_get_cword`

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-l' -- "$cur" ) )
        return 0
    fi

    [[ "$cur" == */* ]] || _rpm_installed_packages
    _rpmdev_rpmfiles
}
complete -F _rpmls -o filenames rpmls

_rpmdev_newspec()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|-help|v|-version) ]] && return 0
    done

    local cur=`_get_cword`
    case $3 in
        -o|--output)
            _filedir spec
            return 0
            ;;
        -t|--type)
            COMPREPLY=( $( command ls /etc/rpmdevtools/spectemplate-*.spec 2>/dev/null ) )
            COMPREPLY=( ${COMPREPLY[@]%.spec} )
            COMPREPLY=( ${COMPREPLY[@]#/etc/rpmdevtools/spectemplate-} )
            COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) )
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '--output --type --macros --help --version' \
            -- "$cur" ) )
        return 0
    fi

    _filedir spec
}
complete -F _rpmdev_newspec -o filenames rpmdev-newspec

_rpminfo()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|-help) ]] && return 0
    done

    local cur=`_get_cword`
    case $3 in
        -o|--output)
            _filedir
            return 0
            ;;
        -T|--tmp-dir)
            _filedir -d
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '--help --verbose --quiet -qq --installed
                                   --executables --libraries --pic --no_pic
                                   --pie --no_pie --rpath --rpath_odd --split
                                   --test --output --tmp-dir' -- "$cur" ) )
        return 0
    fi

    [[ "$cur" == */* ]] || _rpm_installed_packages
    _rpmdev_rpmfiles
}
complete -F _rpminfo -o filenames rpminfo

_rpmdev_extract()
{
    COMPREPLY=()

    for i in ${COMP_WORDS[@]} ; do
        [[ "$i" == -@(h|v) ]] && return 0
    done

    local cur=`_get_cword`
    if [[ $3 == -C ]] ; then
        _filedir -d
        return 0
    fi

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-q -f -C -h -v' -- "$cur" ) )
        return 0
    fi

    _rpmdev_archives
}
complete -F _rpmdev_extract -o filenames rpmdev-extract

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
