- bump version to 0.130.1
[opensuse:osc.git] / dist / osc.complete
1 #!/bin/bash
2 #
3 #  Helper script for completion, usage with tcsh:
4 #
5 #     complete osc 'p@*@`osc.complete`@'
6 #
7 #  usage with bash
8 #
9 #     complete -C osc.complete osc
10 #
11 #  Author: Werner Fink <werner@suse.de>
12 #
13
14 set -o noclobber
15 shopt -s extglob
16 typeset -i last
17 typeset -i count
18
19 test "/proc/$PPID/exe" -ef /bin/tcsh || COMMAND_LINE="$COMP_LINE"
20 cmdline=($COMMAND_LINE)
21 test "${cmdline[0]}" != "osc" && exit 1
22
23 let last=${#COMMAND_LINE}
24 let last--
25 let count=${#cmdline[@]}
26 let count--
27 test "${COMMAND_LINE:$last}" = " " && let count++
28 unset last
29
30 osccmds=(abortbuild add addremove ar aggregatepac api branch bugowner build buildconfig \
31     buildhistory buildhist buildinfo buildlog bl cat changedevelrequest changedevelreq \
32     cr checkout co commit checkin ci chroot config copypac createrequest creq delete del 
33     remove rm deleterequest deletereq dr dependson whatdependson diff di distributions dists \
34     getbinaries help importsrcpkg info init jobhistory jobhist linkpac linktobranch list ls \
35     log localbuildlog lbl maintainer man mbranch meta mkpac mv my patchinfo platforms \
36     prjresults pr pull rdelete rdiff rebuild rebuildpac remotebuildlog rbl rbuildlog \
37     repairlink repos repositories platforms repourls request rq review rremove resolved \
38     results r search bse se sm setlinkrev signkey status st submitrequest sr submitpac \
39     submitreq triggerreason tr undelete update up updatepacmetafromspec metafromspec vc \
40     wipebinaries)
41 oscreq=(list log show accept decline delete revoke wipe)
42 oscmy=(pkg prj rq sr)
43
44 oscprj=""
45 oscpkg=""
46 lnkprj=""
47 lnkpkg=""
48 test -s ${PWD}/.osc/_project && read -t 1 oscprj < ${PWD}/.osc/_project
49 test -s ${PWD}/.osc/_package && read -t 1 oscpkg < ${PWD}/.osc/_package
50 if test -s ${PWD}/.osc/_files ; then
51     lnkprj=$(command sed -rn '/<linkinfo/{s@.*[[:blank:]]project="([^"]+)".*@\1@p;}' < ${PWD}/.osc/_files)
52     lnkpkg=$(command sed -rn '/<linkinfo/{s@.*[[:blank:]]package="([^"]+)".*@\1@p;}' < ${PWD}/.osc/_files)
53 fi
54
55 if test -s ~/.osc.projects ; then
56     typeset -i ctime=$(command date -d "$(command stat -c '%z' ~/.osc.projects)" +'%s')
57     typeset -i   now=$(command date -d now +'%s')
58     ((now - ctime > 86400)) && command osc ls >| ~/.osc.projects
59 else
60     command osc ls >| ~/.osc.projects
61 fi
62
63 submit ()
64 {
65     local -i pos=$1
66     local -i off=$2
67     local target
68
69     if ((pos == 1)) ; then
70         if test -z "${cmdline[$((2+off))]}" -a -n "${oscprj}" ; then
71             builtin compgen -W "${oscprj}"
72         else
73             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[$((2+off))]}"
74         fi
75     fi
76     if ((pos == 2)) ; then
77         if test -z "${cmdline[$((3+off))]}" -a -n "${oscpkg}" ; then
78             builtin compgen -W "${oscpkg}"
79         else
80             builtin compgen -W "$(command osc ls "${cmdline[$((2+off))]}")" -- "${cmdline[$((3+off))]}"
81         fi
82     fi
83     if ((pos == 3)) ; then
84         if test -z "${cmdline[$((4+off))]}" -a -n "${lnkprj}" ; then
85             builtin compgen -W "${lnkprj}"
86         else
87             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[$((4+off))]}"
88         fi
89     fi
90     if ((pos == 4)) ; then
91         target="${lnkpkg}"
92         target="${target:+$target }$oscpkg"
93         if test -n "${target}" ; then
94             builtin compgen -W "${target}" -- "${cmdline[$((5+off))]}"
95         else
96             builtin compgen -W "$(command osc ls "${cmdline[$((4+off))]}")" -- "${cmdline[$((5+off))]}"
97         fi
98     fi
99 }
100
101 case "${cmdline[1]}" in
102 add|addremove|ar)
103     if ((count == 1)) ; then
104         builtin compgen -W 'add addremove ar' -- "${cmdline[1]}"
105     else
106         for x in $(builtin compgen -f -X '.osc' -- "${cmdline[2]}"); do
107             test -d $x && builtin echo $x/ || builtin echo $x
108         done
109     fi
110     ;;
111 branch)
112     if ((count == 1)) ; then
113         builtin compgen -W 'branch' -- "${cmdline[1]}"
114     fi
115     case "${cmdline[2]}" in
116     --nodevelproject)
117         if ((count == 3)) ; then
118             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[3]}"
119         fi
120         if ((count == 4)) ; then
121             builtin compgen -W "$(command osc ls "${cmdline[3]}")" -- "${cmdline[4]}"
122         fi
123         ;;
124     -*) builtin compgen -W '--nodevelproject' -- "${cmdline[3]}" ;;
125     *)
126         if ((count == 2)) ; then
127             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
128         fi
129         if ((count == 3)) ; then
130             builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
131         fi
132     esac
133     ;;
134 list|ls)
135     if ((count == 1)) ; then
136         builtin compgen -W 'list ls' -- "${cmdline[1]}"
137     fi
138     if ((count == 2)) ; then
139         builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
140     fi
141     if ((count == 3)) ; then
142         builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
143     fi
144     ;;
145 sr|submitreq|submitrequest)
146     if ((count == 1)) ; then
147         builtin compgen -W 'sr submitreq submitrequest' -- "${cmdline[1]}"
148     fi
149     case "${cmdline[2]}" in
150     --nodevelproject)
151             submit $((count - 2)) 1 ;;
152     -*) builtin compgen -W '--nodevelproject' -- "${cmdline[2]}" ;;
153     *)  submit $((count - 1)) 0 ;;
154     esac
155     ;;
156 rq|request)
157     if ((count == 1)) ; then
158         builtin compgen -W 'rq request' -- "${cmdline[1]}"
159     fi
160     case "${cmdline[2]}" in
161     accept|decline|wipe|revoke|log)
162         if ((count == 3)) ; then
163             builtin echo -n 'ID'
164         fi
165         ;;
166     show)
167         if ((count == 3)) ; then
168             builtin compgen -W '--diff' -- "${cmdline[3]}"
169         else
170             builtin echo -n 'ID'
171         fi
172         ;;
173     list)
174         if ((count == 3)) ; then
175             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[3]}"
176         fi
177         if ((count == 4)) ; then
178             builtin compgen -W "$(command osc ls "${cmdline[3]}")" -- "${cmdline[4]}"
179         fi
180         ;;
181     *)
182         ((count == 2)) && builtin compgen -W "$(builtin echo ${oscreq[@]})" -- "${cmdline[2]}"
183     esac
184     ;;
185 my)
186     if ((count == 1)) ; then
187         builtin compgen -W 'my' -- "${cmdline[1]}"
188     fi
189     if ((count == 2)) ; then
190         builtin compgen -W "$(builtin echo ${oscmy[@]})" -- "${cmdline[2]}"
191     fi
192     ;;
193 copypac|linkpac)
194     if ((count == 1)) ; then
195         builtin compgen -W 'copypac linkpac' -- "${cmdline[1]}"
196     fi
197     case "${cmdline[2]}" in
198     *)
199         if ((count == 2)) ; then
200             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
201         fi
202         if ((count == 3)) ; then
203             builtin compgen -W "$(osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
204         fi
205         if ((count == 4)) ; then
206             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[4]}"
207         fi
208         if ((count == 5)) ; then
209             builtin compgen -W "$(command osc ls "${cmdline[4]}")" -- "${cmdline[5]}"
210         fi
211     esac
212     ;;
213 deleterequest|deletereq|dr)
214     if ((count == 1)) ; then
215         builtin compgen -W 'deleterequest deletereq dr' -- "${cmdline[1]}"
216     fi
217     case "${cmdline[2]}" in
218     *)
219         if ((count == 2)) ; then
220             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
221         fi
222         if ((count == 3)) ; then
223             builtin compgen -W "$(osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
224         fi
225     esac
226     ;;
227 changedevelrequest|changedevelreq|cr)
228     if ((count == 1)) ; then
229         builtin compgen -W 'changedevelrequest changedevelreq cr' -- "${cmdline[1]}"
230     fi
231     case "${cmdline[2]}" in
232     *)
233         if ((count == 2)) ; then
234             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
235         fi
236         if ((count == 3)) ; then
237             builtin compgen -W "$(osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
238         fi
239         if ((count == 4)) ; then
240             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[4]}"
241         fi
242         if ((count == 5)) ; then
243             builtin compgen -W "$(command osc ls "${cmdline[4]}")" -- "${cmdline[5]}"
244         fi
245     esac
246     ;;
247 rdiff)
248     if ((count == 1)) ; then
249         builtin compgen -W 'rdiff' -- "${cmdline[1]}"
250     fi
251     case "${cmdline[2]}" in
252     *)
253         if ((count == 2)) ; then
254             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
255         fi
256         if ((count == 3)) ; then
257             builtin compgen -W "$(osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
258         fi
259         if ((count == 4)) ; then
260             builtin compgen -W "$(command cat ~/.osc.projects)" -P --oldprj= -- "${cmdline[4]#*=}"
261         fi
262         if ((count == 5)) ; then
263             builtin compgen -W "$(command osc ls "${cmdline[4]#*=}")" -P --oldpkg= -- "${cmdline[5]#*=}"
264         fi
265     esac
266     ;;
267 ci|commit|checkin)
268     if ((count == 1)) ; then
269         builtin compgen -W 'ci commit checkin' -- "${cmdline[1]}"
270     else
271         for x in $(builtin compgen -f -X '.osc' -- "${cmdline[2]}"); do
272             test -d $x && builtin echo $x/ || builtin echo $x
273         done
274     fi
275     ;;
276 co|checkout)
277     if ((count == 1)) ; then
278         builtin compgen -W 'co copypac checkout' -- "${cmdline[1]}"
279     else
280         if ((count == 2)) ; then
281             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
282         fi
283         if ((count == 3)) ; then
284             builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
285         fi
286     fi
287     ;;
288 maintainer)
289     if ((count == 1)) ; then
290         builtin compgen -W 'maintainer' -- "${cmdline[1]}"
291     else
292         if ((count == 2)) ; then
293             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
294         fi
295         if ((count == 3)) ; then
296             builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
297         fi
298     fi
299     ;;
300 up|update)
301     if ((count == 1)) ; then
302         builtin compgen -W 'up update' -- "${cmdline[1]}"
303     fi
304     if ((count == 2)) ; then
305         builtin  compgen -W '--expand-link --unexpand-link' -- "${cmdline[2]}"
306     fi
307     ;;
308 meta)
309     if ((count == 1)) ; then
310         builtin compgen -W 'meta metafromspec' -- "${cmdline[1]}"
311     fi
312     if ((count == 2)) ; then
313         builtin compgen -W 'prj pkg' -- "${cmdline[2]}"
314     fi
315     if ((count == 3)) ; then
316         builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[3]}"
317     fi
318     if ((count == 4)) && test "${cmdline[2]}" = pkg ; then
319         builtin compgen -W "$(command osc ls "${cmdline[3]}")" -- "${cmdline[4]}"
320     fi
321     if ((count == 5)) ; then
322         builtin compgen -W '--edit -e' -- "${cmdline[5]}"
323     fi
324     ;;
325 wipebinaries)
326     if ((count == 1)) ; then
327         builtin compgen -W 'wipebinaries' -- "${cmdline[1]}"
328     fi
329     if ((count == 2)) ; then
330         builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
331     fi
332     if ((count == 3)) ; then
333         builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
334     fi
335     if ((count == 4)) ; then
336         builtin compgen -W "--expansion --broken --build-failed --build-disabled" -- "${cmdline[4]}"
337     fi
338     ;;
339 help)
340     if ((count == 1)) ; then
341         builtin compgen -W 'help' -- "${cmdline[1]}"
342     fi
343     ((count == 2)) && builtin compgen -W "$(builtin echo ${osccmds[@]})" -- "${cmdline[2]}"
344     ;;
345 search)
346     if ((count == 1)) ; then
347         builtin compgen -W 'search' -- "${cmdline[1]}"
348     else
349         oscsearch="--help --csv -i --involved -v --verbose --description --title \
350                    --project --package -e --exact --repos-baseurl"
351         builtin compgen -W "${oscsearch}" -- "${cmdline[$count]}"
352     fi
353     ;;
354 pr|prjresults)
355     if ((count == 1)) ; then
356         builtin compgen -W 'pr prjresults' -- "${cmdline[1]}"
357     fi
358     if ((count == 2)) ; then
359         builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
360     fi
361     if ((count > 2)) ; then
362         case "${cmdline[$((count-1))]}" in
363         -n|--name-filter*)
364             builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[$count]}"
365             ;;
366         -s|--status-filter*)
367             OIFS="$IFS"; IFS=:
368             builtin compgen -W 'disabled:failed:finished:building:succeeded:broken:scheduled:unresolvable:signing:blocked' -- "${cmdline[$count]}"
369             IFS="$OIFS"
370             ;;
371         -p|--project*)
372             builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[$count]}"
373             ;;
374         *)
375             builtin compgen -W "-n --name-filter -s --status-filter -c --csv -q --hide-legend" -- "${cmdline[$count]}"
376             ;;
377         esac
378     fi
379     ;;
380 r|results)
381     if ((count == 1)) ; then
382         builtin compgen -W 'r results' -- "${cmdline[1]}"
383     fi
384     if ((count == 2)) ; then
385         builtin compgen -W "$(command cat ~/.osc.projects)" -- "${cmdline[2]}"
386     fi
387     if ((count == 3)) ; then
388         builtin compgen -W "$(command osc ls "${cmdline[2]}")" -- "${cmdline[3]}"
389     fi
390     if ((count > 3)) ; then
391          builtin compgen -W "-r --repo -a --arch -l --last-build --xml" -- "${cmdline[$count]}"
392     fi
393     ;;
394 *)
395     ((count == 1)) && builtin compgen -W "$(builtin echo ${osccmds[@]})" -- "${cmdline[1]}"
396 esac