1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-11-29 03:31:01 +01:00

54000: new completion for FreeBSD's bectl

This commit is contained in:
Oliver Kiddle 2025-10-23 19:16:01 +02:00
parent e20df6ee53
commit fa40c50ee0
2 changed files with 107 additions and 0 deletions

View file

@ -1,3 +1,7 @@
2025-10-23 Oliver Kiddle <opk@zsh.org>
* 54000: Completion/BSD/Command/_bectl: new completion
2025-10-21 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* Mike Gilbert: 53992: Src/utils.c, configure.ac: check for

View file

@ -0,0 +1,103 @@
#compdef bectl
local cmd curcontext="$curcontext" ret=1
local -a state line expl args opts bectl=( $words[1] )
local -A opt_args
_arguments -C -s -A '-*' \
'-h[display usage information]' \
'-r+[specify boot environment root]:root:_zfs_dataset' \
'1:action:((
activate:"set the default boot environment"
check:"perform silent sanity check"
create:"create new boot environment or snapshot"
destroy:"destroy boot environment or snapshot"
export:"export boot environment to stdout"
import:"import boot environment from stdin"
jail:"create a jail of a boot environment"
list:"display all boot environments"
mount:"mount a boot environment"
rename:"rename a boot environment"
u{,n}jail:"destroy jail created from a boot environment"
u{,n}mount:"unmount a boot environment"
))' \
'*:: :->args' && ret=0
if [[ $state = args ]]; then
bectl+=( ${(kv)opt_args[(i)-r]} )
cmd="$words[1]"
curcontext="${curcontext%:*}-$cmd:"
case $cmd in
activate|create|destroy|(ex|im)port|jail|rename|(|u|un)mount)
args=( '1: :->boot-environs' )
;|
activate)
args+=(
'(-T)-t[apply to the next boot only]'
'(-t)-T[remove temporary boot once configuration]'
)
;;
create)
args+=(
'-r[create recursive boot environment]'
'-e+[clone specified boot environment]: :->boot-environs'
)
;;
destroy)
args+=(
'-F[unmount without confirmation]'
'-o[destroy the origin as well]'
)
;;
jail)
args+=(
'(-U)-b[enable batch mode]'
'(-b)-U[persistent jail]'
'*-o+[set a jail parameter]:jail parameter'
'*-u+[unset a jail parameter]:jail parameter'
'*::: : _normal -p $service'
)
;;
list)
opts=( name creation origin used{,by{dataset,refreservation,snapshots}} )
args+=(
'(-D)-a[display all datasets]'
'(-a -s)-D[display full space usage]'
'-H[suppress printing of headers]'
'(-D)-s[include snapshots]'
"(-C)-c+[specify sort key (ascending)]:zfs property:($opts)"
"(-c)-C+[specify sort key (descending)]:zfs property:($opts)"
)
;;
mount)
args+=( '2:mount point:_directories' )
;;
rename)
args+=( '2:new boot environment' )
;;
u(|n)jail)
args+=( '(*)1::jail:_jails' '*: :->boot-environs' )
;;
u(|n)mount)
args+=( '-f[force unmount]' )
;;
esac
if (( $#args )); then
_arguments -C -A '-*' -s $args
else
_default
fi && ret=0
fi
if [[ $state = boot-environs ]]; then
[[ -prefix *@ ]] && opts=( -s )
_wanted boot-environs expl "boot environment" \
compadd -r "@ \t\n\-" ${${${(f)"$(_call_program boot-environs
$bectl $beopts list $opts -H 2>/dev/null)"}# }%%[[:blank:]]*} && ret=0
fi
return ret