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