From 5b29fedad850299950195a1878fe4923778f9dcc Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 21 Jul 2008 19:15:22 +0000 Subject: 25324: Danek Duvall: some Solaris and more general completions --- Completion/Unix/Command/.distfiles | 6 + Completion/Unix/Command/_pkg_instance | 20 +++ Completion/Unix/Command/_pkgadd | 32 +++++ Completion/Unix/Command/_pkginfo | 22 ++++ Completion/Unix/Command/_pkgrm | 20 +++ Completion/Unix/Command/_zfs | 238 ++++++++++++++++++++++++++++++++++ Completion/Unix/Command/_zpool | 201 ++++++++++++++++++++++++++++ 7 files changed, 539 insertions(+) create mode 100644 Completion/Unix/Command/_pkg_instance create mode 100644 Completion/Unix/Command/_pkgadd create mode 100644 Completion/Unix/Command/_pkginfo create mode 100644 Completion/Unix/Command/_pkgrm create mode 100644 Completion/Unix/Command/_zfs create mode 100644 Completion/Unix/Command/_zpool (limited to 'Completion/Unix/Command') diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles index 727443a13..654f8a8d8 100644 --- a/Completion/Unix/Command/.distfiles +++ b/Completion/Unix/Command/.distfiles @@ -142,6 +142,10 @@ _php _pine _ping _pkg-config +_pkg_instance +_pkgadd +_pkginfo +_pkgrm _pon _postfix _prcs @@ -223,5 +227,7 @@ _yodl _yp _zcat _zdump +_zfs _zip +_zpool ' diff --git a/Completion/Unix/Command/_pkg_instance b/Completion/Unix/Command/_pkg_instance new file mode 100644 index 000000000..3f4c49219 --- /dev/null +++ b/Completion/Unix/Command/_pkg_instance @@ -0,0 +1,20 @@ +#autoload + +local -A opts +local whicharg + +zparseopts -E -D -- '-_opts:=opts' + +whicharg=${opts#*:} + +case ${opts%:*} in +(installed) + compadd "$@" - ${opt_args[$whicharg]}/var/sadm/pkg/*/pkginfo(:h:t) + ;; +(spooled) + compadd "$@" - ${opt_args[$whicharg]}/*(:t) + ;; +(uninstalled) + compadd "$@" - ${opt_args[$whicharg]:-/var/spool/pkg}/*/pkgmap(:h:t) + ;; +esac diff --git a/Completion/Unix/Command/_pkgadd b/Completion/Unix/Command/_pkgadd new file mode 100644 index 000000000..042cc79a1 --- /dev/null +++ b/Completion/Unix/Command/_pkgadd @@ -0,0 +1,32 @@ +#compdef pkgadd + +_pkgadd_pass() { + _values -S : 'password descriptor' \ + '(file env console)pass[Literal password]:password:' \ + '(pass file console)env[Environment variable]:environment:_parameters -g "*export*"' \ + '(pass env console)file[File]:file:_files' \ + '(pass env file)console[From /dev/tty]' +} + +_pkgadd() { + _arguments -s \ + '-d[Device]:device file:_files' \ + '-x[HTTP(S) proxy]:HTTP proxy: ' \ + '-k[Keystore]:keystore:_files' \ + '-P[Password to decrypt keystore]:password:_pkgadd_pass' \ + '-Y[Select packages by category]:category: ' \ + - set1 \ + '-n[Non-interactive mode]' \ + '-v[Trace all scripts]' \ + '-a[Admin file]:admin file:_files' \ + "-M[Don't use vfstab file]" \ + '-R[Root path]:root path:_files -/' \ + '-r[Response file]:response file:_files' \ + '-V[Alternate vfstab file]:vfstab file:_files' \ + '*:package instance:_pkg_instance --_opts uninstalled:-d' \ + - set2 \ + '-s[Spool package]:spool directory:_files -/' \ + '*:package instance:_pkg_instance --_opts uninstalled:-d' +} + +_pkgadd "$@" diff --git a/Completion/Unix/Command/_pkginfo b/Completion/Unix/Command/_pkginfo new file mode 100644 index 000000000..0253ab3e3 --- /dev/null +++ b/Completion/Unix/Command/_pkginfo @@ -0,0 +1,22 @@ +#compdef pkginfo + +_pkginfo() { + _arguments -s \ + '(-q -r -x)-l[Long listing]' \ + '(-l -r -x)-q[Quiet mode]' \ + '(-l -q -x)-r[Relocation base]' \ + '(-l -q -r)-x[Extracted listing]' \ + '-c[Category]:category: ' \ + '-a[Architecture]:architecture: ' \ + '-v[Version]:version: ' \ + - set1 \ + '(-p)-i[Select completely installed packages]' \ + '(-i)-p[Select partially installed packages]' \ + '-R[Root path]:root path:_files -/' \ + '*:package instance:_pkg_instance --_opts installed:set1--R' \ + - set2 \ + '-d[Device]:device file:_files' \ + '*:package instance:_pkg_instance --_opts uninstalled:set2--d' +} + +_pkginfo "$@" diff --git a/Completion/Unix/Command/_pkgrm b/Completion/Unix/Command/_pkgrm new file mode 100644 index 000000000..4edccbfda --- /dev/null +++ b/Completion/Unix/Command/_pkgrm @@ -0,0 +1,20 @@ +#compdef pkgrm + +_pkgrm() { + _arguments -s \ + '-Y[Select packages by category]:category: ' \ + - set1 \ + '-n[Non-interactive mode]' \ + '-v[Trace all scripts]' \ + '-a[Admin file]:admin file:_files' \ + "-A[Force removal of all files]" \ + "-M[Don't use vfstab file]" \ + '-R[Root path]:root path:_files -/' \ + '-V[Alternate vfstab file]:vfstab file:_files' \ + '*:package instance:_pkg_instance --_opts installed:set1--R' \ + - set2 \ + '-s[Spool package]:spool directory:_files -/' \ + '*:package instance:_pkg_instance --_opts spooled:set2--s' +} + +_pkgrm "$@" diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs new file mode 100644 index 000000000..21ab5eaa9 --- /dev/null +++ b/Completion/Unix/Command/_zfs @@ -0,0 +1,238 @@ +#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:" # , "none" + "setuid:value:(on off)" + "shareiscsi:value:(on off)" # or "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:" # + "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 new file mode 100644 index 000000000..ae98c2b7f --- /dev/null +++ b/Completion/Unix/Command/_zpool @@ -0,0 +1,201 @@ +#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 "$@" -- cgit 1.4.1