diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-08-12 10:37:30 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-08-12 10:37:30 +0000 |
commit | b2e70921b06eee523071218c8919a27c7f4ce206 (patch) | |
tree | fc51fa290e22b0e92d96c70a769c7872dcbc106d /Completion/Unix | |
parent | 6ce77ad7ba2195687114180bc8e5476f1f1212b7 (diff) | |
download | zsh-b2e70921b06eee523071218c8919a27c7f4ce206.tar.gz zsh-b2e70921b06eee523071218c8919a27c7f4ce206.tar.xz zsh-b2e70921b06eee523071218c8919a27c7f4ce206.zip |
25435: Baptiste Daroussin <baptiste.daroussin@gmail.com>:
new and improved BSD completions unposted: fix Solaris completion .distfiles
Diffstat (limited to 'Completion/Unix')
-rw-r--r-- | Completion/Unix/Command/_zfs | 238 | ||||
-rw-r--r-- | Completion/Unix/Command/_zpool | 201 |
2 files changed, 439 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs index 21ab5eaa9..f4b980e21 100644 --- a/Completion/Unix/Command/_zfs +++ b/Completion/Unix/Command/_zfs @@ -236,3 +236,241 @@ _zfs() { } _zfs "$@" +#compdef zfs + +_zfs() { + local context state line expl + typeset -A opt_args + local -a subcmds rw_properties rw_propnames ro_properties + + subcmds=( + "create" "destroy" "clone" "promote" "rename" "snapshot" + "rollback" "list" "set" "get" "inherit" "mount" "unmount" + "share" "unshare" "send" "receive" "allow" "unallow" + "upgrade" + ) + + ro_properties=( + "name" "type" "creation" "used" "available" "referenced" + "compressratio" "mounted" "origin" + ) + + # 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)" + "atime:value:(on off)" + "canmount:value:(on off)" + "checksum:value:(on off fletcher2 fletcher4 sha256)" + "compression:value:(on off lzjb gzip gzip-{1..9})" + "copies:value:(1 2 3)" + "devices:value:(on off)" + "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}" + "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" + "setuid:value:(on off)" + "shareiscsi:value:(on off)" # or "type=<type>" + "sharenfs:value:(on off)" # or share(1M) options + "snapdir:value:(hidden visible)" + "version:value:(1 2 current)" + "volblocksize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K)" + "volsize:value:" # <size> + "xattr:value:(on off)" + "zoned:value:(on off)" + ) + + rw_propnames=( ${rw_properties%%:*} ) + + if [[ $service == "zfs" ]]; then + _arguments -C -A "-*" \ + '-\?[Help]' \ + '*::command:->subcmd' && return 0 + + if (( CURRENT == 1 )); then + _wanted commands expl "zfs subcommand" compadd -a subcmds + return + fi + service="$words[1]" + curcontext="${curcontext%:*}=$service:" + fi + + case $service in + ("create") + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + '-o[Set initial properties]:property:_values -s , "property" $rw_properties' \ + - set1 \ + ':filesystem:' \ + - set2 \ + '-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' + ;; + + ("snapshot") + _arguments -A "-*" \ + '-r[Recursively snapshot all descendant datasets]' \ + ':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]' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("clone") + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + # XXX needs to bail if there are no snapshots + ':snapshot:_zfs_dataset -t snap' \ + ':filesystem/volume:' + ;; + + ("promote") + # XXX complete only cloned filesystems + _arguments \ + ':filesystem:_zfs_dataset -t fs' \ + ;; + + ("rename") + _arguments -A "-*" \ + - set1 \ + '-p[Create parent datasets]' \ + ':filesystem/volume/snapshot:_zfs_dataset' \ + ':filesystem/volume/snapshot:' \ + - set2 \ + '-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' + ;; + + ("set") + _arguments \ + ':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' \ + ':property:_values -s , "property" $ro_properties $rw_propnames all' \ + '*:filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("inherit") + _arguments -A "-*" \ + '-r[Recursively inherit property for all children]' \ + ':property:_values -s , "property" $ro_properties $rw_properties' \ + '*:filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("mount") + _arguments -A "-*" \ + '-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]' + ;; + + ("unmount") + _arguments -A "-*" \ + - set1 \ + '-f[Force unmount]' \ + ':filesystem:_zfs_dataset -t fs -t mtpt' \ + - set2 \ + '-a[Unmount all ZFS filesystems]' + ;; + + ("share") + _arguments -A "-*" \ + - set1 \ + '-a[Share all available ZFS filesystems]' \ + - set2 \ + ':filesystem:_zfs_dataset -t fs' + ;; + + ("unshare") + _arguments -A "-*" \ + - set1 \ + '-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' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("receive") + _arguments -A "-*" \ + '-v[Verbose]' \ + '-n[Do not receive the stream]' \ + '-F[Force a rollback if necessary]' \ + - set1 \ + ':filesystem/volume/snapshot:_zfs_dataset' \ + - set2 \ + '-d[Set path prefix]:filesystem:_zfs_dataset -t fs' + ;; + + ("allow"|"unallow") + _message "unimplemented zfs subcommand: $service" + ;; + + ("upgrade") + _arguments -A "-*" \ + - set1 \ + '-v[Verbose]' \ + - set2 \ + '-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' \ + ;; + + (*) + _message "unknown zfs subcommand: $service" + ;; + esac +} + +_zfs "$@" diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool index ae98c2b7f..40628e82c 100644 --- a/Completion/Unix/Command/_zpool +++ b/Completion/Unix/Command/_zpool @@ -199,3 +199,204 @@ _zpool() { } _zpool "$@" +#compdef zpool + +_zpool() { + local -a subcmds fields + + subcmds=( + create destroy add remove list iostat status online + offline clear attach detach replace scrub import export + upgrade history get set + ) + + fields=( + name\:"Pool name" size\:"Total size" used\:"Space used" + available\:"Space available" capacity\:"Space used (percentage)" + health\:"Health status" + ) + + properties=( + "bootfs:value:" + "autoreplace:value:(on off)" + "delegation:value:(on off)" + ) + propnames=( ${properties%%:*} ) + + import_properties=( + xattr + copies + shareiscsi + canmount + share + sharenfs + userprop + mount + ) + + if [[ $service == "zpool" ]]; then + _arguments -C -A "-*" \ + '-\?[Help]' \ + '*::command:->subcmd' && return 0 + + if (( CURRENT == 1 )); then + _wanted commands expl "zpool subcommand" compadd -a subcmds + return + fi + service="$words[1]" + curcontext="${curcontext%:*}=$service:" + fi + + case $service in + (clear) + _arguments \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (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:' \ + ':pool name:' \ + '*:virtual device:_files' + ;; + + (destroy) + _arguments -A "-*" \ + '-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]' \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (list) + _arguments \ + '-H[Scripted mode]' \ + '-o[Fields to list]:field:_values -s , "field" ${^fields/\:/[}\]' \ + '::pool name:_zfs_pool' + ;; + + (iostat) + _arguments -A "-*" \ + '-v[Verbose statistics]' \ + '*::pool name:_zfs_pool' \ + '::interval:' \ + '::count:' + ;; + + (status) + _arguments -A "-*" \ + '-v[Verbose information]' \ + '-x[Show only unhealthy pools]' \ + '*::pool name:_zfs_pool' + ;; + + (offline) + _arguments -A "-*" \ + '-t[Offline until next reboot]' \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (online) + _arguments \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (attach) + # TODO: first device should choose first from existing. + _arguments \ + '-f[Force attach, even if in use]' \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' \ + ':virtual device:_files' + ;; + + (detach) + _arguments \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' + ;; + + (replace) + _arguments -A "-*" \ + '-f[Force attach, even if in use]' \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' \ + '::virtual device:_files' + ;; + + (scrub) + _arguments -A "-*" \ + '-s[Stop scrubbing]' \ + '*:pool name:_zfs_pool' + ;; + + (export) + _arguments -A "-*" \ + '-f[Forcefully unmount all datasets]' \ + '*:pool name:_zfs_pool' + ;; + + (import) + # TODO: -o should complete options + _arguments -A "-*" \ + '*-d[Search for devices or files in directory]:_files -/' \ + '-D[Destroyed pools]' \ + '-f[Force import]' \ + - 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]' + ;; + + (get) + _arguments -A "-*" \ + ':property:_values -s , "property" $propnames all' \ + '*:pool name:_zfs_pool' + ;; + + (set) + _arguments -A "-*" \ + ':property:_values -s , "property" $properties' \ + '*:pool name:_zfs_pool' + ;; + + (upgrade) + _arguments -A "-*" \ + - set1 \ + '-v[Display ZFS versions and descriptions]' \ + - set2 \ + '-a[Upgrade all pools]' \ + '*:pool name:_zfs_pool' + ;; + + (history) + _arguments -A "-*" \ + '-i[Display internal events]' \ + '-l[Long format]' \ + '*:pool name:_zfs_pool' + ;; + + (*) + _message "unknown zpool subcommand: $service" + ;; + esac +} + +_zpool "$@" |