# Set this to 1 if you want to cache the tasks.
cache_task_list=1

# Cache filename.
cache_file='.cake_task_cache'

function _cake_does_target_list_need_generating() {
  if [[ $cache_task_list -eq 0 ]]; then
    return 1
  fi

  if [[ ! -f $cache_file ]]; then
    return 0
  else
    accurate=$(stat -f%m $cache_file)
    changed=$(stat -f%m Cakefile)
    return $(expr $accurate '>=' $changed)
  fi
}

function _cake() {
  if [[ -f Cakefile ]]; then
    if _cake_does_target_list_need_generating; then
      cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$' > $cache_file
      compadd `cat $cache_file`
    else
      compadd `cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'`
    fi
  fi
}

compdef _cake cake