about summary refs log tree commit diff
path: root/Completion/Linux/Command/_vserver
blob: 2401387e555e354818e2c345f83d4cbde752008b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#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 "$@"