aboutsummaryrefslogtreecommitdiff
blob: 17f12d5e239c3bd0401624f02c182d4a54b4d471 (plain)
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#compdef gensync equery qpkg euse eclean

# Author: oberyno <oberyno@gmail.com>
# Author: baptux <baptiste.daroussin@gmail.com>

#Function to show gensync overlays located in /etc/gensync
_overlays(){
    local overlay gensynclist gensync_individual
    gensynclist=(/etc/gensync/*.syncsource) 
    foreach gensync_individual ($gensynclist)
    	overlay=($overlay ${${${(M)${(f)"$(<$gensync_individual)"}##id=*}/id=\"/}%\"})
    end
    _tags overlay && { compadd "$@" ${(kv)=overlay} }
}

_packages(){
    if compset -P '(\\|)(>=|<=|<|>|=)'  ; then
	_gentoo_packages ${*/(#m)(installed|available)/${MATCH}_versions}
    else
	_gentoo_packages $*
    fi
 }

case $service in

  gensync) 
      _arguments \
 	'(- :)'{--list-sources,-l}'[list known rsync sources]' \
	'()'{--no-color,-C}'[turn off colours]:overlays:_overlays' \
	'(- :)'{--help,-h}'[show help]' \
	'(- :)'{--version,-V}'[display version info]' \
	'(- :):overlays:_overlays' 
;;

 qpkg)
  excl=( --help -h --query-deps -q )
  check=( --check-md5 -cm --check-time -ct --check -c )
  arg=( --info -i --list -l --non-masked -n --masked -m --installed -I --uninstalled -U --group -g )
  find=( --find-file -f --find-pattern -fp )
  dups=( --dups -d --slot -s)
  
       _arguments -s \
    	"($check $excl $find $dups 1)"{--find-file,-f}"[finds package that owns file]:file:_files" \
	"($check $excl $find $dups 1)"{--find-pattern,-fp}"[finds package that owns file matching pattern]:pattern:" \
	"($excl $check $arg $find --dups -d )"{--dups,-d}"[print packages that have multiple versions installed]" \
	"($excl $check $arg $find --slot -s 1)"{--slot,-s}"[only print duplicates of the same slot]" \
	"($check $excl --installed -I --uninstalled -U $dups -d)"{--uninstalled,-U}"[include only uninstalled packages]" \
	"($excl --uninstalled -U --installed -I $dups -d)"{--installed,-I}"[include only installed packages]" \
	"($excl --group -g $dups -d)"{--group,-g}"[find by group]:group:_gentoo_packages category" \
	"($check $excl --list -l $dups -d)"{--list,-l}"[list package contents]" \
	"($excl --info -i $dups -d 1)"{--info,-i}"[get package description and home page]:package:_gentoo_packages available" \
	"($excl $check $find $dups --uninstalled -U)"{--check-time,-ct}"[verify package file timestamps]" \
	"($excl $check $find $dups --uninstalled -U)"{--check-md5,-cm}"[verify package files md5]" \
	"($excl $check $find $dups --uninstalled -U)"{--check,-c}"[verify mtimes and md5]" \
	"($excl $find --query-deps -q $dups -d 1)"{--query-deps,-q}"[display all installed packages depending on selected packages]:package:_gentoo_packages available" \
	"()"{--no-color,-nc}"[dont use colors]" \
	"*--verbose[be more verbose (2 levels)]" \
	"*-v[be more verbose (2 levels)]" \
	"($excl --non-masked -n --masked -m $dups)"{--masked,-m}"[include only masked packages]" \
	"($excl --non-masked -n --masked -m $dups)"{--non-masked,-n}"[include only non-masked packages]" \
	"(- :)"{--help,-h}"[show help]" \
	"(--info -i --query-deps -q --slot -s)1:package:_gentoo_packages installed_versions"
;;

euse)
  local state tmp start_args suboptions_args
  start_args=(
    {'(--help)-h','(-h)--help'}'[show help]'
    {'(--version)-v','(-v)--version'}'[show version]'
    {'(--info)-i','(-i)--info'}'[show descriptions for the given useflags]'
    {'(--active)-a','(-a)--active'}'[show currently active useflags and their origin]'
    {'(--enable)-E','(-E)--enable'}'[enable the given useflags]'
    {'(--disable)-D','(-D)--disable'}'[disable the given useflags]'
    {'(--prune)-P','(-P)--prune'}'[show version]'
  )
  suboptions_args=(
    {'(--global)-g','(-g)--global'}'[show only global use flags]'
    {'(--local)-l','(-l)--local'}'[show only local use flags]'
  )
  if (( CURRENT == 2 ));then
    _arguments -s $start_args 
  elif (( CURRENT == 3 ));then
    case "$words[2]" in
      -i|--info|-a|--active)
	_arguments -s $suboptions_args \
	  '*:useflags:_gentoo_packages useflag' && ret=0
      ;;
      -E|--enable)
	_arguments \
	  '*:useflags:_gentoo_packages useflag' && ret=0
      ;;
      -D|--disable)
	_arguments \
	  '*:active useflags:_gentoo_packages active_useflag' && ret=0
    esac
  else
    _arguments \
      '*:useflag:_gentoo_packages useflag' && ret=0
  fi
;;

equery)
  # Based off of X/_xauth.
  local state context line expl ret=1
  local tmp cmd start_args common_args

  start_args=(
    {'(--nocolor)-C','(-C)--nocolor'}'[turns off colors]'
    {'(--quiet)-q','(-q)--quiet'}'[minimal output]'
    {'(--help)-h','(-h)--help'}'[show help]'
    {'(--version)-V','(-V)--version'}'[show version]'
  )

  common_args=(
    '(-i --installed -I --exclude-installed)'{-i,--installed}'[search installed packages]'
    '(-I --exclude-installed -i --installed)'{-I,--exclude-installed}'[do not search installed packages]'
    '(-p --portage)'{-p,--portage-tree}'[also search in portage tree]'
    '(-o --overlay-tree)'{-o,--overlay-tree}'[also search in overlay tree]'
  )


  _arguments -s $start_args \
    '*::command:->command' && ret=0

  while [[ -n "$state" ]]; do
    tmp="$state"
    state=
    case "$tmp" in
    command)
	if (( CURRENT == 1 )); then
	    state=subcommands
	else
	    cmd="$words[1]"
	    curcontext="${curcontext%:*:*}:equery-${cmd}:"
	    case "$cmd" in
	    belongs|b)
		_arguments \
		  '(-c --category)'{-c,--category}'[only search in specified category]:category:_gentoo_packages category' \
		  '(-e --earlyout)'{-e,--earlyout}'[stop when first match found]' \
		  '(-f --full-regex)'{-f,--full-regex}'[supplied query is a full regex]:pattern:' \
		  '*:file:_files' && ret=0
		;;
	    check|k)
		_arguments \
		  ':portage:_packages installed' && ret=0
		;;
	    depends|d)
		_arguments \
		  '(-a --all-packages)'{-a,--all-packages}'[search in all available packages (slow)]:all packages:->packages' \
		  '(-d --direct -D --indirect)'{-d,--direct}'[search direct dependencies only (default)]' \
		  '(-d --direct -D --indirect)'{-D,--indirect}'[search indirect dependencies (VERY slow)]' \
		  '*:package:_packages installed' && ret=0
		;;
	    depgraph|g)
		_arguments \
		  '(-U --no-useflags)'{-U,--no-useflags}'[do not show USE flags]' \
		  '(-l --linear)'{-l,--linear}'[do not use fancy formatting]' \
		  ':package:_packages installed' && ret=0
		;;
	    files|f)
		_arguments \
		 '--timestamp[append timestamp]' \
		 '--md5sum[append md5sum]' \
		 '--type[prepend file type]' \
		 '--filter=[filter output]:filter(s):_values -s , '' dir obj sym dev fifo path conf cmd doc man info' \
		 ':installed pkgname:_packages installed' && ret=0
		;;
	    hasuse|h)
		_arguments \
		  $common_args \
		  ':useflag:_gentoo_packages useflag' && ret=0
		;;
	    list|l)
		_arguments \
		  $common_args \
		  ': :_guard "^--*" pattern' && ret=0
    		;;
    	    size|s)
		_arguments \
		  '(-b --bytes)'{-b,--bytes}'[report size in bytes]' \
		  ':package:_packages installed' && ret=0
		;;
	    which|w)
		_arguments \
		  ':portage:_packages available' && ret=0
		;;
	    uses|u)
		 _arguments \
		  {--all,-a}'[include non-installed packages]' \
		  ":portage:_packages installed" && ret=0
		;;
    	    *)
		_message 'command not found'
		;;
    	    esac
	fi
	;;
    subcommands)
	tmp=(
	    {belongs,b}'[list all packages owning file(s)]'
	    {check,k}'[check MD5sums and timestamps of package]'
	    {depends,d}'[list all packages depending on specified package]'
	    {depgraph,g}'[display a dependency tree for package]'
	    {files,f}'[list files owned by package]'
	    {hasuse,h}'[list all packages with specified useflag]'
	    {list,l}'[list all packages matching pattern]'
	    {size,s}'[print size of files contained in package]'
	    {uses,u}'[display USE flags for package]'
	    {which,w}'[print full path to ebuild for package]'
	)
	    _values 'equery command' $tmp && ret=0
    ;;
    esac
  done
;;
eclean)
	local state context line expl ret=1
	local tmp cmd global_option common_args

	global_option=(
			{'(--nocolor)-C','(-C)--nocolor'}'[turns off colors]'
			{'(--destructive)-d','(-d)--destructive'}'[only keep the minimum for a reinstallation]'
			{'(--exclude-file)-e','(-e)--exclude-file'}'[path to the exclusion file]'
			{'(--interactive)-i','(-i)--interactive'}'[ask confirmation before deletions]'
			{'(--package-names)-n','(-n)--package-names'}'[protect all versions (when --destructive)]'
			{'(--pretend)-p','(-p)--pretend'}'[only display what would be cleaned]'
			{'(--quiet)-q','(-q)--quiet'}'[minimal output]'
			{'(--help)-h','(-h)--help'}'[show help]'
			{'(--version)-V','(-V)--version'}'[show version]'
			)

	common_args=(
				'(-i --installed -I --exclude-installed)'{-i,--installed}'[search installed packages]'
				'(-I --exclude-installed -i --installed)'{-I,--exclude-installed}'[do not search installed packages]'
				'(-p --portage)'{-p,--portage-tree}'[also search in portage tree]'
				'(-o --overlay-tree)'{-o,--overlay-tree}'[also search in overlay tree]'
				)
	_arguments -s $global_option \
	    '*::command:->command' && ret=0
			while [[ -n "$state" ]]; do
				tmp="$state"
					state=
					case "$tmp" in
					command)
					if (( CURRENT == 1 )); then
					  state=subcommands
					else
            cmd=$words[1]
						case "$cmd" in
						  packages)
						  ;;
						  distfiles)
						  _arguments -s \
							  '(-f --fetch-restricted)'{-f,--fetch-restricted}'[protect fetch-restricted files (when --destructive)]' \
							  '(-s --size-limit)'{-s,--size-limit}'[do not delete disfiles bigger than <size>]:size:' 
						  ;;
						esac
						fi
					;;
					subcommands)
					tmp=(
					{packages,}'[clean outdated binary packages]'
					{distfiles,}'[clean outdated packages sources files]'
					)
					_values 'eclean command' $tmp && ret=0
					;;
	    esac
		done
;;
esac