aboutsummaryrefslogtreecommitdiffstats
path: root/zsh_completion/_kerl
blob: 628b3bfa67937c9567b3c446b30b8a0e864cec59 (plain) (blame)
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
#compdef kerl

# ------------------------------------------------------------------------------
# Description
# -----------
#
#  Completion script for kerl (http://github.com/spawngrid/kerl
#
#  Source: https://github.com/sanmiguel/zsh-completions
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
#  * Michael Coles (https://github.com/sanmiguel)
#
# ------------------------------------------------------------------------------

# TODO: These are naive and stupid
_kerl_available_releases() {
  releases=(${(f)"$(_call_program releases cat ~/.kerl/otp_releases)"})
}

_kerl_builds() {
  builds=(${(f)"$(_call_program builds cut -f 2 -d "," ~/.kerl/otp_builds)"})
}

_kerl_installations() {
  installations=(${(f)"$(_call_program installations kerl list installations 2>/dev/null)"})
}

local -a _1st_arguments
_1st_arguments=(
  'build:Build specified release or git repository'
  'install:Install the specified release at the given location'
  'deploy:Deploy the specified installation to the given host and location'
  'update:Update the list of available releases from erlang.org'
  'list:List releases, builds and installations'
  'delete:Delete builds and installations'
  'active:Print the path of the active installation'
  'status:Print available builds and installations'
  'prompt:Print a string suitable for insertion in prompt'
  'cleanup:Remove compilation artifacts (use after installation)'
)

local -a _list_options
_list_options=(
    'releases:All available OTP releases'
    'builds:All locally built OTP releases'
    'installations:All locally installed OTP builds'
)

local expl
local -a releases builds installations

_arguments \
  '*:: :->subcmds' && return 0

if (( CURRENT == 1 )); then
  _describe -t commands "kerl subcommand" _1st_arguments
  return
fi

case "$words[1]" in
  build)
    _arguments \
        '1: :->rels' && return 0

        if [[ "$state" == rels ]]; then
            _kerl_available_releases
            _wanted releases expl 'all releases' compadd -a releases
        fi;;
  install)
      _arguments \
        '1: :->blds' && return 0
        
      if [[ "$state" == blds ]]; then
        _kerl_builds
        _wanted builds expl 'all builds' compadd -a builds
        return
      fi
      _directories
      ;;
  deploy) _hosts;; # TODO: [directory] [remote directory]
  update) _describe "kerl update options" ('releases:Update releases list');;
  list)
    _describe "kerl list options" _list_options
    return
    ;;
  delete) ;;
  active) ;;
  status) ;;
  prompt) ;;
  cleanup) ;;
esac