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