chiark / gitweb /
update bash completion commenting to match standards
[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 --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_stats() {
240         opts="-v -q -d"
241         lopts="--verbose --quiet --download"
242         __complete_options
243 }
244
245 __complete_server() {
246         opts="-i -v -q"
247         lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
248  --verbose --quiet --no-checksum update"
249         __complete_options
250 }
251
252 __complete_signindex() {
253         opts="-v -q"
254         lopts="--verbose"
255         __complete_options
256 }
257
258 __complete_init() {
259         opts="-v -q -d"
260         lopts="--verbose --quiet --distinguished-name --keystore
261  --repo-keyalias --android-home --no-prompt"
262         __complete_options
263 }
264
265 __cmds=" build init install update publish checkupdates import readmeta \
266 rewritemeta lint scanner verify stats server signindex "
267
268 for c in $__cmds; do
269         eval "_fdroid_${c} () {
270                 local cur prev opts lopts
271                 __fdroid_init ${c}
272         }"
273 done
274
275 _fdroid() {
276         local cmd
277         cmd=${COMP_WORDS[1]}
278
279         [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
280                 (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) )
281         }
282 }
283
284 _fd-commit() {
285         __package
286 }
287
288 complete -F _fdroid fdroid
289 complete -F _fd-commit fd-commit
290
291 return 0