summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_zfs
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2012-06-21 08:50:14 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2012-06-21 08:50:14 +0000
commit71052cb69c455f8182e8f85ba8d4ea4be7e5caf0 (patch)
tree3cc9aa0959c21dfd32344e068dea009ec9f0af08 /Completion/Unix/Command/_zfs
parentcbb8a3c762ba6034e5ae0c35e6d04c2de130f933 (diff)
downloadzsh-71052cb69c455f8182e8f85ba8d4ea4be7e5caf0.tar.gz
zsh-71052cb69c455f8182e8f85ba8d4ea4be7e5caf0.zip
Danek (plus .distfiles): 30520: updated Solaris 11 copmletion
Diffstat (limited to 'Completion/Unix/Command/_zfs')
-rw-r--r--Completion/Unix/Command/_zfs325
1 files changed, 257 insertions, 68 deletions
diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs
index ff404278a..204784d56 100644
--- a/Completion/Unix/Command/_zfs
+++ b/Completion/Unix/Command/_zfs
@@ -1,55 +1,100 @@
#compdef zfs
+# Synced with the S11U1 build 16 man page
_zfs() {
local context state line expl
typeset -A opt_args
- local -a subcmds rw_properties rw_propnames ro_properties
+ local -a subcmds rw_properties rw_propnames ro_properties create_properties
+ local -a difffields delegatable_perms
subcmds=(
"create" "destroy" "clone" "promote" "rename" "snapshot"
"rollback" "list" "set" "get" "inherit" "mount" "unmount"
"share" "unshare" "send" "receive" "allow" "unallow"
- "upgrade"
+ "upgrade" "userspace" "groupspace" "hold" "holds" "release"
+ "diff" "key" "help"
)
+ # TODO: userused@ and groupused@ could have more extensive handling
ro_properties=(
"name" "type" "creation" "used" "available" "referenced"
- "compressratio" "mounted" "origin"
+ "compressratio" "mounted" "origin" "usedbychildren"
+ "usedbydataset" "usedbyrefreservation" "usedbysnapshots"
+ "defer_destroy" "userused@" "userrefs" "groupused@"
+ "keystatus" "rekeydate"
)
# TODO: Be cleverer about what values can be set. Is there any way to
# set the sorting for *size properties to false by default?
rw_properties=(
- "aclinherit:value:(discard noallow secure passthrough)"
- "aclmode:value:(discard groupmask passthrough)"
+ "aclinherit:value:(discard noallow restricted passthrough passthrough-x)"
+ "aclmode:value:(discard mask passthrough)"
"atime:value:(on off)"
- "canmount:value:(on off)"
- "checksum:value:(on off fletcher2 fletcher4 sha256)"
- "compression:value:(on off lzjb gzip gzip-{1..9})"
+ "canmount:value:(on off noauto)"
+ "checksum:value:(on off fletcher2 fletcher4 sha256 sha256+mac)"
+ "compression:value:(on off lzjb gzip gzip-{1..9} zle)"
"copies:value:(1 2 3)"
+ "dedup:value:(on off verify sha256 sha256,verify)"
"devices:value:(on off)"
+ "encryption:value:(off on aes128-ccm aes-192-ccm aes-256-ccm aes-128-gcm aes-192-gcm aes-256-gcm)"
"exec:value:(on off)"
- "mountpoint:value:{if [[ -prefix /* ]]; then _path_files -/; else _wanted mountpoints expl 'mountpoint (type \"/\" to start completing paths)' compadd legacy none; fi}"
+ "groupquota@:value:" # TODO: complete group=size|none
+ "keysource:value:_zfs_keysource_props"
+ "logbias:value:(latency throughput)"
+ "mlslabel:value:(none)" # TODO: list sensitivity labels
+ "mountpoint:path, 'legacy', or 'none':{if [[ -prefix /* ]]; then _path_files -/; else _wanted mountpoints expl 'mountpoint (type \"/\" to start completing paths)' compadd legacy none; fi}"
+ "multilevel:value:(on off)"
+ "nbmand:value:(on off)"
+ "primarycache:value:(all none metadata)"
"quota:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == quota= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'quota' compadd none; fi}"
"readonly:value:(on off)"
- "recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K)"
- "reservation:value:" # <size>, "none"
+ "recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)"
+ "refquota:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == refquota= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'refquota' compadd none; fi}"
+ "refreservation:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == refreservation= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'refreservation' compadd none; fi}"
+ "reservation:value:{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == reservation= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'reservation' compadd none; fi}"
+ "rstchown:value:(on off)"
+ "secondarycache:value:(all none metadata)"
"setuid:value:(on off)"
- "shareiscsi:value:(on off)" # or "type=<type>"
- "sharenfs:value:(on off)" # or share(1M) options
+ "shadow:value:" # TODO: complete URI|none
+ "share:share properties:"
+ "sharenfs:value:(on off)"
+ "sharesmb:value:(on off)"
"snapdir:value:(hidden visible)"
- "version:value:(1 2 current)"
- "volblocksize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K)"
+ "sync:value:(standard always disabled)"
+ "userquota@:value:" # TODO: complete user=size|none
+ "version:value:(1 2 3 4 current)"
"volsize:value:" # <size>
+ "vscan:value:(on off)"
"xattr:value:(on off)"
"zoned:value:(on off)"
)
+ create_properties=(
+ $rw_properties
+ "casesensitivity:value:(sensitive insensitive mixed)"
+ "normalization:value:(none formC formD formKC formKD)"
+ "utf8only:value:(on off)"
+ "volblocksize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)"
+ )
+
+ delegatable_perms=(
+ "allow" "clone" "create" "destroy" "diff" "hold" "key"
+ "keychange" "mount" "promote" "receive" "release" "rename"
+ "rollback" "send" "share" "snapshot"
+ "groupused" "userused" "userprop"
+ ${create_properties%%:*}
+ )
+
rw_propnames=( ${rw_properties%%:*} )
+ difffields=(
+ object parent size links linkschange name oldname user group
+ ctime mtime atime crtime
+ )
+
if [[ $service == "zfs" ]]; then
_arguments -C -A "-*" \
- '-\?[help]' \
+ '-\?[Help]' \
'*::command:->subcmd' && return 0
if (( CURRENT == 1 )); then
@@ -63,43 +108,50 @@ _zfs() {
case $service in
("create")
_arguments -A "-*" \
- '-p[create parent datasets]' \
- '-o[set initial properties]:property:_values -s , "property" $rw_properties' \
+ '-p[Create parent datasets]' \
+ '-o[Set initial properties]:property:_values -s , "property" $create_properties' \
- set1 \
':filesystem:' \
- set2 \
- '-s[create sparse volume]' \
- '-b[set volblocksize]:blocksize:' \
- '-V[set size]:size:' \
+ '-s[Create sparse volume]' \
+ '-b[Set volblocksize]:blocksize:' \
+ '-V[Set size]:size:' \
':volume:'
;;
("destroy")
_arguments -A "-*" \
- '-r[recursively destroy all children]' \
- '-R[recursively destroy all dependents]' \
- '-f[force unmounts]' \
- ':filesystem/volume/snapshot:_zfs_dataset'
+ '-r[Recursively destroy all children]' \
+ '-R[Recursively destroy all dependents]' \
+ - set1 \
+ '-d[delete or mark deferred]' \
+ ':snapshot:_zfs_dataset -t snap' \
+ - set2 \
+ '-f[Force unmounts]' \
+ ':filesystem/volume/snapshot:_zfs_dataset -t fs -t vol'
;;
("snapshot")
_arguments -A "-*" \
- '-r[recursively snapshot all descendant datasets]' \
+ '-r[Recursively snapshot all descendant datasets]' \
+ '-o[Set property]:property:_values -s , "property" $create_properties' \
':filesystem/volume:_zfs_dataset -t fs -t vol -S@'
;;
("rollback")
_arguments -A "-*" \
- '-r[recursively destroy more recent snapshots]' \
- '-R[recursively destroy more recent snapshots and clones]' \
- '-f[force unmounts]' \
+ '-r[Recursively destroy more recent snapshots]' \
+ '-R[Recursively destroy more recent snapshots and clones]' \
+ '-f[Force unmounts]' \
':snapshot:_zfs_dataset -t snap'
;;
("clone")
# XXX needs to bail if there are no snapshots
_arguments -A "-*" \
- '-p[create parent datasets]' \
+ '-p[Create parent datasets]' \
+ '-K[Create encryption key]' \
+ '-o[Set property]:property:_values -s , "property" $create_properties' \
':snapshot:_zfs_dataset -t snap' \
':filesystem/volume:'
;;
@@ -113,74 +165,91 @@ _zfs() {
("rename")
_arguments -A "-*" \
- set1 \
- '-p[create parent datasets]' \
+ '-p[Create parent datasets]' \
':filesystem/volume/snapshot:_zfs_dataset' \
':filesystem/volume/snapshot:' \
- set2 \
- '-r[recursively rename snapshots of all descendent datasets]' \
+ '-r[Recursively rename snapshots of all descendent datasets]' \
':snapshot:_zfs_dataset -t snap' \
':snapshot:'
;;
("list")
_arguments -A "-*" \
- '-r[recursively display children]' \
- '-H[scripting mode]' \
- '-o[properties to list]:property:_values -s , "property" $ro_properties $rw_propnames' \
- '*-s[sort key (ascending)]:property:_values "property" $ro_properties $rw_propnames' \
- '*-S[sort key (descending)]:property:_values "property" $ro_properties $rw_propnames' \
- '-t[dataset types to list]:dataset type:_values -s , "dataset type" filesystem snapshot volume' \
- '*:filesystem/volume/snapshot:_zfs_dataset'
+ '-r[Recursively display children]' \
+ '-H[Scripting mode]' \
+ '-d[Depth]:value:' \
+ '-o[Properties to list]:property:_values -s , "property" $ro_properties $rw_propnames' \
+ '*-s[Sort key (ascending)]:property:_values "property" $ro_properties $rw_propnames' \
+ '*-S[Sort key (descending)]:property:_values "property" $ro_properties $rw_propnames' \
+ '-t[Dataset types to list]:dataset type:_values -s , "dataset type" filesystem snapshot volume' \
+ '*:filesystem/volume/snapshot/path:_zfs_dataset -p'
;;
("set")
_arguments \
+ '-r[Recursively apply value]' \
':property:_values -s , "property" $rw_properties' \
'*:filesystem/volume:_zfs_dataset -t fs -t vol'
;;
("get")
_arguments -A "-*" \
- "-r[recursively display children's properties]" \
- '-H[scripting mode]' \
- '-p[display numbers exactly]' \
- '-s[specify sources]:source:_values -s , "source" local default inherited temporary none' \
- '-o[specify fields]:field:_values -s , "field" name property value source' \
+ "-r[Recursively display children's properties]" \
+ '-d[Depth]:value:' \
+ '-H[Scripting mode]' \
+ '-p[Display numbers exactly]' \
+ '-s[Specify sources]:source:_values -s , "source" local default inherited temporary none' \
+ '-o[Specify fields]:field:_values -s , "field" name property value source' \
':property:_values -s , "property" $ro_properties $rw_propnames all' \
'*:filesystem/volume/snapshot:_zfs_dataset'
;;
("inherit")
_arguments -A "-*" \
- '-r[recursively inherit property for all children]' \
+ '-r[Recursively inherit property for all children]' \
+ '-S[Revert to received property value]' \
':property:_values -s , "property" $ro_properties $rw_properties' \
'*:filesystem/volume:_zfs_dataset -t fs -t vol'
;;
+ ("userspace"|"groupspace")
+ _arguments -A "-*" \
+ '-n[Print numeric ID]' \
+ '-i[Translate SID to POSIX ID]' \
+ '-H[Tab-delimited output with no headers]' \
+ '-p[Parseable mode]' \
+ '-o[Properties to list]:property:_values -s , "property" type name used quota' \
+ '*-s[Sort key (ascending)]:property:_values "property" type name used quota' \
+ '*-S[Sort key (descending)]:property:_values "property" type name used quota' \
+ '-t[Types to list]:type:_values -s , "type" all posixuser smbuser posixgroup smbgroup' \
+ '*:filesystem/volume/snapshot:_zfs_dataset'
+ ;;
+
("mount")
_arguments -A "-*" \
- '-o[mount options]:mount options:_values -s , "option" {,no}{devices,exec,setuid} ro rw' \
- '-O[overlay mount]' \
- '-v[report mount progress]' \
+ '-o[Mount options]:mount options:_values -s , "option" {,no}{devices,exec,setuid} ro rw' \
+ '-O[Overlay mount]' \
+ '-v[Report mount progress]' \
- set1 \
':filesystem:_zfs_dataset -t fs' \
- set2 \
- '-a[mount all available ZFS filesystems]'
+ '-a[Mount all available ZFS filesystems]'
;;
("unmount")
_arguments -A "-*" \
- set1 \
- '-f[force unmount]' \
+ '-f[Force unmount]' \
':filesystem:_zfs_dataset -t fs -t mtpt' \
- set2 \
- '-a[unmount all ZFS filesystems]'
+ '-a[Unmount all ZFS filesystems]'
;;
("share")
_arguments -A "-*" \
- set1 \
- '-a[share all available ZFS filesystems]' \
+ '-a[Share all available ZFS filesystems]' \
- set2 \
':filesystem:_zfs_dataset -t fs'
;;
@@ -188,45 +257,165 @@ _zfs() {
("unshare")
_arguments -A "-*" \
- set1 \
- '-a[unshare all shared ZFS filesystems]' \
+ '-a[Unshare all shared ZFS filesystems]' \
- set2 \
- '-F[force unshare]' \
':filesystem:_zfs_dataset -t fs -t mtpt'
;;
("send")
_arguments -A "-*" \
- '-i[generate an incremental stream]:snapshot:_zfs_dataset -t snap' \
+ '-b' \
+ '-i[Generate an incremental stream]:snapshot:_zfs_dataset -t snap' \
+ '-D[Perform dedup processing]' \
+ '-p[Send properties]' \
+ '-v[Verbose]' \
+ - set1 \
+ '-I[Generate an incremental stream with intermediary snapshots]:snapshot:_zfs_dataset -t snap' \
+ '-R[Generate a replication stream package]' \
+ ':snapshot:_zfs_dataset -t snap' \
+ - set2 \
+ '-c[Create a self-contained stream]' \
+ '-r[Generate a recursive stream package]' \
':snapshot:_zfs_dataset -t snap'
;;
("receive")
_arguments -A "-*" \
- '-v[verbose]' \
- '-n[do not receive the stream]' \
- '-F[force a rollback if necessary]' \
+ '-v[Verbose]' \
+ '-n[Do not receive the stream]' \
+ '-F[Force a rollback if necessary]' \
+ '-u[Filesystem is not mounted]' \
+ '-o[Include property change in the stream]::' \
+ '-x[Exclude property change from the stream]:property:' \
- set1 \
':filesystem/volume/snapshot:_zfs_dataset' \
- set2 \
- '-d[set path prefix]:filesystem:_zfs_dataset -t fs'
+ '(-e)-d[Set path prefix from stream, excluding only pool name]' \
+ '(-d)-e[Set path prefix from stream, using last path element]' \
+ '-:filesystem:_zfs_dataset -t fs'
;;
- ("allow"|"unallow")
- _message "unimplemented zfs subcommand: $service"
+ ("allow")
+ _arguments -A "-*" \
+ - set1 \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set2 \
+ '(-g)-u[User]:user:_users' \
+ '(-u)-g[Group]:group:_groups' \
+ '-l[Allow for named dataset]' \
+ '-d[Allow for descendent datasets]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set3 \
+ '-e[Everyone]' \
+ '-l[Allow for named dataset]' \
+ '-d[Allow for descendent datasets]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set4 \
+ '-c[Create-time permissions]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set5 \
+ '-s[Define or modify permission sets]' \
+ ':setname:' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol'
+ ;;
+
+ ("unallow")
+ _arguments -A "-*" \
+ '-r[Recursive removal]' \
+ - set1 \
+ '-s[Remove permissions from or delete a permission set]:permission set:' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set2 \
+ '(-g)-u[User]:user:_users' \
+ '(-u)-g[Group]:group:_groups' \
+ '-l[Allow for named dataset]' \
+ '-d[Allow for descendent datasets]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set3 \
+ '-e[Everyone]' \
+ '-l[Allow for named dataset]' \
+ '-d[Allow for descendent datasets]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol' \
+ - set4 \
+ '-c[Create-time permissions]' \
+ ':permissions or sets:_values -s , "permission or set" $delegatable_perms' \
+ ':filesystem/volume:_zfs_dataset -t fs -t vol'
;;
("upgrade")
_arguments -A "-*" \
- set1 \
- '-v[verbose]' \
+ '-v[Verbose]' \
- set2 \
- '-a[upgrade all filesystems on all pools]' \
- '-r[upgrade descendent filesystems, too]' \
- '-V[upgrade to specified version]:version:(1 2)' \
+ '-a[Upgrade all filesystems on all pools]' \
+ '-r[Upgrade descendent filesystems, too]' \
+ '-V[Upgrade to specified version]:version:(1 2)' \
- set3 \
- '-r[upgrade descendent filesystems, too]' \
- '-V[upgrade to specified version]:version:(1 2)' \
- ':filesystem:_zfs_dataset -t fs' \
+ '-r[Upgrade descendent filesystems, too]' \
+ '-V[Upgrade to specified version]:version:(1 2)' \
+ ':filesystem:_zfs_dataset -t fs'
+ ;;
+
+ ("hold")
+ _arguments -A "-*" \
+ '-r[Apply hold recursively]' \
+ ':tag:' \
+ ':snapshot:_zfs_dataset -t snap'
+ ;;
+
+ ("holds")
+ _arguments -A "-*" \
+ '-r[List holds recursively]' \
+ ':snapshot:_zfs_dataset -t snap'
+ ;;
+
+ ("release")
+ _arguments -A "-*" \
+ '-r[Release holds recursively]' \
+ ':tag:' \
+ ':snapshot:_zfs_dataset -t snap'
+ ;;
+
+ ("diff")
+ _arguments -A "-*" \
+ '-F[Add column for filetype character]' \
+ '-H[Parseable output]' \
+ '-e[Only show new and changed files]' \
+ '*-o[Show fields]:field:_values "field" $difffields' \
+ '-t[Add column for ctime]' \
+ - set1 \
+ ':snapshot:_zfs_dataset -t snap' \
+ ':snapshot or filesystem:_zfs_dataset -t snap -t fs' \
+ - set2 \
+ '-E[Show difference from empty]' \
+ ':snapshot or filesystem:_zfs_dataset -t snap -t fs'
+ ;;
+
+ ("key")
+ _arguments -A "-*" \
+ - set1 \
+ '-a[Apply to all datasets in all pools]' \
+ '(-u -K -f)-l[Load the encryption key]' \
+ '(-l -K)-u[Unload the encryption key]' \
+ '(-l -u -f)-K[Create a new data encryption key]' \
+ '(-l -K)-f[Unmount the dataset before unloading the encryption key]' \
+ '-r[Apply recursively]' \
+ ':filesystem or volume:_zfs_dataset -t fs -t vol' \
+ - set2 \
+ '-c[Change the encryption key]' \
+ '-o[Change a property]:property:_zfs_keysource_props' \
+ ':filesystem or volume:_zfs_dataset -t fs -t vol'
+ ;;
+
+ ("help")
+ compadd property $subcmds $ro_properties ${rw_properties%%:*}
;;
(*)