#compdef portsnap

local context state line
typeset -A opt_args

flags=(
  '(cron)fetch[Fetch a compressed snapshot or update existing one]'
  '(fetch)cron[Sleep rand(3600) seconds, and then fetch updates]'
  '(update)extract[Extract snapshot, replacing existing files and dirs]'
  '(extract)update[Update ports tree to match current snapshot]'
)

_arguments -C -s \
    '-d:Store working files in workdir:_files -/' \
    '-f:Read configuration options from conffile:_files' \
    '-I[Update INDEX only. (update command only)]' \
    '-k:Trust an RSA key with SHA256 hash of KEY:_files' \
    '-l:Merge the specified local describes file into the INDEX:_files' \
    '-p:Location of uncompressed ports tree:_files -/' \
    '-s:Server from which to fetch updates:_hosts' \
    '*:principal:->principal' && ret=0

if [[ $state == principal ]]; then
  _alternative \
    ':file flag:_values -S " " -w "commands" $flags[@]' \
    '*:path:_files -/'
fi

return ret
