_capistrano 1.03 KB
Newer Older
1
#compdef xcap cap
Reza's avatar
Reza committed
2
3
#autoload

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Added `xcap` because `cap` is a reserved word. `cap` completion doesn't work.
# http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fcap-Module

local curcontext="$curcontext" state line ret=1
local -a _configs

_arguments -C \
  '1: :->cmds' \
  '2:: :->args' && ret=0

_cap_tasks() {
  if [[ -f config/deploy.rb || -f Capfile ]]; then
    if [[ ! -f .cap_tasks~ ]]; then
      xcap -v --tasks | awk '{command=$2; $1=$2=$3=""; gsub(/^[ \t\r\n]+/, "", $0); gsub(":", "\\:", command); print command"["$0"]"}' > .cap_tasks~
    fi

    OLD_IFS=$IFS
    IFS=$'\n'
    _values 'cap commands' $(< .cap_tasks~)
    IFS=$OLD_IFS
    # zmodload zsh/mapfile
    # _values ${(f)mapfile[.cap_tasks~]}
Reza's avatar
Reza committed
26
  fi
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
}

_cap_stages() {
  compadd $(find config/deploy -name \*.rb | cut -d/ -f3 | sed s:.rb::g)
}

case $state in
  cmds)
    # check if it uses multistage
    if [[ -d config/deploy ]]; then
      _cap_stages
    else
      _cap_tasks
    fi
    ret=0
    ;;
  args)
    _cap_tasks
    ret=0
    ;;
esac

return ret