zsh-workers
 help / color / mirror / code / Atom feed
54e22bde4a538c692473ae5546f4494d034c6f34 blob 2872 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
#compdef fmadm

_fm_modules() {
  compadd "$@" - ${${(f)"$(_call_program modules fmadm config)"}[2,-1]// */}
}

_fm_faulted_fmris() {
	compadd "$@" - $(fmadm faulty -r 2> /dev/null | awk '{print $1}')
}

_fm_faulted_uuids() {
	compadd "$@" - $(fmadm faulty -s 2> /dev/null | tail +4 | awk '{print $4}')
}

_fm_faulted_labels() {
	local line q='"'
	compadd "$@" - $(fmadm faulty -f 2> /dev/null | while read line; do
		if [[ $line == "----"* ]]; then
			read line
			if [[ $line == '"'* ]]; then
				print ${${line[(r)$q,(rn:2:)$q]}[2,-2]}
			fi
		fi
	done)
}

local curcontext="$curcontext" state line expl ret=1
local -A opt_args
local -a subcmds args

# TODO: lookup-alias and remove-alias need completion based on the
# output of list-alias, but I have no examples of that output.

subcmds=(
  faulty list acquit replaced repaired list-alert clear
  list-defect list-fault
  add-alias remove-alias lookup-alias list-alias sync-alias
  config load unload reset rotate flush
)

_arguments -C -A "-*" \
  '-q[quiet mode]' \
  '1:fmadm subcommand:compadd -M "r:|-=* r:|=*" -a subcmds' \
  '*::command:->subcmd' && ret=0

[[ -z $state ]] && return ret
service="$words[1]"
curcontext="${curcontext%:*}-$service:"

case $service in
  (faulty|list|list-alert|list-defect|list-fault)
    args+=(
      '-f[display faulty FRUs]'
      '-i[display persistent cache IDs]'
      '-p[page output]'
      '-r[display resources]'
      '-s[display one-line summaries]'
      '-u[only display fault with given uuid]:uuid:_fm_faulted_uuids'
      '-v[display full output]'
    )
  ;|

  (list|faulty)
    _arguments -A "-*" $args \
      '-a[display all faults]' \
      '-g[group faults]' \
      '-n[limit output to specified number of entries]:number'
  ;;

  (list-alert|list-defect|list-fault)
    _arguments -A "-*" $args \
      '-a[display all resources]'
  ;;

  (acquit)
    _alternative \
      'fmadm-acquit-label:label:_fm_faulted_labels' \
      'fmadm-acquit-uuid:uuid:_fm_faulted_uuids' \
      'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
  ;;

  (repaired|replaced)
    _alternative \
      'fmadm-acquit-label:label:_fm_faulted_labels' \
      'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
  ;;

  (add-alias)
    _arguments :chassis :alias-id :comment && ret=0
  ;;

  (remove-alias|lookup-alias)
    _message -e aliases 'chassis or alias-id'
  ;;

  (load)
    _directories && ret=0
  ;;

  (unload)
    _fm_modules && ret=0
  ;;

  (reset)
    _arguments -A "-*" \
      '-s[reset named SERD]:serd' \
      ':module:_fm_modules' && ret=0
  ;;

  (rotate)
    _values 'logfile' errlog fltlog infolog infolog_hival && ret=0
  ;;

  (flush)
    _fm_faulted_fmris && ret=0
  ;;

  (list-alias|config|sync-aliases) _message 'no more arguments' ;;

  (*) # fallback to defaults for any new or unhandled subcommand
    _default && ret=0
  ;;
esac

return ret
debug log:

solving 54e22bd ...
found 54e22bd in https://git.vuxu.org/mirror/zsh/

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).