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

have quota && {
_user_or_group()
{
	local i

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

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

_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

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
	esac
	
	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-F --format= -g --group -u --user -v --verbose \
			-s --human-readable -p --raw-grace -i --no-autofs -l --local-only \
			-A --all-nfs -m --no-mixed-pathnames -q --quiet -Q --quiet-refuse \
			-w --no-wrap' -- $cur ) )
	else
		_user_or_group
	fi
}
complete -F _quota $default quota

_setquota()
{
	local cur prev

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \
			-F --format= -g --group -u --user -p --prototype= -b --batch \
			-c --continue-batch -t --edit-period -T --edit-times -a --all' -- $cur ) )
	else
		_count_args

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

	fi
}
complete -F _setquota $default setquota

_edquota()
{
	local cur prev

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
		-@(f|-filesystem))
			_filesystems
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \
			-g --group -u --user -p --prototype= -F --format= -f --filesystem \
			-t --edit-period -T --edit-times' -- $cur ) )
	else
		_user_or_group
	fi
}
complete -F _edquota $default edquota

_quotacheck()
{
	local cur prev

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-b --backup -v --verbose -d --debug \
			-g --group -u --user -c --create-files -f --force -i \
			--interactive -n --use-first-dquot -M --try-remount -m \
			--no-remount -R --exclude-root -F --format= -a --all' \
			-- $cur ) )
	else
		_filesystems
	fi
}
complete -F _quotacheck $default quotacheck

_repquota()
{
	local cur prev

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -v --verbose -s --human-readable \
			-c --batch-translation -C --no-batch-translation -t \
			--truncate-names -n --no-names -p --raw-grace -i --no-autofs \
			-u --user -g --group -F --format=' -- $cur ) )
	else
		_filesystems
	fi
}
complete -F _repquota $default repquota

_quotaon()
{
	local cur prev

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

	echo --$cmd--
	case $prev in
		-F)
			_quota_formats
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \
			-g --group -f --off -p --print-state -F --format=' -- $cur ) )
	else
		_filesystems
	fi
}
complete -F _quotaon $default quotaon

_quotaoff()
{
	local cur prev

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

	case $prev in
		-F)
			_quota_formats
			return 0
			;;
		-@(x|-xfs-command))
			COMPREPLY=( $( compgen -W 'delete enforce' -- $cur ) )
			return 0
			;;
	esac

	if [[ "$cur" == *=* ]]; then
		prev=${cur/=*/}
		cur=${cur/*=/}
		case $prev in
			--format)
				_quota_formats
				return 0
				;;
		esac
	fi

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \
			-g --group -p --print-state -x --xfs-command -F --format=' \
			-- $cur ) )
	else
		_filesystems
	fi
}
complete -F _quotaoff $default quotaoff
}
