# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
# ex: ts=8 sw=8 noet filetype=sh
#
# bash completion for lvm

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

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

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

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

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

_args()
{
	args=0
	if [[ "${COMP_WORDS[0]}" == lvm ]]; then
		offset=2
	else
		offset=1
	fi
	for (( i=$offset; i < COMP_CWORD; i++ )); do
		if [[ "${COMP_WORDS[i]}" != -* ]]; then
			args=$(($args + 1))
		fi
	done
}

_lvmdiskscan()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h -? --help -l \
			--lvmpartition -v --verbose --version' -- $cur ) )
	fi
}
complete -F _lvmdiskscan lvmdiskscan

_pvscan()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -e \
			--exported -n --novolumegroup -h -? \
			--help --ignorelockingfailure -P \
			--partial -s --short -u --uuid -v \
			--verbose --version' -- $cur ) )
	fi
}
complete -F _pvscan pvscan

_pvs()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(o|O|-options|-sort))
			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 0
			;;
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--aligned -a --all -d --debug \
			-h -? --help --ignorelockingfailure --noheadings \
			--nosuffix -o --options -O --sort \
			--separator --unbuffered --units \
			-v --verbose --version' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvs pvs

_pvdisplay()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \
			-v --verbose -d --debug -h --help --version' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvdisplay pvdisplay

_pvchange()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|x|-autobackup|--allocatable))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -A --autobackup \
			-d --debug -h --help -t --test -u --uuid -x \
			--allocatable -v --verbose --addtag --deltag \
			--version' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvchange pvchange

_pvcreate()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

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

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--restorefile -d --debug -f \
			--force -h -? --help --labelsector -M --metadatatype \
			--metadatacopies --metadatasize \
			--setphysicalvolumesize -t --test -u --uuid uuid -v \
			--verbose -y --yes --version' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvcreate pvcreate

_pvmove()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(n|-name))
			_logicalvolumes
			return 0
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--abort -A --autobackup \
			-b --background -d --debug -f --force -h -? \
			--help -i --interval -t --test -v --verbose \
			--version -n --name' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvmove pvmove

_pvremove()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -f --force -h -? \
			--help -y --yes -t --test -v --verbose \
			--version' -- $cur ) )
	else
		_physicalvolumes
	fi
}
complete -F _pvremove pvremove

_vgscan()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h --help \
			--ignorelockingfailure --mknodes -P \
			--partial -v --verbose --version' -- $cur ) )
	fi
}
complete -F _vgscan vgscan

_vgs()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(o|O|-options|-sort))
			COMPREPLY=( $( compgen -W 'vg_fmt vg_uuid vg_name \
				vg_attr vg_size vg_free vg_sysid \
				vg_extent_size vg_extent_count vg_free_count \
				max_lv max_pv pv_count lv_count snap_count \
				vg_seqno' -- $cur ) )
			return 0
			;;
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--aligned -d --debug \
			-h --help --ignorelockingfailure --noheadings \
			--nosuffix -o --options -O --sort -P --partial \
			--separator --unbuffered --units \
			-v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgs vgs

_vgdisplay()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \
			-P --partial -A --activevolumegroups -v --verbose \
			-d --debug -h --help --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgdisplay vgdisplay

_vgchange()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(a|A|x|-available|-autobackup|-resizeable))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup --alloc -P \
			--partial -d --debug -h --help --ignorelockingfailure \
			-t --test -u --uuid -v --verbose --version -a \
			--available -x --resizeable -l --logicalvolume \
			--addtag --deltag' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgchange vgchange

_vgcreate()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(M|-metadatatype))
			COMPREPLY=( $( compgen -W '1 2' -- $cur ) )
			return 0
			;;
		-@(s|-physicalextentsize))
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup --addtag \
			--alloc -d --debug -h --help -l --maxlogicalvolumes \
			-M --metadatatype -p --maxphysicalvolumes -s \
			--physicalextentsize -t --test -v --verbose \
			--version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 ]; then
			_volumegroups
		else
			_physicalvolumes
		fi
	fi
}
complete -F _vgcreate vgcreate

_vgremove()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h --help -t --test \
		-v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgremove vgremove

_vgrename()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \
			-? --help -t --test -v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgrename vgrename

_vgreduce()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -A --autobackup -d \
			--debug -h --help --removemissing -t --test -v \
			--verbose --version' -- $cur ) )

	else
		_args
		if [ $args -eq 0 ]; then
			_volumegroups
		else
			_physicalvolumes
		fi
	fi
}
complete -F _vgreduce vgreduce

_vgextend()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(L|-size))
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \
			-? --help -t --test -v --verbose --version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 ]; then
			_volumegroups
		else
			_physicalvolumes
		fi
	fi
}
complete -F _vgextend vgextend

_vgport()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -d --debug -h \
			-? --help -v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgport vgimport vgexport

_vgck()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h \
			-? --help -v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgck vgck

_vgconvert()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(M|-metadatatype))
			COMPREPLY=( $( compgen -W '1 2' -- $cur ) )
			return 0
			;;
		--metadatacopies)
			COMPREPLY=( $( compgen -W '0 1 2' -- $cur ) )
			return 0
			;;
		--metadatasize)
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h --help --labelsector \
			-M --metadatatype --metadatacopies --metadatasize \
			-t --test -v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgconvert vgconvert

_vgcfgbackup()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(f|-file))
			_filedir
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -f --file -h --help \
			--ignorelockingfailure -P --partial -v --verbose \
			--version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgcfgbackup vgcfgbackup

_vgcfgrestore()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(f|-file))
			_filedir
			return 0
			;;
		-@(M|-metadatatype))
			COMPREPLY=( $( compgen -W '1 2' -- $cur ) )
			return 0
			;;
		-@(n|-name))
			_volumegroups
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -f --file -l --list \
			-h --help -M --Metadatatype -n --name -t --test \
			-v --verbose --version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgcfgrestore vgcfgrestore

_vgmerge()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug \
			-h --help -l --list -t --test -v --verbose \
			--version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgmerge vgmerge

_vgsplit()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(M|-metadatatype))
			COMPREPLY=( $( compgen -W '1 2' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug \
			-h --help -l --list -M --metadatatype -t --test \
			-v --verbose --version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 -o $args -eq 1 ]; then
			_volumegroups
		else
			_physicalvolumes
		fi
	fi
}
complete -F _vgsplit vgsplit

_vgmknodes()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-d --debug -h --help -v --verbose \
			--version' -- $cur ) )
	else
		_volumegroups
	fi
}
complete -F _vgmknodes vgmknodes

_lvscan()
{
	local cur

	COMPREPLY=()
	cur=`_get_cword`

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-b --blockdevice -d --debug \
			-h -? --help --ignorelockingfailure -P \
			--partial -v --verbose --version' -- $cur ) )
	fi
}
complete -F _lvscan lvscan

_lvs()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(o|O|-options|-sort))
			COMPREPLY=( $( compgen -W 'lv_uuid lv_name \
				lv_attr lv_minor lv_size seg_count \
				origin snap_percent segtype stripes \
				stripesize chunksize seg_start \
				seg_size' -- $cur ) )
			return 0
			;;
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--aligned -d --debug \
			-h --help --ignorelockingfailure --noheadings \
			--nosuffix -o --options -O --sort -P --partial \
			--segments --separator --unbuffered --units \
			-v --verbose --version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvs lvs

_lvdisplay()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		--units)
			_units
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \
			-P --partial -m --maps -v --verbose -d --debug -h \
			--help --version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvdisplay lvdisplay

_lvchange()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(a|A|C|M|-available|-autobackup|-continguous|-persistent))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(p|-permission))
			COMPREPLY=( $( compgen -W 'r rw' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -a --available \
			--addtag --alloc -C --contiguous -d --debug --deltag \
			-f --force -h --help --ignorelockingfailure -M \
			--persistent --major major --minor minor -P --partial \
			-p --permission -r --readahead --refresh -t --test \
			-v --verbose --version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvchange lvchange

_lvcreate()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|C|M|Z|-autobackup|-continguous|-persistent|-zero))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(L|-size))
			_sizes
			return 0
			;;
		-@(p|-permission))
			COMPREPLY=( $( compgen -W 'r rw' -- $cur ) )
			return 0
			;;
		-@(n|-name))
			_logicalvolumes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup --addtag --alloc \
			-C --contiguous -d --debug -h -? --help -i --stripes \
			-I --stripesize -l --extents -L --size -M --persistent \
			--major --minor -n --name -p --permission -r \
			--readahead -t --test --type -v --verbose -Z --zero \
			--version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 ]; then
			_volumegroups
		else
			_physicalvolumes
		fi
	fi
}
complete -F _lvcreate lvcreate

_lvremove()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -f \
			--force -h -?  --help -t --test -v --verbose \
			--version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvremove lvremove

_lvrename()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \
			-? --help -t --test -v --verbose --version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvrename lvrename

_lvreduce()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(L|-size))
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup -d \
			--debug -f --force -h --help -l --extents \
			-L --size -n --nofsck -r --resizefs -t --test \
			-v --verbose --version' -- $cur ) )
	else
		_logicalvolumes
	fi
}
complete -F _lvreduce lvreduce

_lvresize()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(L|-size))
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup --alloc -d \
			--debug -h --help -i --stripes -I --stripesize \
			-l --extents -L --size -n --nofsck -r --resizefs \
			-t --test --type -v --verbose --version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 ]; then
			_logicalvolumes
		else
			_physicalvolumes
		fi
	fi
}
complete -F _lvresize lvresize

_lvextend()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case "$prev" in
		-@(A|-autobackup))
			COMPREPLY=( $( compgen -W 'y n' -- $cur ) )
			return 0
			;;
		-@(L|-size))
			_sizes
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-A --autobackup --alloc -d \
			--debug -h --help -i --stripes -I --stripesize \
			-l --extents -L --size -n --nofsck -r --resizefs \
			-t --test --type -v --verbose --version' -- $cur ) )
	else
		_args
		if [ $args -eq 0 ]; then
			_logicalvolumes
		else
			_physicalvolumes
		fi
	fi
}
complete -F _lvextend lvextend

_lvm()
{
	local prev

	COMPREPLY=()
	cur=`_get_cword`

	if [ $COMP_CWORD -eq 1 ]; then
		COMPREPLY=( $( compgen -W 'dumpconfig help lvchange \
			lvcreate lvdisplay lvextend lvmchange \
			lvmdiskscan lvmsadc lvmsar lvreduce \
			lvremove lvrename lvresize lvs lvscan \
			pvchange pvcreate pvdata pvdisplay pvmove \
			pvremove pvresize pvs pvscan vgcfgbackup \
			vgcfgrestore vgchange vgck vgconvert \
			vgcreate vgdisplay vgexport vgextend \
			vgimport vgmerge vgmknodes vgreduce \
			vgremove vgrename vgs vgscan vgsplit \
			version' -- $cur ) )
	else
		case ${COMP_WORDS[1]} in
			pvchange)
				_pvchange
				;;
			pvcreate)
				_pvcreate
				;;
			pvdisplay)
				_pvdisplay
				;;
			pvmove)
				_pvmove
				;;
			pvremove)
				_pvremove
				;;
			pvresize)
				_pvresize
				;;
			pvs)
				_pvs
				;;
			pvscan)
				_pvscan
				;;
			vgcfgbackup)
				_vgcfgbackup
				;;
			vgcfgrestore)
				_vgcfgrestore
				;;
			vgchange)
				_vgchange
				;;
			vgck)
				_vgck
				;;
			vgconvert)
				_vgconvert
				;;
			vgcreate)
				_vgcreate
				;;
			vgdisplay)
				_vgdisplay
				;;
			vgexport)
				_vgexport
				;;
			vgextend)
				_vgextend
				;;
			vgimport)
				_vgimport
				;;
			vgmerge)
				_vgmerge
				;;
			vgmknodes)
				_vgmknodes
				;;
			vgreduce)
				_vgreduce
				;;
			vgremove)
				_vgremove
				;;
			vgrename)
				_vgrename
				;;
			vgs)
				_vgs
				;;
			vgscan)
				_vgscan
				;;
			vgsplit)
				_vgsplit
				;;
			lvchange)
				_lvchange
				;;
			lvcreate)
				_lvcreate
				;;
			lvdisplay)
				_lvdisplay
				;;
			lvextend)
				_lvextend
				;;
			lvreduce)
				_lvreduce
				;;
			lvremove)
				_lvremove
				;;
			lvrename)
				_lvrename
				;;
			lvresize)
				_lvresize
				;;
			lvs)
				_lvs
				;;
			lvscan)
				_lvscan
				;;
		esac
	fi
}
complete -F _lvm lvm
}
