blob: e58eb8bc6a99e9e337d0edb84d111e427d11e2a9 (
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
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#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() {
# we use the file directly as `kerl list releases` dumps extraneous data to stdout
releases=(${(f)"$(_call_program releases cat ~/.kerl/otp_releases)"})
}
_kerl_builds() {
builds=(${(f)"$(_call_program builds kerl list builds 2>/dev/null | cut -f 2 -d ",")"})
}
_kerl_installations() {
installations=(${(f)"$(_call_program installations kerl list installations 2>/dev/null | cut -f 2 -d " ")"})
}
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 -a _update_options
_update_options=(
'releases:All available OTP releases'
)
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
active) ;;
status) ;;
prompt) ;;
build)
_arguments \
'1: :->rels' \
'2: :->buildnames' && return 0
if [[ "$state" == rels ]]; then
_kerl_available_releases
_wanted releases expl 'all releases' compadd -a releases
elif [[ "$state" == buildnames ]]; then
fi;;
# TODO: suggest build name as $(lowercase $release)
install)
_arguments \
'1: :->blds' \
'2::location:_path_files -W "(~/kerl)"' && return 0
## TODO: This path should not be hard-coded!
if [[ "$state" == blds ]]; then
_kerl_builds
_wanted builds expl 'all builds' compadd -a builds
return
fi
# TODO: suggest starting location of "$KERLDIR/$(lowercase $build)"
_directories
;;
deploy)
_arguments \
'1: :->hosts' \
'2: :->installs' && return 0
if [[ "$state" == hosts ]]; then
_hosts
return
elif [[ "$state" == installs ]]; then
_kerl_installations
_wanted installations expl 'all installations' compadd -a installations
return
fi
;; # TODO: [remote directory] (or at least prompt)
update)
_arguments '1: :->updopts' && return 0
if [[ "$state" == updopts ]]; then _describe "kerl update options" _update_options; fi
;;
list)
_arguments '1: :->listopts' && return 0
if [[ "$state" == listopts ]]; then _describe "kerl list options" _list_options; fi
;;
delete)
_arguments \
'1:<build|installation>:(build installation)' && return 0
case "$words[2]" in
build)
_kerl_builds
_wanted builds expl 'all builds' compadd -a builds
return
;;
installation)
_kerl_installations
_wanted installations expl 'all installations' compadd -a installations
return
esac
;;
cleanup)
_kerl_builds
builds=('all' $builds)
_wanted builds expl 'all builds' compadd -a builds;;
esac
|