chiark / gitweb /
Adapt verify
[fdroidserver.git] / completion / bash-completion
1 #!/bin/bash
2 #
3 # fdroid completion support.
4 #
5 # 'fdroid' is aliased automatically, but aliases to it are not. For instance,
6 # to alias 'fd' to 'fdroid' and have competion available:
7 #
8 #       alias fd='fdroid'
9 #       complete -F _fdroid fd
10 #
11 # One can use completion on aliased subcommands as follows:
12 #
13 #       alias fbuild='fdroid build'
14 #       complete -F _fdroid_build fbuild
15
16 __fdroid_init() {
17         COMPREPLY=()
18         cur="${COMP_WORDS[COMP_CWORD]}"
19         prev="${COMP_WORDS[COMP_CWORD-1]}"
20
21         (( $# >= 1 )) && __complete_${1}
22 }
23
24 __package() {
25         files=( metadata/*.txt )
26         files=( ${files[@]#metadata/} )
27         files=${files[@]%.txt}
28         COMPREPLY=( $( compgen -W "$files" -- $cur ) )
29 }
30
31 __apk_package() {
32         files=( ${1}/*.apk )
33         [ -f "${files[0]}" ] || return
34
35         files=( ${files[@]#*/} )
36         files=${files[@]%_*}
37         COMPREPLY=( $( compgen -W "$files" -- $cur ) )
38 }
39
40 __apk_vercode() {
41         local p
42         p=${cur:0:-1}
43
44         files=( ${1}/${p}_*.apk )
45         [ -f "${files[0]}" ] || return
46
47         files=( ${files[@]#*_} )
48         files=${files[@]%.apk}
49         COMPREPLY=( $( compgen -P "${p}:" -W "$files" -- $cur ) )
50 }
51
52 __vercode() {
53         local p
54         p=${cur:0:-1}
55
56         COMPREPLY=( $( compgen -P "${p}:" -W "$( while read line; do
57                 if [[ "$line" == "Build Version:"* ]]
58                 then
59                         line="${line#*,}"
60                         printf "${line%%,*} "
61                 elif [[ "$line" == "Build:"* ]]
62                 then
63                         line="${line#*,}"
64                         printf "${line%%,*} "
65                 fi
66                 done < "metadata/${p}.txt" )" -- $cur ) )
67 }
68
69 __complete_options() {
70         case "${cur}" in
71                 --*)
72                         COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) )
73                         return 0;;
74                 *)
75                         COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
76                         return 0;;
77         esac
78 }
79
80 __complete_build() {
81         opts="-h -v -c -l -s -t -f"
82         lopts="--help --verbose --latest --server --resetserver --on-server
83  --force --all"
84         case "${cur}" in
85                 -*)
86                         __complete_options
87                         return 0;;
88                 *:)
89                         __vercode
90                         return 0;;
91                 *)
92                         __package
93                         return 0;;
94         esac
95 }
96
97 __complete_install() {
98         opts="-h -v"
99         lopts="--help --verbose --all"
100         case "${cur}" in
101                 -*)
102                         __complete_options
103                         return 0;;
104                 *:)
105                         __apk_vercode repo
106                         return 0;;
107                 *)
108                         __apk_package repo
109                         return 0;;
110         esac
111 }
112
113 __complete_update() {
114         opts="-h -c -v -q -b -i -I -e -w"
115         lopts="--help --createmeta --verbose --quiet --buildreport --interactive
116  --icons --editor --wiki --pretty --clean"
117         case "${prev}" in
118                 -e|--editor)
119                         _filedir
120                         return 0;;
121         esac
122         __complete_options
123 }
124
125 __complete_publish() {
126         opts="-h -v"
127         lopts="--help --verbose"
128         case "${cur}" in
129                 -*)
130                         __complete_options
131                         return 0;;
132                 *:)
133                         __apk_vercode unsigned
134                         return 0;;
135                 *)
136                         __apk_package unsigned
137                         return 0;;
138         esac
139 }
140
141 __complete_checkupdates() {
142         opts="-h -v"
143         lopts="--help --verbose --auto --autoonly --commit --gplay"
144         case "${cur}" in
145                 -*)
146                         __complete_options
147                         return 0;;
148                 *)
149                         __package
150                         return 0;;
151         esac
152 }
153
154 __complete_import() {
155         opts="-h -u -s -r"
156         lopts="--help --url --subdir --repo"
157         case "${prev}" in
158                 -u|--url|-r|--repo) return 0;;
159                 -s|--subdir)
160                         _filedir
161                         return 0;;
162         esac
163         __complete_options
164 }
165
166 __complete_rewritemeta() {
167         opts="-h -v"
168         lopts="--help --verbose"
169         case "${cur}" in
170                 -*)
171                         __complete_options
172                         return 0;;
173                 *)
174                         __package
175                         return 0;;
176         esac
177 }
178
179 __complete_scanner() {
180         opts="-h -v"
181         lopts="--help --verbose --nosvn"
182         case "${cur}" in
183                 -*)
184                         __complete_options
185                         return 0;;
186                 *:)
187                         __vercode
188                         return 0;;
189                 *)
190                         __package
191                         return 0;;
192         esac
193 }
194
195 __complete_verify() {
196         opts="-h -v -p"
197         lopts="--help --verbose"
198         case "${cur}" in
199                 -*)
200                         __complete_options
201                         return 0;;
202                 *:)
203                         __vercode
204                         return 0;;
205                 *)
206                         __package
207                         return 0;;
208         esac
209 }
210
211 __complete_stats() {
212         opts="-h -v -d"
213         lopts="--help --verbose --download"
214         __complete_options
215 }
216
217 __complete_server() {
218         opts="-h -v"
219         lopts="--help --verbose update"
220         __complete_options
221 }
222
223 __complete_init() {
224         opts="-h -v -d"
225         lopts="--help --verbose --keystore --distinguished-name --repo-keyalias"
226         __complete_options
227 }
228
229 _fdroid() {
230         local cmd cmds aliased
231         cmd=${COMP_WORDS[1]}
232         cmds=" build init install update publish checkupdates import
233  rewritemeta scanner verify stats server "
234         aliased=false
235
236         for c in $cmds; do eval "_fdroid_${c} () {
237                 local cur prev cmds opts lopts
238                 __fdroid_init ${c};
239         }"; done
240
241         [[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
242                 (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) )
243         }
244 }
245
246 _fd-commit() {
247         __package
248 }
249
250 complete -F _fdroid fdroid
251 complete -F _fd-commit fd-commit
252
253 return 0