mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-21 00:01:26 +01:00
131 lines
3 KiB
Text
131 lines
3 KiB
Text
#compdef vserver
|
|
|
|
_vserver () {
|
|
|
|
# local variables
|
|
local curcontext="$curcontext" state line expl ret=1
|
|
local cmd=$words[3]
|
|
|
|
# dispatch
|
|
case "$cmd" in
|
|
apt-cache|apt-config|apt-get)
|
|
compset -n 3
|
|
_dispatch $cmd:t $cmd $cmd:t -default- && ret=0
|
|
;;
|
|
exec)
|
|
_arguments -C \
|
|
'1: :->vsnames' \
|
|
'2: :->cmds' \
|
|
'3:command name: _command_names -e' \
|
|
'*::arguments: _normal' && ret=0
|
|
;;
|
|
stop|restart|condrestart|enter|running|status)
|
|
_arguments -C \
|
|
'1: :->vsnames' \
|
|
'2: :->cmds' \
|
|
'*::arguments: _message "no more arguments"' && ret=0
|
|
;;
|
|
*)
|
|
_arguments -C \
|
|
'(-)--help[print help information]' \
|
|
'(- *)--version[print client version information]' \
|
|
'1: :->vsnames' \
|
|
'2: :->cmds' \
|
|
'*:: :->args' && ret=0
|
|
;;
|
|
esac
|
|
|
|
# cache initialization
|
|
if [[ -n "$state" ]]; then
|
|
if (( ! $+_cache_vserver_cfgdir )); then
|
|
typeset -g _cache_vserver_cfgdir_initialized
|
|
_vserver_cache_cfgdir
|
|
fi
|
|
if (( ! $+_cache_vserver_vsnames )); then
|
|
typeset -g _cache_vserver_vsnames_initialized
|
|
_vserver_cache_vsnames
|
|
fi
|
|
if (( ! $+_cache_vserver_cmds )); then
|
|
typeset -g _cache_vserver_cmds_initialized
|
|
_vserver_cache_cmds
|
|
fi
|
|
fi
|
|
|
|
case "$state" in
|
|
vsnames)
|
|
_wanted commands expl 'vserver name' _vserver_vsnames && ret=0
|
|
;;
|
|
cmds)
|
|
_wanted commands expl 'vserver command' _vserver_commands && ret=0
|
|
;;
|
|
args)
|
|
local args
|
|
if $+args; then
|
|
_arguments "$args[@]" && ret=0
|
|
else
|
|
ret=0
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
return ret
|
|
}
|
|
|
|
(( $+functions[_vserver_commands] )) ||
|
|
_vserver_commands() {
|
|
compadd "$@" -k _cache_vserver_cmds || compadd "$@" ${(s.:.)_cache_vserver_cmds}
|
|
}
|
|
|
|
(( $+functions[_svk_list_patches] )) ||
|
|
_vserver_vsnames() {
|
|
local expl
|
|
_wanted vserver expl 'vserver name' compadd -S '' $_cache_vserver_vsnames[@]
|
|
}
|
|
|
|
(( $+functions[_vserver_cache_cfgdir] )) ||
|
|
_vserver_cache_cfgdir() {
|
|
if [[ "$_cache_vserver_cfgdir_initialized" != true ]]; then
|
|
typeset -ga _cache_vserver_cfgdir
|
|
_cache_vserver_cfgdir=`vserver-info info SYSINFO | grep '^ *cfg-Directory' | awk '{print $2}'`
|
|
_cache_vserver_cfgdir_initialized=true
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_vserver_cache_vsnames] )) ||
|
|
_vserver_cache_vsnames() {
|
|
if [[ "$_cache_vserver_vsnames_initialized" != true ]]; then
|
|
typeset -ga _cache_vserver_vsnames
|
|
_cache_vserver_vsnames=( $(ls -d $_cache_vserver_cfgdir/*/ | sed -e s,$_cache_vserver_cfgdir,, | tr -d '/') )
|
|
_cache_vserver_vsnames_initialized=true
|
|
fi
|
|
}
|
|
|
|
(( $+functions[_vserver_cache_cmds] )) ||
|
|
_vserver_cache_cmds() {
|
|
if [[ "$_cache_vserver_cmds_initialized" != true ]]; then
|
|
typeset -ga _cache_vserver_cmds
|
|
_cache_vserver_cmds=(
|
|
start
|
|
stop
|
|
restart
|
|
condrestart
|
|
suexec
|
|
exec
|
|
enter
|
|
chkconfig
|
|
running
|
|
status
|
|
build
|
|
unify
|
|
pkg
|
|
apt-get
|
|
apt-config
|
|
apt-cache
|
|
rpm
|
|
pkgmgmt
|
|
)
|
|
_cache_vserver_cmds_initialized=true
|
|
fi
|
|
}
|
|
|
|
_vserver "$@"
|