blob: 2808f92ee3db5161d16f262008a3b80ed482b2fd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
#compdef osc
#
# Copyright (C) 2009,2010 Holger Macht <holger@homac.de>
#
# This file is released under the GPLv2.
#
# Based on the the zsh guide from http://zsh.dotsrc.org/Guide/zshguide06.html
#
# Toggle verbose completions: zstyle ':completion:*:osc:*' verbose no
# zstyle ':completion:*:osc-subcommand:*' verbose no
#
# Use the variables $ZSH_OSC_BUILD_TARGETS_EXTRA and $ZSH_OSC_PROJECTS_EXTRA to
# extend the list of possible completions in your ~/.zshrc like that:
# export OSC_PROJECTS_EXTRA="Base:System Base:shells"
#
# version 0.2
#
OSC_BUILD_TARGETS="openSUSE_10.2 openSUSE_10.3 openSUSE_11.0 openSUSE_11.1 openSUSE_11.2 openSUSE_11.3 openSUSE_Factory"
OSC_PROJECTS="openSUSE:Factory openSUSE:11.2 openSUSE:11.3 openSUSE:11.1 openSUSE:11.0 openSUSE:10.3"
# user defined variables $OSC_BUILD_TARGETS_EXTRA and
# $OSC_PROJECTS_EXTRA can add to the project/build target list
OSC_BUILD_TARGETS="$OSC_BUILD_TARGETS $ZSH_OSC_BUILD_TARGETS_EXTRA"
OSC_PROJECTS="$OSC_PROJECTS $ZSH_OSC_PROJECTS_EXTRA"
# Main dispatcher
_osc() {
if (( CURRENT > 2 )) && [[ ${words[2]} != "help" ]]; then
# Remember the subcommand name
local cmd=${words[2]}
# Set the context for the subcommand.
curcontext="${curcontext%:*:*}:osc-subcommand"
# Narrow the range of words we are looking at to exclude `osc'
(( CURRENT-- ))
shift words
# Run the completion for the subcommand
if [ "$cmd" = "submitreq" -o "$cmd" = "sr" ]; then
_osc_cmd_submitreq
elif [ "$cmd" = "getbinaries" ]; then
_osc_cmd_getbinaries
elif [ "$cmd" = "checkout" -o "$cmd" = "co" -o "$cmd" = "branch" ]; then
_osc_cmd_checkout
elif [ "$cmd" = "buildlog" -o "$cmd" = "buildinfo" -o "$cmd" = "bl" ]; then
_osc_cmd_buildlog
else
_osc_cmd_do $cmd
fi
else
local hline
local -a cmdlist
local tag=0
_call_program help-commands osc help | while read -A hline; do
# start parsing with "commands:"
[[ $hline[1] = "commands:" ]] && tag=1
# stop parsing at the line starting with "For"
[[ $hline[1] = "For" ]] && tag=0
[[ $tag = 0 ]] && continue
# all commands have to start with lower case letters
[[ $hline[1] =~ ^[A-Z] ]] && continue
(( ${#hline} < 2 )) && continue
# ${hline[1]%,} truncates the last ','
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
_describe -t osc-commands 'osc command' cmdlist
fi
}
_osc_cmd_getbinaries() {
_arguments \
'1:PROJECT:( `echo $OSC_PROJECTS` )' \
'2:PACKAGE:(PACKAGE)' \
'3:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
'4:ARCHITECTURE:(i586 x86_64)'
}
_osc_cmd_checkout() {
_arguments \
'1:PROJECT:( `echo $OSC_PROJECTS` )' \
'2:PACKAGE:(PACKAGE)'
}
_osc_cmd_buildlog() {
_arguments \
'1:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
'2:ARCHITECTURE:(i586 x86_64)'
}
_osc_cmd_submitreq() {
local hline
local -a cmdlist
local tag=0
_call_program help-commands osc help $cmd | while read -A hline; do
# start parsing from "usage:"
[[ $hline[1] = "usage:" ]] && tag=1
[[ $tag = 0 ]] && continue
if [[ $hline[1] =~ ^osc ]]; then
shift hline; shift hline
elif ! [[ $hline[1] =~ ^- ]]; then
# Option has to start with a '-' or 'osc submitrequest'
continue
fi
(( ${#hline} < 2 )) && continue
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
_describe -t osc-commands 'osc command' cmdlist
}
_osc_cmd_do() {
local hline
local -a cmdlist
local tag=0
# only start completion if theres some '-' on the line
if ! [ "$words[2]" = "-" ]; then
_complete
return
fi
_call_program help-commands osc help $cmd | while read -A hline; do
# start parsing from "Options:"
[[ $hline[1] = "Options:" ]] && tag=1
[[ $tag = 0 ]] && continue
# Option has to start with a '-'
[[ $hline[1] =~ ^- ]] || continue
(( ${#hline} < 2 )) && continue
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
if [ -n "$cmdlist" ]; then
_describe -t osc-commands 'osc command' cmdlist
else
_complete
fi
}
# Code to make sure _osc is run when we load it
_osc "$@"
|