summaryrefslogtreecommitdiff
path: root/Completion/Unix
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
parentcbb8a3c762ba6034e5ae0c35e6d04c2de130f933 (diff)
downloadzsh-71052cb69c455f8182e8f85ba8d4ea4be7e5caf0.tar.gz
zsh-71052cb69c455f8182e8f85ba8d4ea4be7e5caf0.zip
Danek (plus .distfiles): 30520: updated Solaris 11 copmletion
Diffstat (limited to 'Completion/Unix')
-rw-r--r--Completion/Unix/Command/_zfs325
-rw-r--r--Completion/Unix/Command/_zpool189
-rw-r--r--Completion/Unix/Type/.distfiles1
-rw-r--r--Completion/Unix/Type/_zfs_dataset20
-rw-r--r--Completion/Unix/Type/_zfs_keysource_props15
5 files changed, 421 insertions, 129 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%%:*}
;;
(*)
diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool
index 9692121ae..568f493d0 100644
--- a/Completion/Unix/Command/_zpool
+++ b/Completion/Unix/Command/_zpool
@@ -1,41 +1,91 @@
#compdef zpool
+# Synced with the S11U1 build 16 man page
_zpool() {
- local -a subcmds fields
+ local context state line expl
+ local -a subcmds fields ro_props rw_props versions create_properties_dataset
subcmds=(
- create destroy add remove list iostat status online
- offline clear attach detach replace scrub import export
- upgrade history get set
+ create destroy add remove list iostat status online
+ offline clear attach detach replace scrub import export
+ upgrade history get set split
)
- fields=(
- name\:"Pool name" size\:"Total size" used\:"Space used"
- available\:"Space available" capacity\:"Space used (percentage)"
- health\:"Health status"
+ versions=(
+ ${${${(M)"${(f)$(zpool upgrade -v)}":#[[:space:]]#<->*}##[[:space:]]}%%[[:space:]]*}
)
- properties=(
- "bootfs:value:"
- "autoreplace:value:(on off)"
- "delegation:value:(on off)"
+ ro_props=(
+ "all[All properties]"
+ "allocated[Space allocated]"
+ "capacity[Space used (percentage)]"
+ "dedupratio[Deduplication ratio]"
+ "free[Space unallocated]"
+ "guid[Unique identifier]"
+ "health[Health status]"
+ "size[Total size]"
)
- propnames=( ${properties%%:*} )
-
- import_properties=(
- xattr
- copies
- shareiscsi
- canmount
- share
- sharenfs
- userprop
- mount
+
+ rw_props=(
+ "altroot[Alternate root directory]:value:"
+ "autoexpand[Automatic pool expansion]:value:(on off)"
+ "autoreplace[Automatic device replacement]:value:(on off)"
+ "bootfs[Default bootable dataset]:value:"
+ "cachefile[Pool configuration cache file location]:value:"
+ "dedupditto[Threshold for number of copies]:value:"
+ "delegation[Delegated administration]:value:(on off)"
+ "failmode[Failure-mode behavior]:value:(wait continue panic)"
+ "listsnaps[Show snapshots in 'zfs list']:value:(on off)"
+ "version[Pool version]:version:($versions)"
+ )
+
+ fields=( ${ro_props%%:*} ${rw_props%%:*} )
+
+ create_properties_dataset=(
+ "aclinherit:value:(discard noallow restricted passthrough passthrough-x)"
+ "aclmode:value:(discard mask passthrough)"
+ "atime:value:(on off)"
+ "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)"
+ "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}"
+ "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 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)"
+ "shadow:value:" # TODO: complete URI|none
+ "share:share properties:"
+ "sharenfs:value:(on off)"
+ "sharesmb:value:(on off)"
+ "snapdir:value:(hidden visible)"
+ "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)"
)
if [[ $service == "zpool" ]]; then
_arguments -C -A "-*" \
- '-\?[help]' \
+ '-\?[Help]' \
'*::command:->subcmd' && return 0
if (( CURRENT == 1 )); then
@@ -48,7 +98,9 @@ _zpool() {
case $service in
(clear)
- _arguments \
+ _arguments -A "-*" \
+ '-F[Discard transactions to allow pool opening]' \
+ '-n[With -F, check if discarding transactions would work]' \
':pool name:_zfs_pool' \
'*:virtual device:_files'
;;
@@ -56,38 +108,45 @@ _zpool() {
(create)
# TODO: investigate better vdev handling
_arguments -A "-*" \
- '-f[force use of in-use devices]' \
- '-n[display configuration without creating pool]' \
- '-R[use alternate root]:alternate root:_files -/' \
- '-m[set mountpoint for root dataset]:mountpoint:' \
+ '-o[Set pool property at creation time]:property:_values -s , "property" $rw_props' \
+ '-O[Set dataset property at creation time]:property:_values -s , "property" $create_properties_dataset' \
+ '-f[Force use of in-use devices]' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-n[Display configuration without creating pool]' \
+ '-R[Use alternate root]:alternate root:_files -/' \
+ '-m[Set mountpoint for root dataset]:mountpoint:' \
':pool name:' \
'*:virtual device:_files'
;;
(destroy)
_arguments -A "-*" \
- '-f[force active datasets to be unmounted]' \
+ '-f[Force active datasets to be unmounted]' \
':pool name:_zfs_pool'
;;
(add)
_arguments -A "-*" \
- '-f[force use of in-use devices]' \
- '-n[display configuration without modifying pool]' \
+ '-f[Force use of in-use devices]' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-n[Display configuration without modifying pool]' \
':pool name:_zfs_pool' \
'*:virtual device:_files'
;;
(list)
_arguments \
- '-H[scripted mode]' \
- '-o[fields to list]:field:_values -s , "field" ${^fields/\:/[}\]' \
+ '-H[Scripted mode]' \
+ '-T[timestamp]:value:(u d)' \
+ '-o[Fields to list]:field:_values -s , "field" $fields' \
'::pool name:_zfs_pool'
;;
(iostat)
_arguments -A "-*" \
- '-v[verbose statistics]' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-T[timestamp]:value:(u d)' \
+ '-v[Verbose statistics]' \
'*::pool name:_zfs_pool' \
'::interval:' \
'::count:'
@@ -95,20 +154,23 @@ _zpool() {
(status)
_arguments -A "-*" \
- '-v[verbose information]' \
- '-x[show only unhealthy pools]' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-v[Verbose information]' \
+ '-x[Show only unhealthy pools]' \
+ '-T[timestamp]:value:(u d)' \
'*::pool name:_zfs_pool'
;;
(offline)
_arguments -A "-*" \
- '-t[offline until next reboot]' \
+ '-t[Offline until next reboot]' \
':pool name:_zfs_pool' \
'*:virtual device:_files'
;;
(online)
_arguments \
+ '-e[Expand device to use all available space]' \
':pool name:_zfs_pool' \
'*:virtual device:_files'
;;
@@ -116,7 +178,7 @@ _zpool() {
(attach)
# TODO: first device should choose first from existing.
_arguments \
- '-f[force attach, even if in use]' \
+ '-f[Force attach, even if in use]' \
':pool name:_zfs_pool' \
':virtual device:_files' \
':virtual device:_files'
@@ -130,7 +192,7 @@ _zpool() {
(replace)
_arguments -A "-*" \
- '-f[force attach, even if in use]' \
+ '-f[Force attach, even if in use]' \
':pool name:_zfs_pool' \
':virtual device:_files' \
'::virtual device:_files'
@@ -138,57 +200,72 @@ _zpool() {
(scrub)
_arguments -A "-*" \
- '-s[stop scrubbing]' \
+ '-s[Stop scrubbing]' \
'*:pool name:_zfs_pool'
;;
(export)
_arguments -A "-*" \
- '-f[forcefully unmount all datasets]' \
+ '-f[Forcefully unmount all datasets]' \
'*:pool name:_zfs_pool'
;;
(import)
- # TODO: -o should complete options
+ # TODO: -o should complete mount options, too
_arguments -A "-*" \
- '*-d[search for devices or files in directory]:_files -/' \
- '-D[destroyed pools]' \
- '-f[force import]' \
+ '-D[Destroyed pools]' \
+ '(-d)*-c[Use cache file]:cache file:_files' \
+ '(-c)*-d[Search for devices or files in directory]:directory:_files -/' \
+ '-f[Force import]' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-m[Ignore missing log devices]' \
+ '-R[Alternate root]:alternate root:_files -/' \
+ '-o[Set pool or dataset property]:property:_values -s , "property" $create_properties_dataset $rw_props' \
- set1 \
- '-o[mount options]' \
- '-p[set property]:property:_values -s , "property" $import_properties' \
- '-R[alternate root]:_files -/' \
'*:pool name or id:_zfs_pool' \
'::new pool name:' \
- set2 \
- '-a[all pools]'
+ '-N[Do not mount any filesystems]' \
+ '-a[All pools]'
;;
(get)
_arguments -A "-*" \
- ':property:_values -s , "property" $propnames all' \
+ ':property:_values -s , "property" $fields' \
'*:pool name:_zfs_pool'
;;
(set)
_arguments -A "-*" \
- ':property:_values -s , "property" $properties' \
+ ':property:_values -s , "property" $rw_props' \
'*:pool name:_zfs_pool'
;;
+ (split)
+ _arguments -A "-*" \
+ '-R[Alternate root]:alternate root:_files -/' \
+ '-l[Display configuration in /dev/chassis location form]' \
+ '-n[Display configuration without splitting]' \
+ '-o[Set pool or dataset property]:property:_values -s , "property" $create_properties_dataset $rw_props' \
+ ':pool name or id:_zfs_pool' \
+ ':new pool name:' \
+ '*::virtual device:_files -/'
+ ;;
+
(upgrade)
_arguments -A "-*" \
- set1 \
- '-v[display ZFS versions and descriptions]' \
+ '-v[Display ZFS versions and descriptions]' \
- set2 \
- '-a[upgrade all pools]' \
+ "-V[Upgrade to given version]:version:($versions)" \
+ '-a[Upgrade all pools]' \
'*:pool name:_zfs_pool'
;;
(history)
_arguments -A "-*" \
- '-i[display internal events]' \
- '-l[long format]' \
+ '-i[Display internal events]' \
+ '-l[Long format]' \
'*:pool name:_zfs_pool'
;;
diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles
index a9dc0d147..4b5102191 100644
--- a/Completion/Unix/Type/.distfiles
+++ b/Completion/Unix/Type/.distfiles
@@ -50,5 +50,6 @@ _user_at_host
_users
_users_on
_zfs_dataset
+_zfs_keysource_props
_zfs_pool
'
diff --git a/Completion/Unix/Type/_zfs_dataset b/Completion/Unix/Type/_zfs_dataset
index 1840fb413..1cd49aebf 100644
--- a/Completion/Unix/Type/_zfs_dataset
+++ b/Completion/Unix/Type/_zfs_dataset
@@ -1,13 +1,24 @@
#autoload
-local -a type typearg list
+local -a type paths_allowed typearg datasetlist expl
+local expl_type
-zparseopts -D -E -a type t+:
+zparseopts -D -E t+:=type p=paths_allowed
[[ -n $type[(r)fs] ]] && typearg=( filesystem )
[[ -n $type[(r)vol] ]] && typearg=( $typearg volume )
[[ -n $type[(r)snap] ]] && typearg=( $typearg snapshot )
-[[ -n $typearg ]] && typearg=( -t ${(j:,:)typearg} )
+if [[ -n $typearg ]]; then
+ typearg=( -t ${(j:,:)typearg} )
+# We know we're in zfs list if paths_allowed is non-empty.
+elif [[ -n $opt_args[-t] && ${#paths_allowed} -gt 0 ]]; then
+ typearg=( -t $opt_args[-t] )
+fi
+
+if [[ ${#paths_allowed} -gt 0 && $PREFIX == /* ]]; then
+ _path_files
+ return
+fi
datasetlist=( ${="$(zfs list -H -o name $typearg)":#no datasets available} )
@@ -18,5 +29,4 @@ if [[ -n $type[(r)mtpt] ]]; then
expl_type="$expl_type/mountpoint"
fi
-# compadd "$@" - $list
-_wanted dataset expl "$expl_type" _multi_parts "$@" / datasetlist
+_wanted dataset expl "$expl_type" _multi_parts "$@" -q / datasetlist
diff --git a/Completion/Unix/Type/_zfs_keysource_props b/Completion/Unix/Type/_zfs_keysource_props
new file mode 100644
index 000000000..01f63257a
--- /dev/null
+++ b/Completion/Unix/Type/_zfs_keysource_props
@@ -0,0 +1,15 @@
+#autoload
+
+local -a suf
+local expl
+
+compset -S ",*" || suf=(-S ,)
+if compset -P 1 "*,"; then
+ _alternative "zfs-keylocator-prompt:\"prompt\" locator:(prompt)" \
+ "zfs-keylocator-file:file locator:_path_files" \
+ "zfs-keylocator-pkcs11:PKCS#11 locator: " \
+ "zfs-keylocator-https:HTTPS URL locator: "
+else
+ _description format expl "keysource format"
+ compadd $suf -q "$expl[@]" "$@" raw hex passphrase
+fi