chiark / gitweb /
Rename market to gplay
[fdroidserver.git] / completion / bash-completion
1 #!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's also a completion function made for aliases to 'fdroid build -p':
17 #
18 #   alias fbld='fdroid build -p'
19 #   complete -F _fdroid_build_project fbld
20
21 __package() {
22     [[ -d ./metadata ]] || return 0
23     files=( metadata/*.txt )
24     files=( ${files[@]/metadata\//} )
25     files=${files[@]/.txt/}
26     COMPREPLY=( $( compgen -W "$files" -- $cur ) )
27 }
28
29 __fdroid_init() {
30     COMPREPLY=()
31     cur="${COMP_WORDS[COMP_CWORD]}"
32     prev="${COMP_WORDS[COMP_CWORD-1]}"
33
34     (( $# >= 1 )) && __complete_${1}
35 }
36
37 __vercode() {
38     local s p_found p
39     s=${#COMP_WORDS[*]}
40     p_found=false
41
42     $aliased && p=${COMP_WORDS[1]} || {
43         for (( i=1; i <= s; i++ )); do
44             $p_found && { p=${COMP_WORDS[$i]}; break;}
45             [[ ${COMP_WORDS[$i]} == -p ]] || [[ ${COMP_WORDS[$i]} == --package ]] &&\
46                 p_found=true
47         done
48         $p_found || return 0
49     }
50
51     COMPREPLY=( $( compgen -W "$( while read line; do
52         [[ "$line" == "Build Version:"* ]] && {
53             line="${line#*,}"
54             printf "${line%%,*} "
55         } done < "metadata/${p}.txt" )" -- $cur ) )
56 }
57
58 __complete_options() {
59     case "${cur}" in
60         --*)
61             COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) )
62             return 0;;
63         *)
64             COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
65             return 0;;
66     esac
67 }
68
69 __complete_build() {
70     opts="-h -v -p -c -l -s -t -f"
71     lopts="--help --verbose --package --vercode --latest --server --resetserver
72  --on-server --force --install --all"
73     case "${prev}" in
74         -p|--package)
75             __package
76             return 0;;
77         -c|--vercode)
78             __vercode
79             return 0;;
80     esac
81     __complete_options
82 }
83
84 __complete_update() {
85     opts="-h -c -v -q -b -i -e -w"
86     lopts="--help --createmeta --verbose --quiet --buildreport --interactive
87  --editor --wiki --pretty --clean"
88     case "${prev}" in
89         -e|--editor)
90             _filedir
91             return 0;;
92     esac
93     __complete_options
94 }
95
96 __complete_publish() {
97     opts="-h -v -p"
98     lopts="--help --verbose --package"
99     case "${prev}" in
100         -p|--package)
101             __package
102             return 0;;
103     esac
104     __complete_options
105 }
106
107 __complete_checkupdates() {
108     opts="-h -v -p"
109     lopts="--help --verbose --package --auto --autoonly --commit --gplay"
110     case "${prev}" in
111         -p|--package)
112             __package
113             return 0;;
114     esac
115     __complete_options
116 }
117
118 __complete_import() {
119     opts="-h -u -s -r"
120     lopts="--help --url --subdir --repo"
121     case "${prev}" in
122         -u|--url|-r|--repo) return 0;;
123         -s|--subdir)
124             _filedir
125             return 0;;
126     esac
127     __complete_options
128 }
129
130 __complete_rewritemeta() {
131     opts="-h -v -p"
132     lopts="--help --verbose --package"
133     case "${prev}" in
134         -p|--package)
135             __package
136             return 0;;
137     esac
138     __complete_options
139 }
140
141 __complete_scanner() {
142     opts="-h -v -p"
143     lopts="--help --verbose --package --nosvn"
144     case "${prev}" in
145         -p|--package)
146             __package
147             return 0;;
148     esac
149     __complete_options
150 }
151
152 __complete_stats() {
153     opts="-h -v -d"
154     lopts="--help --verbose --download"
155     __complete_options
156 }
157
158 __complete_server() {
159     opts="-h -v"
160     lopts="--help --verbose update"
161     __complete_options
162 }
163
164 _fdroid() {
165     local cmd cmds aliased
166     cmd=${COMP_WORDS[1]}
167     cmds=" build update publish checkupdates import rewritemeta scanner stats server "
168     aliased=false
169
170     for c in $cmds; do eval "_fdroid_${c} () {
171         local cur prev cmds opts lopts
172         __fdroid_init ${c};
173     }"; done
174
175     [[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
176         (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) )
177     }
178 }
179
180 _fdroid_build_project() {
181     local cur prev cmds opts lopts aliased
182     __fdroid_init
183     aliased=true
184     (( $COMP_CWORD == 1 )) && prev="-p"
185
186     __complete_build
187 }
188
189 complete -F _fdroid fdroid
190
191 return 0