# bash completion for quota-tools                          -*- shell-script -*-

_user_or_group()
{
    local i

    # complete on groups if -g was given
    for (( i=1; i < cword; i++ )); do
        if [[ "${words[i]}" == -@(g|-group) ]]; then
            COMPREPLY=( $( compgen -g -- "$cur" ) )
            return 0
        fi
    done

    # otherwise complete on users
    COMPREPLY=( $( compgen -u -- "$cur" ) )
}

_quota_parse_help()
{
    local opts=$( _parse_help "$1" )
    [[ $opts ]] || opts=$( _parse_usage "$1" ) # non-GNU?
    COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) )
    [[ $COMPREPLY == *= ]] && compopt -o nospace
}

_quota_formats()
{
    COMPREPLY=( $( compgen -W 'vfsold vfsv0 rpc xfs' -- "$cur" ) )
}

_filesystems()
{
    #  Only list filesystems starting with "/", otherwise we also get
    #+ "binfmt_misc", "proc", "tmpfs", ...
    COMPREPLY=( $( compgen -W "$(awk '/^\// {print $1}' /etc/mtab)" \
        -- "$cur" ) )
}

_quota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F|--format)
            _quota_formats
            return 0
            ;;
        -h|--help|-V|--version)
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        _quota_parse_help "$1"
    else
        _user_or_group
    fi
} &&
complete -F _quota -o default quota

_setquota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F|--format)
            _quota_formats
            return 0
            ;;
        -p|--prototype)
            _user_or_group
            return 0
            ;;
        -h|--help|-V|--version)
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        _quota_parse_help "$1"
    else
        local args
        _count_args

        case $args in
            1)
                _user_or_group
                ;;
            2)
                _filesystems
                ;;
        esac

    fi
} &&
complete -F _setquota -o default setquota

_edquota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F|--format)
            _quota_formats
            return 0
            ;;
        -f|--filesystem)
            _filesystems
            return 0
            ;;
        -p|--prototype)
            _user_or_group
            return 0
            ;;
        -h|--help|-V|--version)
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        _quota_parse_help "$1"
    else
        _user_or_group
    fi
} &&
complete -F _edquota -o default edquota

_quotacheck()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F|--format)
            _quota_formats
            return 0
            ;;
        -h|--help|-V|--version)
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        _quota_parse_help "$1"
    else
        _filesystems
    fi
} &&
complete -F _quotacheck -o default quotacheck repquota

_quotaon()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F|--format)
            _quota_formats
            return 0
            ;;
        -x|--xfs-command)
            COMPREPLY=( $( compgen -W 'delete enforce' -- "$cur" ) )
            return 0
            ;;
        -h|--help|-V|--version)
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        _quota_parse_help "$1"
    else
        _filesystems
    fi
} &&
complete -F _quotaon -o default quotaon quotaoff

# ex: ts=4 sw=4 et filetype=sh
