Newer
Older
# This file is part of Installsystems.
#
# Installsystems is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Installsystems is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Installsystems. If not, see <http://www.gnu.org/licenses/>.
# list local repositories
(( $+functions[_installsystems_local_repo] )) ||
_installsystems_local_repo() {
local repos expl
repos=($(_call_program options is --quiet --no-color --no-sync repo --local 2>/dev/null))
_wanted list expl 'local repo' compadd ${expl} - ${repos}
}
# list all defined repositories
(( $+functions[_installsystems_repo] )) ||
_installsystems_repo() {
local repos expl
repos=($(_call_program options is --quiet --no-color --no-sync repo 2>/dev/null))
_wanted list expl 'repo' compadd ${expl} - ${repos}
}
# list all images available in any online repositories
(( $+functions[_installsystems_remote_images] )) ||
_installsystems_remote_images() {
local images expl
images=($(_call_program options is --quiet --no-color --no-sync list "'*/*:*'" 2>/dev/null))
_wanted list expl 'remote image' compadd ${expl} - ${images}
}
# list all images available in any local online repositories
(( $+functions[_installsystems_local_images] )) ||
_installsystems_local_images() {
local localrepos expl images
localrepos=${(j:,:)${$(_call_program options is --quiet --no-color --no-sync repo --local 2>/dev/null)}}
images=($(_call_program options is --quiet --no-color --no-sync -s ${localrepos} -f ${localrepos} list "'*/*:*'" 2>/dev/null))
_wanted list expl 'local image' compadd ${expl} - ${images}
}
# list all local package images
(( $+functions[_installsystems_package_images] )) ||
_installsystems_package_images() {
local expl images
_wanted file expl 'package image' _files -g '*.isimage'
}
# list package and remote images
(( $+functions[_installsystems_images] )) ||
_installsystems_images() {
_installsystems_remote_images
_installsystems_package_images
}
# list installsystems commands
(( $+functions[_is_commands] )) ||
_is_commands() {
local expl
_wanted list expl 'is command' compadd ${expl} - ${_is_cmds%:*}
}
_is() {
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
typeset -A opt_args
local curcontext="$curcontext" state line expl ret=1
local update_policy
zstyle -s ":completion:*:*:$service:*" cache-policy update_policy
if [[ -z "$update_policy" ]]; then
zstyle ":completion:*:*:$service:*" cache-policy _is_caching_policy
fi
local loglevel='-d --debug -q --quiet -v --verbosity'
_arguments -C \
'(- 1 *)'{-h,--help}'[show this help message and exit]' \
'(- 1 *)'{-V,--version}"[show program's version number and exit]" \
"($loglevel)"{-v+,--verbosity}'[define verbosity level]:verbosity level:((0\:quiet 1\:normal 2\:debug))' \
"($loglevel)"{-d,--debug}'[active debug mode]' \
"($loglevel)"{-q,--quiet}'[active quiet mode]' \
'(-c --config)'{-c,--config}'[config file path]:installsystems config:_files' \
'(-R --repo-config)'{-R,--repo-config}'[repository config file path]:repository config:_files' \
'(-s --repo-search)'{-s,--repo-search}'[search for images inside those repositories]:repository:->repolist' \
'(-f --repo-filter)'{-f,--repo-filter}'[filter repositories by name]:repository:->repolist' \
'(-r --repo-path)'{-r,--repo-path}'[define a temporary repository]:repository directory:_files -/' \
'(-T --repo-timeout)'{-T+,--repo-timeout}'[repository access timeout]:timeout (in second):' \
'(-C --cache)'{-C,--cache}'[path of the repository cache]:cache directory:_files -/' \
'(-t --timeout)'{-t+,--timeout}'[socket timeout]:timeout (in second):' \
'--no-cache[not use persistent database caching]' \
"--no-sync[doesn't sync repository database cache]" \
'--no-color[dot not display colored output]' \
'--nice[nice of the process]:priority:' \
'--ionice-class[ionice class of the process (default: none)]:ionice class:(none rt be idle)' \
'--ionice-level[ionice class level of the process]:ionice level:' \
'(-): :->cmds' \
'(-)*:: :->args' && return
if [[ -n $state ]] && (( ! $+_is_cmds )); then
typeset -gHa _is_cmds
if _cache_invalid is-cmds || ! _retrieve_cache is-cmds; then
_is_cmds=(
${${${(f)${${"$(_call_program commands is --help 2>/dev/null)"#l#*positional arguments:*{*}}%%optional arguments:*}}/(#s)[[:space:]]#(#b)([-a-z_]##)[[:space:]]##([a-z]##)/$match[1]:$match[2]:l}/ */}
)
_store_cache is-cmds _is_cmds
fi
fi
case $state in
cmds)
_describe -t commands 'installsystems command' _is_cmds
;;
repolist)
local repos
repos=($(_call_program options is --quiet --no-color --no-sync repo 2>/dev/null))
_values -s , 'repository' $repos && ret=0
;;
args)
local cmd args usage idx
cmd=$words[1]
if (( $#cmd )); then
curcontext="${curcontext%:*:*}:is-${cmd}:"
args=('(- 1 *)'{-h,--help}'[show this help message and exit]')
case $cmd in;
(add)
args+=(
'(-p --preserve)'{-p,--preserve}"[don't remove image after adding to database]"
'1:repository:_installsystems_local_repo'
'*:image path:_installsystems_package_images'
)
;;
(build)
args+=(
'(-c --no-check)'{-c,--no-check}'[do not check compilation before adding scripts]'
'(-C --chdir)'{-C,--chdir}'[build image inside source image directory]'
'(-f --force)'{-f,--force}'[rebuild image if already exists]'
'(-p --payload)'{-p,--payload}'[rebuild payloads if already exists]'
'(-s --no-script)'{-s,--no-script}"[doesn't execute build script]"
'*:image path:_files -/'
)
;;
(cat)
args+=(
'1:image:_installsystems_images'
'*:file (globbing allowed)'
)
;;
(changelog)
args+=(
'(-v --all-version)'{-v,--all-version}'[display changelog for all versions]'
'*:image:_installsystems_images'
)
;;
(check)
args+=(
'*:repository:_installsystems_local_repo'
)
;;
(chroot)
args+=(
Nicolas Delvaux
committed
'(-m --no-mount)'{-m,--no-mount}'[disable mounting of /{proc,dev,sys} inside chroot]'
'(-s --shell)'{-s,--shell}'[shell to call inside chroot]:shell'
'1:path:_files -/'
)
;;
(clean)
args+=(
'(-f --force)'{-f,--force}'[clean repository without confirmation]'
'*:repository:_installsystems_local_repo'
)
;;
(copy)
args+=(
'(-f --force)'{-f,--force}'[copy image without confirmation]'
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
'*: : _alternative "pattern:image:_installsystems_remote_images" "repo:repository:_installsystems_local_repo"'
)
;;
(del)
args+=(
'(-f --force)'{-f,--force}'[delete image without confirmation]'
'(-p --preserve)'{-p,--preserve}"[preserve payloads. doesn't remove it from repository]"
'*:image:_installsystems_local_images'
)
;;
(diff)
args+=(
'1: : _alternative "pattern:image:_installsystems_images" "repo:repository:_installsystems_repo"'
'2: : _alternative "pattern:image:_installsystems_images" "repo:repository:_installsystems_repo"'
)
;;
(extract)
args+=(
'(-f --force)'{-f,--force}'[overwrite existing destinations]'
'(-g --gen-description)'{-g,--gen-description}'[generate a description file from metadata]'
'(-p --payload)'{-p,--payload}'[extract payloads]'
'1:image: _installsystems_images'
'2:path:_files -/'
)
;;
(get)
args+=(
'(-f --force)'{-f,--force}'[overwrite existing destinations]'
'(-I --no-image)'{-I,--no-image}'[do not get image]'
'(-p --payload)'{-p,--payload}'[get payloads]'
'*:image:_installsystems_remote_images'
)
;;
(help)
args+=(
'1:command:_is_commands'
)
;;
(info)
args+=(
'(-a --all)'{-a,--all}'[display all information]'
'(-j, --json)'{-j,--json}'[output is formated in json]'
'(-c --changelog)'{-c,--changelog}'[display image changelog]'
'(-f --files)'{-f,--files}'[display image files]'
'(-p --payloads)'{-p,--payloads}'[display image payloads]'
'*:image:_installsystems_images'
)
;;
(init)
args+=(
'*:repository:_installsystems_local_repo'
)
;;
(install)
args+=(
"--dry-run[doesn't execute setup scripts]"
'1:image:_installsystems_images'
'2:target:_files -/'
)
;;
(list)
args+=(
'(-A --author)'{-A,--author}'[display image author]'
'(-d --date)'{-d,--date}'[display image date]'
'(-D --description)'{-D,--description}'[display image description]'
'(-f --format)'{-f,--format}'[display image format]'
'(-i --is-min-version)'{-i,--is-min-version}'[display minimum Installsystems version required]'
'(-j --json)'{-j,--json}'[output is formated in json]'
'(-l --long)'{-l,--long}'[long display]'
'(-m --md5)'{-m,--md5}'[display image md5]'
'(-s --size)'{-s,--size}'[display image size]'
'(-u --url)'{-u,--url}'[display image url]'
'*:image:_installsystems_remote_images'
)
;;
'(-f --files)'{-f,--files}'[set the motd from a file]: motd:_files'
'(-s --set)'{-s,--set}'[set the motd from command line]'
'(-r --remove)'{-r,--remove}'[remove the motd]'
'*:repository:_installsystems_local_repo'
(move)
args+=(
'(-f --force)'{-f,--force}'[move image without confirmation]'
'1:image:_installsystems_local_images'
'*: : _alternative "pattern:image:_installsystems_local_images" "repo:repository:_installsystems_local_repo"'
)
;;
(new)
args+=(
'(-f --force)'{-f,--force}'[overwrite existing source image]'
'1:path:_files -/'
)
;;
(payload)
args+=(
'(-j --json)'{-j,--json}'[output is formated in json]'
'(-i --images)'{-i,--images}'[list images using payload]'
'*:payload (checksum)'
)
;;
(prepare_chroot)
args+=(
Nicolas Delvaux
committed
'(-m --no-mount)'{-m,--no-mount}'[disable mounting of /{proc,dev,sys}]'
'1:path:_files -/'
)
;;
(repo)
args+=(
'(-j --json)'{-j,--json}'[output is formated in json]'
'(-l --local)'{-l,--local}'[list local repository (filter)]'
'(-r --remote)'{-r,--remote}'[list remote repository (filter)]'
'(-o --online)'{-o,--online}'[list online repository (filter)]'
'(-O --offline)'{-O,--offline}'[list offline repository (filter)]'
'(-s --state)'{-s,--state}'[display repository state (online/offline/local/remote)]'
'(-u --url)'{-u,--url}'[display repository url]'
'(-U --uuid)'{-U,--uuid}'[display repository UUID]'
'(-v --version)'{-v,--version}'[display repository version]'
'--purge[remove cache databases]'
'*:repo:_installsystems_repo'
)
;;
(search)
args+=(
'1:search pattern'
)
;;
(unprepare_chroot)
args+=(
Nicolas Delvaux
committed
'(-m --no-umount)'{-m,--no-umount}'[disable unmounting of /{proc,dev,sys}]'
args+=(
'1:repo:_installsystems_local_repo'
)
;;
esac
_arguments -s -w "$args[@]" && ret=0
else
_message "unknown is command: $words[1]"
fi
;;
esac
return ret
}
_is_caching_policy() {
[[ =$service -nt $1 ]]
}
_is "$@"
# ex: ts=3 sw=3 et filetype=zsh