chiark / gitweb /
Adapt publish to new format, improve completion
[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 -p -c -l -s -t -f"
82         lopts="--help --verbose --latest --server --resetserver --on-server
83  --force --all"
84         case "${cur}" in
85                 *:)
86                         __vercode
87                         return 0;;
88                 *)
89                         __package
90                         return 0;;
91         esac
92         __complete_options
93 }
94
95 __complete_install() {
96         opts="-h -v"
97         lopts="--help --verbose --all"
98         case "${cur}" in
99                 -*)
100                         __complete_options
101                         return 0;;
102                 *:)
103                         __apk_vercode repo
104                         return 0;;
105                 *)
106                         __apk_package repo
107                         return 0;;
108         esac
109 }
110
111 __complete_update() {
112         opts="-h -c -v -q -b -i -I -e -w"
113         lopts="--help --createmeta --verbose --quiet --buildreport --interactive
114  --icons --editor --wiki --pretty --clean"
115         case "${prev}" in
116                 -e|--editor)
117                         _filedir
118                         return 0;;
119         esac
120         __complete_options
121 }
122
123 __complete_publish() {
124         opts="-h -v"
125         lopts="--help --verbose"
126         case "${cur}" in
127                 -*)
128                         __complete_options
129                         return 0;;
130                 *:)
131                         __apk_vercode unsigned
132                         return 0;;
133                 *)
134                         __apk_package unsigned
135                         return 0;;
136         esac
137 }
138
139 __complete_checkupdates() {
140         opts="-h -v -p"
141         lopts="--help --verbose --auto --autoonly --commit --gplay"
142         case "${cur}" in
143                 -*)
144                         __complete_options
145                         return 0;;
146                 *)
147                         __package
148                         return 0;;
149         esac
150 }
151
152 __complete_import() {
153         opts="-h -u -s -r"
154         lopts="--help --url --subdir --repo"
155         case "${prev}" in
156                 -u|--url|-r|--repo) return 0;;
157                 -s|--subdir)
158                         _filedir
159                         return 0;;
160         esac
161         __complete_options
162 }
163
164 __complete_rewritemeta() {
165         opts="-h -v -p"
166         lopts="--help --verbose --package"
167         case "${prev}" in
168                 -p|--package)
169                         __package
170                         return 0;;
171         esac
172         __complete_options
173 }
174
175 __complete_scanner() {
176         opts="-h -v -p"
177         lopts="--help --verbose --package --nosvn"
178         case "${prev}" in
179                 -p|--package)
180                         __package
181                         return 0;;
182         esac
183         __complete_options
184 }
185
186 __complete_verify() {
187         opts="-h -v -p"
188         lopts="--help --verbose --package"
189         case "${prev}" in
190                 -p|--package)
191                         __package
192                         return 0;;
193         esac
194         __complete_options
195 }
196
197 __complete_stats() {
198         opts="-h -v -d"
199         lopts="--help --verbose --download"
200         __complete_options
201 }
202
203 __complete_server() {
204         opts="-h -v"
205         lopts="--help --verbose update"
206         __complete_options
207 }
208
209 __complete_init() {
210         opts="-h -v -d"
211         lopts="--help --verbose --keystore --distinguished-name --repo-keyalias"
212         __complete_options
213 }
214
215 _fdroid() {
216         local cmd cmds aliased
217         cmd=${COMP_WORDS[1]}
218         cmds=" build init install update publish checkupdates import
219  rewritemeta scanner verify stats server "
220         aliased=false
221
222         for c in $cmds; do eval "_fdroid_${c} () {
223                 local cur prev cmds opts lopts
224                 __fdroid_init ${c};
225         }"; done
226
227         [[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
228                 (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) )
229         }
230 }
231
232 _fd-commit() {
233         __package
234 }
235
236 complete -F _fdroid fdroid
237 complete -F _fd-commit fd-commit
238
239 return 0