# Debian dpkg-source completion


comp_include _get_cword


_dpkg_source()
{
    local cur prev options work i action packopts unpackopts

    packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sp -su -sr -ss -sn -sA -sK -sP -sU -sR"
    unpackopts="-sp -sn -su"
    options=`echo "-x -b $packopts $unpackopts" | xargs echo | sort -u | xargs echo`

    COMPREPLY=()
    cur=`_get_cword`
    prev=${COMP_WORDS[COMP_CWORD-1]}
    action="options"
    for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
        if [[ ${COMP_WORDS[$i]} == "-x" ]]; then
            action=unpack
        elif [[ ${COMP_WORDS[$i]} == "-b" ]]; then
            action=pack
        elif [[ ${COMP_WORDS[$i]} == "-h" ]]; then
            action=help
        fi
    done
    # if currently seeing a complete option, return just itself.
    for i in $options; do
        if [ "$cur" = "$i" ]; then
            COMPREPLY=( "$cur" )
            return 0
        fi
    done
    case "$action" in
        "unpack")
            if [ "$cur" = "-" -o "$cur" = "-s" ]; then
                COMPREPLY=( $unpackots )
                return 0
            fi
            case "$prev" in
                "-x")
                    COMPREPLY=( $( compgen -d -- "$cur" ) \
                            $( compgen -f -X '!*.dsc' -- "$cur" ) )
                    return 0
                    ;;
                *)
                    COMPREPLY=( $unpackopts $(compgen -d -f -- "$cur" ) )
                    return 0
                    ;;
            esac
            return 0
            ;;
        "pack")
            if [ "$cur" = "-" ]; then
                COMPREPLY=( $packopts )
                return 0
            fi
            if [ "$cur" = "-s" ]; then
                COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
                        "-sA" "-sK" "-sP" "-sU" "-sR" )
                return 0
            fi
            case "$prev" in
                "-b")
                    COMPREPLY=( $( compgen -d -- "$cur" ) )
                    return 0
                    ;;
                "-c"|"-l"|"-T"|"-i"|"-I")
                    # -c: get controlfile
                    # -l: get per-version info from this file
                    # -T: read variables here, not debian/substvars
                    # -i: <regexp> filter out files to ignore diffs of.
                    # -I: filter out files when building tarballs.
                    # return directory names and file names
                    COMPREPLY=( $( compgen -d -f ) )
                    return 0
                    ;;
                "-F")
                    # -F: force change log format
                    COMPREPLY=( $( ( cd /usr/lib/dpkg/parsechangelog; compgen -f "$cur" ) ) )
                    return 0
                    ;;
                "-V"|"-D")
                    # -V: set a substitution variable
                    # we don't know anything about possible variables or values
                    # so we don't try to suggest any completion.
                    COMPREPLY=()
                    return 0
                    ;;
                "-D")
                    # -D: override or add a .dsc field and value
                    # if $cur doesn't contain a = yet, suggest variable names
                    if echo -- "$cur" | grep -q "="; then
                        # $cur contains a "="
                        COMPREPLY=()
                        return 0
                    else
                        COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
                        return 0
                    fi
                    ;;
                "-U")
                    # -U: remove a field
                    # Suggest possible fieldnames
                    COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
                    return 0
                    ;;
                *)
                    COMPREPLY=( $packopts )
                    return 0
                    ;;
            esac
            return 0
            ;;
        *)
            # if seeing a partial option, return possible completions.
            if [ "$cur" = "-s" ]; then
                COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
                        "-sA" "-sK" "-sP" "-sU" "-sR" )
                return 0
            fi
            # else return all possible options.
            COMPREPLY=( $options )
            return 0
            ;;
    esac
} # _dpkg_source()

comp_install -F _dpkg_source  # Make completion persistent for subsequent invocations

_dpkg_source  # Generate completions for first invocation
