From b2722856e2cbc8bde176f1e5883a331a5d666cfd Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Sun, 8 Jul 2012 17:54:01 +0000 Subject: Danek: 30562: Solaris completion updates --- ChangeLog | 11 +++++++- Completion/Solaris/Command/_dladm | 54 +++++++++++++++++++++++++++++++++---- Completion/Solaris/Command/_flowadm | 7 ++++- Completion/Solaris/Command/_ipadm | 7 ++++- Completion/Solaris/Command/_zoneadm | 4 +-- Completion/Unix/Command/_zfs | 27 ++++++++----------- Completion/Unix/Command/_zpool | 3 ++- Completion/Unix/Type/_zfs_dataset | 54 ++++++++++++++++++++++++++++++++----- 8 files changed, 134 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4aebbb154..dd90ed722 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-07-08 Peter Stephenson + + * Danek: 30562: Completion/Solaris/Command/_dladm, + Completion/Solaris/Command/_flowadm, + Completion/Solaris/Command/_ipadm, + Completion/Solaris/Command/_zoneadm, + Completion/Unix/Command/_zfs, Completion/Unix/Command/_zpool, + Completion/Unix/Type/_zfs_dataset: Solaris completion updates. + 2012-06-30 Barton E. Schaefer * 30540: Src/builtin.c: process the rest of the typeset flags when @@ -16433,5 +16442,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.5677 $ +* $Revision: 1.5678 $ ***************************************************** diff --git a/Completion/Solaris/Command/_dladm b/Completion/Solaris/Command/_dladm index 636b766bc..5e5ab0172 100644 --- a/Completion/Solaris/Command/_dladm +++ b/Completion/Solaris/Command/_dladm @@ -1,5 +1,5 @@ #compdef dladm -# Synced with the S11U1 build 16 man page +# Synced with the S11U1 build 19 man page _dladm_links() { compadd "$@" - $(dladm show-link -p -o link) @@ -81,15 +81,15 @@ _dladm() { # TODO: some subcommands may take different arguments based on options subcmds=( - "show-ether" "show-ib" "show-usage" + "help" "show-ether" "show-ib" "show-usage" {"rename","show"}"-link" {"add","create","delete","modify","remove","show"}"-aggr" {"connect","disconnect","scan","show"}"-wifi" {"reset","set","show"}"-linkprop" {"create","delete","show"}"-secobj" - {"create","delete","show"}"-vlan" + {"create","delete","modify","show"}"-vlan" {"delete","show"}"-phys" - {"create","delete","show"}"-vnic" + {"create","delete","modify","show"}"-vnic" {"create","delete","show"}"-etherstub" {"create","modify","delete","add","remove","show"}"-bridge" {"create","modify","delete","show"}"-iptun" @@ -112,7 +112,7 @@ _dladm() { link_properties=( "link" "zone" "class" "mtu" "state" "over" ) link_stats_properties=( "link" "ipackets" "rbytes" "ierrors" "opackets" "obytes" "oerrors" ) - aggr_properties=( "link" "policy" "addrpolicy" "lacpactivity" "lacptimer" "flags" ) + aggr_properties=( "link" "policy" "addrpolicy" "lacpactivity" "lacptimer" "mode" "flags" ) aggr_lacp_properties=( "link" "port" "aggregatable" "sync" "coll" "dist" "defaulted" "expired" ) aggr_ext_properties=( "link" "port" "speed" "duplex" "state" "address" "portstate" ) @@ -148,8 +148,15 @@ _dladm() { linkprops_general=( "autopush:streams modules:" + "cos:value:(0 1 2 3 4 5 6 7)" "cpus:processors:" "cpus-effective" + "etsbw-lcl:percentage:" + "etsbw-lcl-advice" + "etsbw-lcl-effective" + "etsbw-rmt-effective" + "lro:value:(off on auto)" + "lro-effective" "mac-address:MAC address:" "maxbw:bandwith:" "pool:pools:" @@ -216,6 +223,8 @@ _dladm() { "mtu:value:" "ntcs" "pfcmap:value:" + "pfcmap-lcl-effective" + "pfcmap-rmt-effective" "speed" "tagmode:value:(normal vlanonly)" "vlan-announce:value:(off gvrp)" @@ -233,6 +242,10 @@ _dladm() { ) case $service in + ("help") + _arguments ':subcommand:($subcmds)' + ;; + ("show-link") _arguments -A "-*" \ '(-P --persistent)'{-P,--persistent}'[Display persistent link configuration]' \ @@ -257,6 +270,7 @@ _dladm() { ("show-phys") _arguments -A "-*" \ + '-D[Show Data Center Bridging information]:featureset:(ets pfc)' \ '-H[Show hardware resource usage]' \ '-L[Display location information]' \ '(-P --persistent)'{-P,--persistent}'[Display persistent link configuration]' \ @@ -280,6 +294,7 @@ _dladm() { '(-t --temporary)'{-t,--temporary}'[Aggregation should be temporary]' \ '(-R --root)'{-R,--root}'[Root directory]:directory:_path_files -/' \ '(-l --link)'{-l,--link}'[Component link]:link:_dladm_links' \ + '(-m --mode)'{-m,--mode}'[Aggregation mode]:mode:(dlmp trunk)' \ '(-P --policy)'{-P,--policy}'[Port selection policy]:policy:_values -s , "policy" L2 L3 L4' \ '(-L --lacp-mode)'{-L,--lacp-mode}'[LACP mode]:lacp mode:(off active passive)' \ '(-T --lacp-timer)'{-T,--lacp-timer}'[LACP timer]:lacp timer:(short long)' \ @@ -292,6 +307,7 @@ _dladm() { '(-t --temporary)'{-t,--temporary}'[Aggregation should be temporary]' \ '(-R --root)'{-R,--root}'[Root directory]:directory:_path_files -/' \ '(-l --link)'{-l,--link}'[Component link]:link:_dladm_links' \ + '(-m --mode)'{-m,--mode}'[Aggregation mode]:mode:(dlmp trunk)' \ '(-P --policy)'{-P,--policy}'[Port selection policy]:policy:_values -s , "policy" L2 L3 L4' \ '(-L --lacp-mode)'{-L,--lacp-mode}'[LACP mode]:lacp mode:(off active passive)' \ '(-T --lacp-timer)'{-T,--lacp-timer}'[LACP timer]:lacp timer:(short long)' \ @@ -358,6 +374,19 @@ _dladm() { ':VLAN link name:_dladm_vlans' ;; + ("modify-vlan") + _arguments -A "-*" \ + '(-t --temporary)'{-t,--temporary}'[VLAN should be temporary]' \ + '(-f --force)'{-f,--force}'[Force VLAN creation]' \ + '(-R --root-dir)'{-R,--root-dir}'[Root directory]:directory:_path_files -/' \ + '(-l --link)'{-l,--link}'[Component link]:link:_dladm_links' \ + '-v[VLAN ID]:id:' \ + - set1 \ + '-L[Source link]:link:_dladm_links' \ + - set2 \ + ':VLAN link name:' + ;; + ("show-vlan") _arguments -A "-*" \ '(-P --persistent)'{-P,--persistent}'[Display persistent link configuration]' \ @@ -486,6 +515,21 @@ _dladm() { ':VNIC name:_dladm_vnics' ;; + ("modify-vnic") + # TODO: MAC address completion could be richer + _arguments -A "-*" \ + '(-t --temporary)'{-t,--temporary}'[Creation should be temporary]' \ + '(-R --root)'{-R,--root}'[Root directory]:directory:_path_files -/' \ + '(-l --link)'{-l,--link}'[Component link]:link:_dladm_links' \ + '(-m --mac-address)'{-m,--mac-address}'[MAC address]:address:(factory random auto vrrp)' \ + '-v[VLAN ID]:id:' \ + '(-p --prop)'{-p,--prop}'[Property values]:value:_values -s , "property" ${(M)linkprops_general\:#*\:*}' \ + - set1 \ + '-L[Source link]:link:_dladm_links' \ + - set2 \ + ':VNIC name:' + ;; + ("show-vnic") _arguments -A "-*" \ '(-P --persistent)'{-P,--persistent}'[Display persistent object information]' \ diff --git a/Completion/Solaris/Command/_flowadm b/Completion/Solaris/Command/_flowadm index 2a18ecc8d..53a9f2210 100644 --- a/Completion/Solaris/Command/_flowadm +++ b/Completion/Solaris/Command/_flowadm @@ -1,5 +1,5 @@ #compdef flowadm -# Synced with the Nevada build 171 man page +# Synced with the S11U1 build 19 man page _flowadm() { @@ -16,6 +16,7 @@ _flowadm_flow_int(){ } subcmds=( + "help" "show-flow" "add-flow" "remove-flow" @@ -49,6 +50,10 @@ if [[ $service == "flowadm" ]]; then fi case $service in + ("help") + _arguments ':subcommand:($subcmds)' + ;; + ("show-flow") _arguments -A "-*" \ '-o[specify field to display]:field:(flow link ipaddr proto port dsfield)' \ diff --git a/Completion/Solaris/Command/_ipadm b/Completion/Solaris/Command/_ipadm index 062abaac7..34d1eacba 100644 --- a/Completion/Solaris/Command/_ipadm +++ b/Completion/Solaris/Command/_ipadm @@ -1,5 +1,5 @@ #compdef ipadm -# Synced with the S11U1 build 16 man page +# Synced with the S11U1 build 19 man page _ipadm_ifs() { local -a extra @@ -81,6 +81,7 @@ _ipadm() { local -a proto_all_properties proto_propproperties subcmds=( + "help" {"show","disable","enable"}"-if" {"create","delete"}"-ip" {"create","delete"}"-vni" @@ -153,6 +154,10 @@ _ipadm() { fi case $service in + ("help") + _arguments ':subcommand:($subcmds)' + ;; + ("create-ip") _arguments -A "-*" \ '(-t --temporary)'{-t,--temporary}'[Interface should be temporary]' \ diff --git a/Completion/Solaris/Command/_zoneadm b/Completion/Solaris/Command/_zoneadm index f0a45a1b8..3f42673e1 100644 --- a/Completion/Solaris/Command/_zoneadm +++ b/Completion/Solaris/Command/_zoneadm @@ -1,5 +1,5 @@ #compdef zoneadm -# Synced with the Solaris 11 build 168 man page +# Synced with the S11U1 build 19 man page _zoneadm_bootargs() { # This is a subset of the arguments to kernel(1M) @@ -129,7 +129,7 @@ _zoneadm() { ("mark") _arguments -A "-*" \ - ':"incomplete":_values \"incomplete\" incomplete' + ':state:(incomplete unavailable)' ;; ("move") diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs index 204784d56..4cc24a59f 100644 --- a/Completion/Unix/Command/_zfs +++ b/Completion/Unix/Command/_zfs @@ -1,5 +1,5 @@ #compdef zfs -# Synced with the S11U1 build 16 man page +# Synced with the S11U1 build 20 man page _zfs() { local context state line expl @@ -21,7 +21,7 @@ _zfs() { "compressratio" "mounted" "origin" "usedbychildren" "usedbydataset" "usedbyrefreservation" "usedbysnapshots" "defer_destroy" "userused@" "userrefs" "groupused@" - "keystatus" "rekeydate" + "keychangedate" "keystatus" "rekeydate" ) # TODO: Be cleverer about what values can be set. Is there any way to @@ -111,12 +111,12 @@ _zfs() { '-p[Create parent datasets]' \ '-o[Set initial properties]:property:_values -s , "property" $create_properties' \ - set1 \ - ':filesystem:' \ + ':filesystem:_zfs_dataset -t fs -e "parent dataset"' \ - set2 \ '-s[Create sparse volume]' \ '-b[Set volblocksize]:blocksize:' \ '-V[Set size]:size:' \ - ':volume:' + ':volume:_zfs_dataset -t fs -e "parent dataset"' ;; ("destroy") @@ -153,25 +153,20 @@ _zfs() { '-K[Create encryption key]' \ '-o[Set property]:property:_values -s , "property" $create_properties' \ ':snapshot:_zfs_dataset -t snap' \ - ':filesystem/volume:' + ':filesystem/volume:_zfs_dataset -t fs -e "parent dataset"' ;; ("promote") - # XXX complete only cloned filesystems _arguments \ - ':filesystem:_zfs_dataset -t fs' \ + ':filesystem:_zfs_dataset -t clone' \ ;; ("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:' + '(-r)-p[Create parent datasets]' \ + '(-p)-r[Recursively rename snapshots of all descendent datasets]' \ + ':dataset:_zfs_dataset -r1' \ + ':dataset:_zfs_dataset -r2' ;; ("list") @@ -182,7 +177,7 @@ _zfs() { '-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' \ + '-t[Dataset types to list]:dataset type:_values -s , "dataset type" all filesystem snapshot volume' \ '*:filesystem/volume/snapshot/path:_zfs_dataset -p' ;; diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool index 568f493d0..0af2ab32d 100644 --- a/Completion/Unix/Command/_zpool +++ b/Completion/Unix/Command/_zpool @@ -1,5 +1,5 @@ #compdef zpool -# Synced with the S11U1 build 16 man page +# Synced with the S11U1 build 19 man page _zpool() { local context state line expl @@ -108,6 +108,7 @@ _zpool() { (create) # TODO: investigate better vdev handling _arguments -A "-*" \ + '-B[Create EFI boot partition on whole disks]' \ '-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]' \ diff --git a/Completion/Unix/Type/_zfs_dataset b/Completion/Unix/Type/_zfs_dataset index 1cd49aebf..d862011ac 100644 --- a/Completion/Unix/Type/_zfs_dataset +++ b/Completion/Unix/Type/_zfs_dataset @@ -1,13 +1,19 @@ #autoload -local -a type paths_allowed typearg datasetlist expl +local -a type expl_type_arr rsrc rdst paths_allowed +local -a typearg datasetlist expl mlist local expl_type -zparseopts -D -E t+:=type p=paths_allowed +# -e takes an argument which is passed as as the "descr" argument to _wanted +# -p indicates that filesystem paths, not just dataset names, are allowed +# -r1 indicates that we're completing the source of a rename +# -r2 indicates that we're completing the destination of a rename +# -t takes arguments (what kinds of datasets) and can appear multiple times +zparseopts -D -E e:=expl_type_arr p=paths_allowed r1=rsrc r2=rdst t+:=type -[[ -n $type[(r)fs] ]] && typearg=( filesystem ) -[[ -n $type[(r)vol] ]] && typearg=( $typearg volume ) -[[ -n $type[(r)snap] ]] && typearg=( $typearg snapshot ) +[[ -n $type[(r)fs] ]] && typearg=( filesystem ) +[[ -n $type[(r)vol] ]] && typearg=( $typearg volume ) +[[ -n $type[(r)snap] ]] && typearg=( $typearg snapshot ) if [[ -n $typearg ]]; then typearg=( -t ${(j:,:)typearg} ) # We know we're in zfs list if paths_allowed is non-empty. @@ -20,7 +26,39 @@ if [[ ${#paths_allowed} -gt 0 && $PREFIX == /* ]]; then return fi -datasetlist=( ${="$(zfs list -H -o name $typearg)":#no datasets available} ) +if [[ ${#rsrc} -gt 0 ]]; then + # With the -r option to zfs rename, we can only rename snapshots. With the + # -p option, we can only rename filesystems and volumes. + if [[ -n $words[(r)-r] ]]; then + typearg=( -t snapshot ) + elif [[ -n $words[(r)-p] ]]; then + typearg=( -t filesystem,volume ) + else + typearg=( -t filesystem,snapshot,volume ) + fi +fi + +if [[ ${#rdst} -gt 0 ]]; then + if [[ ${words[CURRENT - 1]} == *@* ]]; then + # If we're renaming snapshots, there's nothing to complete, so + # we simply give instructions. (In non-recursive cases, we + # could put the name of the snapshotted dataset first, but why + # bother with the long form?) + _message -e 'snapshot name (beginning with "@")' + return + else + # The parent dataset must be a filesystem, and can't rename + # a dataset into another pool. Plus we hardcode the expl. + typearg=( -t fs -r ${${words[CURRENT - 1]}%%/*} ) + expl_type_arr=( -e "parent dataset" ) + fi +fi + +if [[ -n $type[(r)clone] ]]; then + datasetlist=( ${="$(zfs list -H -o name,origin -t fs | awk "\$2 != \"-\" {print \$1}")":#no cloned filesystems available} ) +else + datasetlist=( ${="$(zfs list -H -o name $typearg)":#no datasets available} ) +fi expl_type=${typearg[2,-1]//,/\/} if [[ -n $type[(r)mtpt] ]]; then @@ -29,4 +67,8 @@ if [[ -n $type[(r)mtpt] ]]; then expl_type="$expl_type/mountpoint" fi +if [[ -n $expl_type_arr[2] ]]; then + expl_type=$expl_type_arr[2] +fi + _wanted dataset expl "$expl_type" _multi_parts "$@" -q / datasetlist -- cgit 1.4.1