8
|
1 |
#compdef pkg
|
|
2 |
|
|
3 |
_pkg5_pkgs() {
|
|
4 |
local cache_policy cache_id=pkg5_installed_pkgs:$HOST:${pkg5_root//\//+}
|
|
5 |
typeset -a -g _pkg5_installed_pkgs
|
|
6 |
|
|
7 |
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
|
|
8 |
if [[ -z "$cache_policy" ]]; then
|
|
9 |
zstyle ":completion:${curcontext}:" cache-policy _pkg5_installed_caching_policy
|
|
10 |
fi
|
|
11 |
|
|
12 |
if ( [[ $#_pkg5_installed_pkgs -eq 0 ]] || _cache_invalid $cache_id ) && ! _retrieve_cache $cache_id; then
|
|
13 |
_pkg5_installed_pkgs=( $(
|
|
14 |
pkg -R $pkg5_root list -H | while read pkg junk; do
|
|
15 |
pkga=( ${(s:/:)pkg} )
|
|
16 |
for i in {1..$#pkga}; do
|
|
17 |
print ${(j:/:)${pkga[$i,-1]}}
|
|
18 |
done
|
|
19 |
done) )
|
|
20 |
_store_cache $cache_id _pkg5_installed_pkgs
|
|
21 |
fi
|
|
22 |
|
|
23 |
compadd "$@" - ${_pkg5_installed_pkgs}
|
|
24 |
}
|
|
25 |
|
|
26 |
_pkg5_pkgs_a() {
|
|
27 |
local cache_policy cache_id=pkg5_known_pkgs:$HOST:${pkg5_root//\//+}
|
|
28 |
typeset -a -g _pkg5_known_pkgs
|
|
29 |
|
|
30 |
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
|
|
31 |
if [[ -z "$cache_policy" ]]; then
|
|
32 |
zstyle ":completion:${curcontext}:" cache-policy _pkg5_known_caching_policy
|
|
33 |
fi
|
|
34 |
|
|
35 |
if ( [[ $#_pkg5_known_pkgs -eq 0 ]] || _cache_invalid $cache_id ) && ! _retrieve_cache $cache_id; then
|
|
36 |
_pkg5_known_pkgs=( $(
|
|
37 |
pkg -R $pkg5_root list -aH --no-refresh | while read pkg junk; do
|
|
38 |
pkga=( ${(s:/:)pkg} )
|
|
39 |
for i in {1..$#pkga}; do
|
|
40 |
print ${(j:/:)${pkga[$i,-1]}}
|
|
41 |
done
|
|
42 |
done) )
|
|
43 |
_store_cache $cache_id _pkg5_known_pkgs
|
|
44 |
fi
|
|
45 |
|
|
46 |
compadd "$@" - ${_pkg5_known_pkgs}
|
|
47 |
}
|
|
48 |
|
|
49 |
_pkg5_pubs() {
|
|
50 |
compadd "$@" - $(pkg -R $pkg5_root publisher -H | awk '{print $1}')
|
|
51 |
}
|
|
52 |
|
|
53 |
_pkg5_variants() {
|
|
54 |
compadd "$@" - $(pkg -R $pkg5_root variant -H | awk '{print $1}')
|
|
55 |
}
|
|
56 |
|
|
57 |
_pkg5_facets() {
|
|
58 |
compadd "$@" - $(pkg -R $pkg5_root facet -H | awk '{print $1}')
|
|
59 |
}
|
|
60 |
|
|
61 |
_pkg5_properties() {
|
|
62 |
compadd "$@" - $(pkg -R $pkg5_root property -H | awk '{print $1}')
|
|
63 |
}
|
|
64 |
|
|
65 |
_pkg5_known_caching_policy() {
|
|
66 |
[[ $pkg5_root/var/pkg/state/known/catalog.attrs -nt "$1" ]]
|
|
67 |
}
|
|
68 |
|
|
69 |
_pkg5_installed_caching_policy() {
|
|
70 |
[[ $pkg5_root/var/pkg/state/installed/catalog.attrs -nt "$1" ]]
|
|
71 |
}
|
|
72 |
|
|
73 |
_pkg5() {
|
|
74 |
local expl context state line pkg5_root
|
|
75 |
typeset -A opt_args
|
|
76 |
local -a subcmds pkg5_actions pkg5_cattr pkg5_sattr
|
|
77 |
|
|
78 |
subcmds=(
|
|
79 |
install uninstall list image-update refresh version
|
|
80 |
info search verify fix contents image-create history
|
|
81 |
{change-,}{variant,facet}
|
|
82 |
{{un,}set-,}property {{un,}set-,}publisher
|
|
83 |
purge-history rebuild-index
|
|
84 |
)
|
|
85 |
|
|
86 |
pkg5_actions=(
|
|
87 |
set depend dir driver file group hardlink legacy license link
|
|
88 |
signature unknown user
|
|
89 |
)
|
|
90 |
|
|
91 |
# Pseudo attributes for the contents subcommand
|
|
92 |
pkg5_cattr=(
|
|
93 |
action.hash action.key action.name action.raw
|
|
94 |
pkg.fmri pkg.name pkg.publisher pkg.shortfmri
|
|
95 |
)
|
|
96 |
|
|
97 |
# Pseudo attributes for the search subcommand
|
|
98 |
pkg5_sattr=(
|
|
99 |
$pkg5_cattr search.match search.match_type
|
|
100 |
)
|
|
101 |
|
|
102 |
if [[ $service == "pkg" ]]; then
|
|
103 |
_arguments -C -A "-*" \
|
|
104 |
'(-\? --help)'{-\?,--help}'[Help]' \
|
|
105 |
'-R[Root directory]:directory:_path_files -/' \
|
|
106 |
'*::command:->subcmd' && return 0
|
|
107 |
|
|
108 |
if (( CURRENT == 1 )); then
|
|
109 |
_wanted commands expl "pkg subcommand" compadd -a subcmds
|
|
110 |
return
|
|
111 |
fi
|
|
112 |
service="$words[1]"
|
|
113 |
curcontext="${curcontext%:*}=$service:"
|
|
114 |
fi
|
|
115 |
|
|
116 |
pkg5_root=${${${opt_args[-R]}:-$PKG_IMAGE}:-/}
|
|
117 |
|
|
118 |
case $service in
|
|
119 |
("install")
|
|
120 |
_arguments -A "-*" \
|
|
121 |
'-n[Dry run]' \
|
|
122 |
'-q[Quiet]' \
|
|
123 |
'-v[Verbose]' \
|
|
124 |
"--no-refresh[Don't refresh catalogs]" \
|
|
125 |
"--no-index[Don't reindex search database]" \
|
|
126 |
'*:package:_pkg5_pkgs_a'
|
|
127 |
;;
|
|
128 |
|
|
129 |
("uninstall")
|
|
130 |
_arguments -A "-*" \
|
|
131 |
'-n[Dry run]' \
|
|
132 |
'-q[Quiet]' \
|
|
133 |
'-r[Recursively uninstall dependencies]' \
|
|
134 |
'-v[Verbose]' \
|
|
135 |
"--no-index[Don't reindex search database]" \
|
|
136 |
'*:package:_pkg5_pkgs'
|
|
137 |
;;
|
|
138 |
|
|
139 |
("list")
|
|
140 |
_arguments -A "-*" \
|
|
141 |
'-H[Omit headers]' \
|
|
142 |
'-a[Show not-installed packages]' \
|
|
143 |
'-f[Show all versions]' \
|
|
144 |
'-n[Show newest versions]' \
|
|
145 |
'-s[Show summaries]' \
|
|
146 |
'-u[Show upgradable versions]' \
|
|
147 |
'-v[Show verbose pkg: FMRIs]' \
|
|
148 |
"--no-refresh[Don't refresh catalogs]" \
|
|
149 |
'*:package:_pkg5_pkgs_a'
|
|
150 |
;;
|
|
151 |
|
|
152 |
("image-update")
|
|
153 |
_arguments -A "-*" \
|
|
154 |
"-f[Don't check for pkg(5) updates]" \
|
|
155 |
'-n[Dry run]' \
|
|
156 |
'-q[Quiet]' \
|
|
157 |
'-v[Verbose]' \
|
|
158 |
'--be-name[Set new boot environment name]:name:' \
|
|
159 |
"--no-refresh[Don't refresh catalogs]" \
|
|
160 |
"--no-index[Don't reindex search database]"
|
|
161 |
;;
|
|
162 |
|
|
163 |
("refresh")
|
|
164 |
_arguments -A "-*" \
|
|
165 |
"--full[Full refresh]" \
|
|
166 |
'*:publisher:_pkg5_pubs'
|
|
167 |
;;
|
|
168 |
|
|
169 |
("info")
|
|
170 |
_arguments -A "-*" \
|
|
171 |
'--license[Display license text(s)]' \
|
|
172 |
'(-r)-l[Installed package]' \
|
|
173 |
'(-l)-r[Uninstalled package; fetch info from depot]:*:package:_pkg5_pkgs_a' \
|
|
174 |
'*:package:_pkg5_pkgs'
|
|
175 |
;;
|
|
176 |
|
|
177 |
("search")
|
|
178 |
_arguments -A "-*" \
|
|
179 |
"(-p)-a[Show matching actions]" \
|
|
180 |
'-l[Local search]' \
|
|
181 |
'(-a)-p[Show packages]' \
|
|
182 |
'-r[Remote search]' \
|
|
183 |
'-H[Omit headers]' \
|
|
184 |
'-I[Case sensitive search]' \
|
|
185 |
'-s[Depot URI]' \
|
|
186 |
'*-o[Attribute output]:attributes:_values -s , "attribute" $pkg5_sattr' \
|
|
187 |
':query:'
|
|
188 |
;;
|
|
189 |
|
|
190 |
("verify")
|
|
191 |
_arguments -A "-*" \
|
|
192 |
'-H[Omit headers]' \
|
|
193 |
'-q[Quiet]' \
|
|
194 |
'-v[Verbose]' \
|
|
195 |
'*:package:_pkg5_pkgs'
|
|
196 |
;;
|
|
197 |
|
|
198 |
("fix")
|
|
199 |
_arguments -A "-*" \
|
|
200 |
'--accept[Force acceptance of license(s)]' \
|
|
201 |
'--licenses[Display license text(s)]' \
|
|
202 |
'*:package:_pkg5_pkgs'
|
|
203 |
;;
|
|
204 |
|
|
205 |
("contents")
|
|
206 |
_arguments -A "-*" \
|
|
207 |
'-H[Omit headers]' \
|
|
208 |
'-m[Print raw manifests]' \
|
|
209 |
'*-a[Attribute matching]:attribute=pattern:' \
|
|
210 |
'*-o[Attribute output]:attributes:_values -s , "attribute" $pkg5_cattr' \
|
|
211 |
'*-s[Sort key]:attribute:' \
|
|
212 |
'*-t[Action type]:action:_values -s , "action" $pkg5_actions' \
|
|
213 |
'-r[Fetch manifests from depot]:*:package:_pkg5_pkgs_a' \
|
|
214 |
'*:package:_pkg5_pkgs'
|
|
215 |
;;
|
|
216 |
|
|
217 |
("image-create")
|
|
218 |
_arguments -A "-*" \
|
|
219 |
'(-f --force)'{-f,--force}'[Force image creation]' \
|
|
220 |
'(-F --full -P --partial -U --user)'{-F,--full}'[Full image]' \
|
|
221 |
'(-F --full -P --partial -U --user)'{-P,--partial}'[Partial image]' \
|
|
222 |
'(-F --full -P --partial -U --user)'{-U,--user}'[User image]' \
|
|
223 |
'(-z --zone)'{-z,--zone}'[Zoned image]' \
|
|
224 |
'-k[Path to SSL key]:file:_path_files' \
|
|
225 |
'-c[Path to SSL cert]:file:_path_files' \
|
|
226 |
"--no-refresh[Don't refresh catalogs]" \
|
|
227 |
"*--variant[Specify image variants]:variant=instance:" \
|
|
228 |
"*--facet[Specify image facets]:facet=True/False:" \
|
|
229 |
'(-p --publisher)'{-p,--publisher}'[Specify publisher]:prefix=URI:' \
|
|
230 |
':directory:_path_files -/'
|
|
231 |
;;
|
|
232 |
|
|
233 |
("change-variant")
|
|
234 |
_arguments -A "-*" \
|
|
235 |
'-n[Dry run]' \
|
|
236 |
'-q[Quiet'] \
|
|
237 |
'-v[Verbose'] \
|
|
238 |
'--be-name[Set new boot environment name]:name:' \
|
|
239 |
"*:variant:_values -s , 'variant' $(pkg -R $pkg5_root variant -H | awk '{print $1}')" \
|
|
240 |
;;
|
|
241 |
|
|
242 |
("change-facet")
|
|
243 |
_arguments -A "-*" \
|
|
244 |
'-n[Dry run]' \
|
|
245 |
'-q[Quiet'] \
|
|
246 |
'-v[Verbose'] \
|
|
247 |
'--be-name[Set new boot environment name]:name:' \
|
|
248 |
"*:facet:_values -s , 'facet' $(pkg -R $pkg5_root facet -H | awk '{print $1}')" \
|
|
249 |
;;
|
|
250 |
|
|
251 |
("variant")
|
|
252 |
_arguments -A "-*" \
|
|
253 |
'-H[Omit headers]' \
|
|
254 |
'*:variant:_pkg5_variants'
|
|
255 |
;;
|
|
256 |
|
|
257 |
("facet")
|
|
258 |
_arguments -A "-*" \
|
|
259 |
'-H[Omit headers]' \
|
|
260 |
'*:facet:_pkg5_facets'
|
|
261 |
;;
|
|
262 |
|
|
263 |
("set-property")
|
|
264 |
_arguments -A "-*" \
|
|
265 |
':property:_pkg5_properties' \
|
|
266 |
':value:'
|
|
267 |
;;
|
|
268 |
|
|
269 |
("unset-property")
|
|
270 |
_arguments -A "-*" \
|
|
271 |
'*:property:_pkg5_properties'
|
|
272 |
;;
|
|
273 |
|
|
274 |
("property")
|
|
275 |
_arguments -A "-*" \
|
|
276 |
'-H[Omit headers]' \
|
|
277 |
'*:property:_pkg5_properties'
|
|
278 |
;;
|
|
279 |
|
|
280 |
("set-publisher")
|
|
281 |
_arguments -A "-*" \
|
|
282 |
'-P[Make preferred]' \
|
|
283 |
'(-e --enable)'{-e,--enable}'[Enable publisher]' \
|
|
284 |
'(-d --disable)'{-d,--disable}'[Disable publisher]' \
|
|
285 |
'(-g --add-origin)'{-g,--add-origin}'[Add origin URI]:uri:' \
|
|
286 |
'(-G --remove-origin)'{-G,--remove-origin}'[Remove origin URI]:uri:' \
|
|
287 |
'(-m --add-mirror)'{-m,--add-mirror}'[Add mirror URI]:uri:' \
|
|
288 |
'(-M --remove-mirror)'{-M,--remove-mirror}'[Remove mirror URI]:uri:' \
|
|
289 |
'-p[Repository URI]:url:' \
|
|
290 |
"--no-refresh[Don't refresh catalogs]" \
|
|
291 |
'--reset-uuid[Reset the image UUID for this publisher]' \
|
|
292 |
'--sticky[Make this publisher sticky]' \
|
|
293 |
'--non-sticky[Make this publisher non-sticky]' \
|
|
294 |
'--search-after[Set publisher search-order]:publisher:_pkg5_pubs' \
|
|
295 |
'--search-before[Set publisher search-order]:publisher:_pkg5_pubs' \
|
|
296 |
':publisher:_pkg5_pubs'
|
|
297 |
;;
|
|
298 |
|
|
299 |
("unset-publisher")
|
|
300 |
_arguments -A "-*" \
|
|
301 |
'*:publisher:_pkg5_pubs'
|
|
302 |
;;
|
|
303 |
|
|
304 |
("publisher")
|
|
305 |
_arguments -A "-*" \
|
|
306 |
'-H[Omit headers]' \
|
|
307 |
'-P[Display only preferred publisher]' \
|
|
308 |
'-n[Display only enabled publishers]' \
|
|
309 |
'*:publisher:_pkg5_pubs'
|
|
310 |
;;
|
|
311 |
|
|
312 |
("history")
|
|
313 |
_arguments -A "-*" \
|
|
314 |
'-H[Omit headers]' \
|
|
315 |
'-l[Long history]'
|
|
316 |
;;
|
|
317 |
|
|
318 |
(*)
|
|
319 |
_message "unknown pkg subcommand: $service" ;;
|
|
320 |
|
|
321 |
esac
|
|
322 |
}
|
|
323 |
|
|
324 |
_pkg5 "$@"
|