From 71052cb69c455f8182e8f85ba8d4ea4be7e5caf0 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 21 Jun 2012 08:50:14 +0000 Subject: Danek (plus .distfiles): 30520: updated Solaris 11 copmletion --- Completion/Unix/Command/_zfs | 325 +++++++++++++++++++++++------- Completion/Unix/Command/_zpool | 189 ++++++++++++----- Completion/Unix/Type/.distfiles | 1 + Completion/Unix/Type/_zfs_dataset | 20 +- Completion/Unix/Type/_zfs_keysource_props | 15 ++ 5 files changed, 421 insertions(+), 129 deletions(-) create mode 100644 Completion/Unix/Type/_zfs_keysource_props (limited to 'Completion/Unix') 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:" # , "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=" - "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:" # + "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:" # + "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 -- cgit 1.4.1