chiark / gitweb /
remove fd-commit, no active devs use it, and requires Auto Name/Name
[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_dscanner() {
109         opts="-v -q -l"
110         lopts="--verbose --quiet --clean-after --clean-before --clean-only --init-only --latest --repo-path"
111         case "${cur}" in
112                 -*)
113                         __complete_options
114                         return 0;;
115                 *:)
116                         __vercode
117                         return 0;;
118                 *)
119                         __package
120                         return 0;;
121         esac
122 }
123
124 __complete_gpgsign() {
125         opts="-v -q"
126         lopts="--verbose --quiet"
127         __complete_options
128 }
129
130 __complete_install() {
131         opts="-v -q"
132         lopts="--verbose --quiet --all"
133         case "${cur}" in
134                 -*)
135                         __complete_options
136                         return 0;;
137                 *:)
138                         __apk_vercode repo
139                         return 0;;
140                 *)
141                         __apk_package repo
142                         return 0;;
143         esac
144 }
145
146 __complete_update() {
147         opts="-c -v -q -b -i -I -e -w"
148         lopts="--create-metadata --verbose --quiet --buildreport
149  --interactive --icons --editor --wiki --pretty --clean --delete-unknown
150  --nosign --rename-apks --use-date-from-apk"
151         case "${prev}" in
152                 -e|--editor)
153                         _filedir
154                         return 0;;
155         esac
156         __complete_options
157 }
158
159 __complete_publish() {
160         opts="-v -q"
161         lopts="--verbose --quiet"
162         case "${cur}" in
163                 -*)
164                         __complete_options
165                         return 0;;
166                 *:)
167                         __apk_vercode unsigned
168                         return 0;;
169                 *)
170                         __apk_package unsigned
171                         return 0;;
172         esac
173 }
174
175 __complete_checkupdates() {
176         opts="-v -q"
177         lopts="--verbose --quiet --auto --autoonly --commit --gplay"
178         case "${cur}" in
179                 -*)
180                         __complete_options
181                         return 0;;
182                 *)
183                         __package
184                         return 0;;
185         esac
186 }
187
188 __complete_import() {
189         opts="-u -s -q"
190         lopts="--url --subdir --rev --quiet"
191         case "${prev}" in
192                 -u|--url|-s|--subdir|--rev) return 0;;
193         esac
194         __complete_options
195 }
196
197 __complete_readmeta() {
198         opts="-v -q"
199         lopts="--verbose --quiet"
200         __complete_options
201 }
202
203 __complete_rewritemeta() {
204         opts="-v -q -l"
205         lopts="--verbose --quiet --list"
206         case "${cur}" in
207                 -*)
208                         __complete_options
209                         return 0;;
210                 *)
211                         __package
212                         return 0;;
213         esac
214 }
215
216 __complete_lint() {
217         opts="-v -q"
218         lopts="--verbose --quiet"
219         case "${cur}" in
220                 -*)
221                         __complete_options
222                         return 0;;
223                 *)
224                         __package
225                         return 0;;
226         esac
227 }
228
229 __complete_scanner() {
230         opts="-v -q"
231         lopts="--verbose --quiet"
232         case "${cur}" in
233                 -*)
234                         __complete_options
235                         return 0;;
236                 *:)
237                         __vercode
238                         return 0;;
239                 *)
240                         __package
241                         return 0;;
242         esac
243 }
244
245 __complete_verify() {
246         opts="-v -q -p"
247         lopts="--verbose --quiet"
248         case "${cur}" in
249                 -*)
250                         __complete_options
251                         return 0;;
252                 *:)
253                         __vercode
254                         return 0;;
255                 *)
256                         __package
257                         return 0;;
258         esac
259 }
260
261 __complete_btlog() {
262         opts="-u"
263         lopts="--git-remote --git-repo --url"
264         __complete_options
265 }
266
267 __complete_mirror() {
268         opts="-v"
269         lopts="--archive --output-dir"
270         __complete_options
271 }
272
273 __complete_nightly() {
274         opts="-v -q"
275         lopts="--show-secret-var"
276         __complete_options
277 }
278
279 __complete_stats() {
280         opts="-v -q -d"
281         lopts="--verbose --quiet --download"
282         __complete_options
283 }
284
285 __complete_server() {
286         opts="-i -v -q"
287         lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
288  --verbose --quiet --no-checksum update"
289         __complete_options
290 }
291
292 __complete_signatures() {
293         opts="-v -q"
294         lopts="--verbose --no-check-https"
295         case "${cur}" in
296                 -*)
297                         __complete_options
298                         return 0;;
299         esac
300 }
301
302 __complete_signindex() {
303         opts="-v -q"
304         lopts="--verbose"
305         __complete_options
306 }
307
308 __complete_init() {
309         opts="-v -q -d"
310         lopts="--verbose --quiet --distinguished-name --keystore
311  --repo-keyalias --android-home --no-prompt"
312         __complete_options
313 }
314
315 __cmds=" \
316 btlog \
317 build \
318 checkupdates \
319 dscanner \
320 gpgsign \
321 import \
322 init \
323 install \
324 lint \
325 mirror \
326 nightly \
327 publish \
328 readmeta \
329 rewritemeta \
330 scanner \
331 server \
332 signatures \
333 signindex \
334 stats \
335 update \
336 verify \
337 "
338
339 for c in $__cmds; do
340         eval "_fdroid_${c} () {
341                 local cur prev opts lopts
342                 __fdroid_init ${c}
343         }"
344 done
345
346 _fdroid() {
347         local cmd
348         cmd=${COMP_WORDS[1]}
349
350         [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
351                 (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) )
352         }
353 }
354
355 complete -F _fdroid fdroid
356
357 return 0