0x00180000
     ˆÅÍ„í8ÿÂË ?÷     # bash completion for lvm                                  -*- shell-script -*-

_lvm_filedir()
{
    cur=${cur:-/dev/}
    _filedir
}

_lvm_volumegroups()
{
    COMPREPLY=($(compgen -W "$(vgscan 2>/dev/null |
        command sed -n -e 's|.*Found.*"\(.*\)".*$|\1|p')" -- "$cur"))
}

_lvm_physicalvolumes_all()
{
    COMPREPLY=($(compgen -W "$(pvscan 2>/dev/null |
        command sed -n -e 's|^.*PV \([^ ]*\) .*|\1|p')" -- "$cur"))
}

_lvm_physicalvolumes()
{
    COMPREPLY=($(compgen -W "$(pvscan 2>/dev/null |
        command sed -n -e 's|^.*PV \(.*\) VG.*$|\1|p')" -- "$cur"))
}

_lvm_logicalvolumes()
{
    COMPREPLY=($(compgen -W "$(lvscan 2>/dev/null |
        command sed -n -e "s|^.*'\(.*\)'.*$|\1|p")" -- "$cur"))
    if [[ $cur == /dev/mapper/* ]]; then
        _filedir
        local i
        for i in "${!COMPREPLY[@]}"; do
            [[ ${COMPREPLY[i]} == */control ]] && unset 'COMPREPLY[i]'
        done
    fi
}

_lvm_units()
{
    COMPREPLY=($(compgen -W 'h s b k m g t H K M G T' -- "$cur"))
}

_lvm_sizes()
{
    COMPREPLY=($(compgen -W 'k K m M g G t T' -- "$cur"))
}

# @param $1 glob matching args known to take an argument
_lvm_count_args()
{
    args=0
    local offset=1
    if [[ ${words[0]} == lvm ]]; then
        offset=2
    fi
    local i prev=${words[offset - 1]}
    for ((i = offset; i < cword; i++)); do
        # shellcheck disable=SC2053
        if [[ ${words[i]} != -* && $prev != $1 ]]; then
            ((args++))
        fi
        prev=${words[i]}
    done
}

_lvmdiskscan()
{
    local cur prev words cword
    _init_completion || return

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    fi
} &&
    complete -F _lvmdiskscan lvmdiskscan

_pvscan()
{
    local cur prev words cword
    _init_completion || return

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    fi
} &&
    complete -F _pvscan pvscan

_pvs()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        --options | --sort | -!(-*)[oO])
            COMPREPLY=($(compgen -W 'pv_fmt pv_uuid pv_size pv_free pv_used
                pv_name pv_attr pv_pe_count pv_pe_alloc_count' -- "$cur"))
            return
            ;;
        --units)
            _lvm_units
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    else
        _lvm_physicalvolumes_all
    fi
} &&
    complete -F _pvs pvs

_pvdisplay()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        --units)
            _lvm_units
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    else
        _lvm_physicalvolumes_all
    fi
} &&
    complete -F _pvdisplay pvdisplay

_pvchange()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        --autobackup | --allocatable | -!(-*)[Ax])
            COMPREPLY=($(compgen -W 'y n' -- "$cur"))
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    else
        _lvm_physicalvolumes_all
    fi
} &&
    complete -F _pvchange pvchange

_pvcreate()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        --restorefile)
            _filedir
            return
            ;;
        --metadatatype | -!(-*)M)
            COMPREPLY=($(compgen -W '1 2' -- "$cur"))
            return
            ;;
        --metadatacopies)
            COMPREPLY=($(compgen -W '0 1 2' -- "$cur"))
            return
            ;;
        --metadatasize | --setphysicalvolumesize)
            _lvm_sizes
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
    else
        _lvm_filedir
    fi
} &&
    complete -F _p