chiark / gitweb /
Merge branch 'vagrantfile-box' into 'master'
[fdroidserver.git] / completion / bash-completion
1 # fdroid(1) completion                                   -*- shell-script -*-
2 #
3 # bash-completion - part of the FDroid server tools
4 #
5 # Copyright (C) 2013-2017 Hans-Christoph Steiner <hans@eds.org>
6 # Copyright (C) 2013, 2014 Daniel Martí <mvdan@mvdan.cc>
7 #
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU Affero General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU Affero General Public License for more details.
17 #
18 # You should have received a copy of the GNU Affero General Public License
19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
21 __fdroid_init() {
22         COMPREPLY=()
23         cur="${COMP_WORDS[COMP_CWORD]}"
24         prev="${COMP_WORDS[COMP_CWORD-1]}"
25
26         (( $# >= 1 )) && __complete_${1}
27 }
28
29 __by_ext() {
30         local ext="$1"
31         files=( metadata/*.$ext )
32         files=( ${files[@]#metadata/} )
33         files=${files[@]%.$ext}
34         echo "$files"
35 }
36
37 __package() {
38         files="$(__by_ext txt) $(__by_ext yaml) $(__by_ext json) $(__by_ext xml)"
39         COMPREPLY=( $( compgen -W "$files" -- $cur ) )
40 }
41
42 __apk_package() {
43         files=( ${1}/*.apk )
44         [ -f "${files[0]}" ] || return
45
46         files=( ${files[@]#*/} )
47         files=${files[@]%_*}
48         COMPREPLY=( $( compgen -W "$files" -- $cur ) )
49 }
50
51 __apk_vercode() {
52         local p=${cur:0:-1}
53
54         files=( ${1}/${p}_*.apk )
55         [ -f "${files[0]}" ] || return
56
57         files=( ${files[@]#*_} )
58         files=${files[@]%.apk}
59         COMPREPLY=( $( compgen -P "${p}:" -W "$files" -- $cur ) )
60 }
61
62 __vercode() {
63         local p v
64         echo $cur | IFS=':' read p v
65
66         COMPREPLY=( $( compgen -P "${p}:" -W "$( while read line; do
67                 if [[ "$line" == "Build Version:"* ]]
68                 then
69                         line="${line#*,}"
70                         printf "${line%%,*} "
71                 elif [[ "$line" == "Build:"* ]]
72                 then
73                         line="${line#*,}"
74                         printf "${line%%,*} "
75                 fi
76                 done < "metadata/${p}.txt" )" -- $cur ) )
77 }
78
79 __complete_options() {
80         case "${cur}" in
81                 --*)
82                         COMPREPLY=( $( compgen -W "--help --version ${lopts}" -- $cur ) )
83                         return 0;;
84                 *)
85                         COMPREPLY=( $( compgen -W "-h ${opts} --help --version ${lopts}" -- $cur ) )
86                         return 0;;
87         esac
88 }
89
90 __complete_build() {
91         opts="-v -q -l -s -t -f -a -w"
92
93         lopts="--verbose --quiet --latest --stop --test --server --resetserver
94  --on-server --skip-scan --no-tarball --force --all --wiki --no-refresh"
95         case "${cur}" in
96                 -*)
97                         __complete_options
98                         return 0;;
99                 *:*)
100                         __vercode
101                         return 0;;
102                 *)
103                         __package
104                         return 0;;
105         esac
106 }
107
108 __complete_install() {
109         opts="-v -q"
110         lopts="--verbose --quiet --all"
111         case "${cur}" in
112                 -*)
113                         __complete_options
114                         return 0;;
115                 *:)
116                         __apk_vercode repo
117                         return 0;;
118                 *)
119                         __apk_package repo
120                         return 0;;
121         esac
122 }
123
124 __complete_update() {
125         opts="-c -v -q -b -i -I -e -w"
126         lopts="--create-metadata --verbose --quiet --buildreport
127  --interactive --icons --editor --wiki --pretty --clean --delete-unknown
128  --nosign --rename-apks --use-date-from-apk"
129         case "${prev}" in
130                 -e|--editor)
131                         _filedir
132                         return 0;;
133         esac
134         __complete_options
135 }
136
137 __complete_publish() {
138         opts="-v -q"
139         lopts="--verbose --quiet"
140         case "${cur}" in
141                 -*)
142                         __complete_options
143                         return 0;;
144                 *:)
145                         __apk_vercode unsigned
146                         return 0;;
147                 *)
148                         __apk_package unsigned
149                         return 0;;
150         esac
151 }
152
153 __complete_checkupdates() {
154         opts="-v -q"
155         lopts="--verbose --quiet --auto --autoonly --commit --gplay"
156         case "${cur}" in
157                 -*)
158                         __complete_options
159                         return 0;;
160                 *)
161                         __package
162                         return 0;;
163         esac
164 }
165
166 __complete_import() {
167         opts="-u -s -q"
168         lopts="--url --subdir --rev --quiet"
169         case "${prev}" in
170                 -u|--url|-s|--subdir|--rev) return 0;;
171         esac
172         __complete_options
173 }
174
175 __complete_readmeta() {
176         opts="-v -q"
177         lopts="--verbose --quiet"
178         __complete_options
179 }
180
181 __complete_rewritemeta() {
182         opts="-v -q -l"
183         lopts="--verbose --quiet --list"
184         case "${cur}" in
185                 -*)
186                         __complete_options
187                         return 0;;
188                 *)
189                         __package
190                         return 0;;
191         esac
192 }
193
194 __complete_lint() {
195         opts="-v -q"
196         lopts="--verbose --quiet"
197         case "${cur}" in
198                 -*)
199                         __complete_options
200                         return 0;;
201                 *)
202                         __package
203                         return 0;;
204         esac
205 }
206
207 __complete_scanner() {
208         opts="-v -q"
209         lopts="--verbose --quiet"
210         case "${cur}" in
211                 -*)
212                         __complete_options
213                         return 0;;
214                 *:)
215                         __vercode
216                         return 0;;
217                 *)
218                         __package
219                         return 0;;
220         esac
221 }
222
223 __complete_verify() {
224         opts="-v -q -p"
225         lopts="--verbose --quiet"
226         case "${cur}" in
227                 -*)
228                         __complete_options
229                         return 0;;
230                 *:)
231                         __vercode
232                         return 0;;
233                 *)
234                         __package
235                         return 0;;
236         esac
237 }
238
239 __complete_btlog() {
240         opts="-u"
241         lopts="--git-remote --git-repo --url"
242         __complete_options
243 }
244
245 __complete_stats() {
246         opts="-v -q -d"
247         lopts="--verbose --quiet --download"
248         __complete_options
249 }
250
251 __complete_server() {
252         opts="-i -v -q"
253         lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
254  --verbose --quiet --no-checksum update"
255         __complete_options
256 }
257
258 __complete_signindex() {
259         opts="-v -q"
260         lopts="--verbose"
261         __complete_options
262 }
263
264 __complete_init() {
265         opts="-v -q -d"
266         lopts="--verbose --quiet --distinguished-name --keystore
267  --repo-keyalias --android-home --no-prompt"
268         __complete_options
269 }
270
271 __cmds=" build init install update publish checkupdates import readmeta \
272 rewritemeta lint scanner verify stats server signindex "
273
274 for c in $__cmds; do
275         eval "_fdroid_${c} () {
276                 local cur prev opts lopts
277                 __fdroid_init ${c}
278         }"
279 done
280
281 _fdroid() {
282         local cmd
283         cmd=${COMP_WORDS[1]}
284
285         [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
286                 (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) )
287         }
288 }
289
290 _fd-commit() {
291         __package
292 }
293
294 complete -F _fdroid fdroid
295 complete -F _fd-commit fd-commit
296
297 return 0