1#compdef dpkg dpkg-deb dpkg-query dpkg-reconfigure
2
3local _dpkg_deb_actions _dpkg_common_actions _dpkg_actions _dpkg_options
4local _dpkg_options_recursive #_dpkg_actions_install _dpkg_actions_record_avail
5local _dpkg_deb_only_actions
6local _dpkg_deb_and_query_only_actions _dpkg_deb_and_query_only_options
7local _dpkg_query_actions
8local curcontext="$curcontext" context state line expl ret
9typeset -A opt_args
10
11_dpkg_deb_only_actions=(
12    '-D[debugging output]'
13    '(--new)--old[old archive format]'
14    '(--old)--new[new archive format]'
15    '--nocheck[suppress control file check]'
16    '-z+[compression level]:compression number:(1 2 3 4 5 6 7 8 9)'
17)
18
19_dpkg_deb_actions=(
20  '(--build -b)'{--build,-b}'[build archive]:directory:_files -/'
21  '(--contents -c)'{--contents,-c}'[list contents]: :_deb_files'
22  '(--info -I)'{--info,-I}'[show info]: :_deb_files'
23  '(--field -f)'{--field,-f}'[show fields]: :_deb_files'
24  '(--control -e)'{--control,-e}'[extract control]: :_deb_files'
25  '(--extract -x)'{--extract,-x}'[extract files]: :_deb_files'
26  '(--vextract -X)'{--vextract,-X}'[extract and list files]: :_deb_files'
27  '--fsys-tarfile[output fs tarfile]: :_deb_files'
28)
29
30_dpkg_common_actions=(
31  '--help[show help]'
32  '--version[show version]'
33  '(--license --licence)'{--license,--licence}'[show licensing]'
34)
35
36_dpkg_actions=(
37  '(--install -i)'{--install,-i}'[install packages]:*:Debian packages:->install'
38  '--unpack[unpack package]: :_deb_files'
39  '--configure[reconfigure specified packages]:*:package:->configure'
40  '(--remove -r)'{--remove,-r}'[remove package]:*:package:->remove'
41  '(--purge -P)'{--purge,-P}'[purge package]:*:package:->purge'
42  '--update-avail[update available]:package file:_files'
43  '--merge-avail[merge available]:package file:_files'
44  '(--record-avail -A)'{--record-avail,-A}'[record available]:*:package files:->record_avail'
45  '--forget-old-unavail[forget uninstalled unavailable]'
46  '--clear-avail[clear available]'
47  '(--audit -C)'{--audit,-C}'[check for broken pkgs]'
48  '--get-selections[get selections]:pattern:'
49  '--set-selections[set selections]'
50  '--yet-to-unpack[list uninstalled]'
51  '--print-architecture[print target architecture]'
52  '--print-installation-architecture'
53  '--print-foreign-architectures[print list of extra architectures]'
54  '--add-architecture[add extra architecture]:architecture:->add_architecture'
55  '--remove-architecture[remove extra architecture]:architecture:->remove_architecture'
56  '--compare-versions[compare version numbers]:*::expression:= ->compare_versions'
57)
58
59_dpkg_options=(
60  '--abort-after[abort after errors]:number of errors:'
61  '--root=[alternative root]:root:_files -/'
62  '--instdir=[change inst root but not data dir]:_files -/'
63  '(--selected-only -O)'{--selected-only,-O}'[skip unselected packages]'
64  '(--skip-same-version -E)'{--skip-same-version,-E}'[skip packages with same version as installed]'
65  '(--refuse-downgrade -G)'{--refuse-downgrade,-G}'[skip packages with earlier version than installed]'
66  '(--auto-deconfigure -B)'{--auto-deconfigure,-B}'[install can break other packages]'
67  '--largemem[optimize for >4Mb RAM]'
68  '--smallmem[optimize for <4Mb RAM]'
69  '--no-act[show potential actions but do not follow through]'
70  '-D+[debug options]:debug options:(h 1 2 3)'
71  '--debug=[debug options]:debug options:(help 1 2 3)'
72  '--ignore-depends=[ignore depends involving package]:package:_deb_packages avail'
73  --{force,refuse,no-force}'--[forcing options]:what:(all downgrade configure-any hold bad-path not-root overwrite overwrite-diverted bad-verify depends-version depends confnew confold confdef confmiss conflicts architecture overwrite-dir remove-reinstreq remove-essential help)'
74)
75
76_dpkg_options_recursive=( '(--recursive -R)'{--recursive,-R}'[recursive]' )
77
78_dpkg_deb_and_query_only_actions=(
79    '(--show -W)'{--show,-W}'[show package info]: :_deb_files'
80)
81
82_dpkg_deb_and_query_only_options=(
83    '--showformat=-[alternative format]:format: '
84)
85
86_dpkg_query_actions=(
87      '(--status -s)'{--status,-s}'[display package status]:*:packages:->status'
88      '(--print-avail -p)'{--print-avail,-p}'[display available details]:packages:_deb_packages avail'
89      '(--listfiles, -L)'{--listfiles,-L}'[list owned files]:*:packages:->listfiles'
90      '(--list -l)'{--list,-l}'[list packages]:*:packages:->list'
91      '(--search -S)'{--search,-S}'[search for file owner]:*:pattern:->search'
92      '--admindir=[data directory]:directory:_files -/'
93)
94
95# not needed anymore?
96#  _dpkg_actions_install=('(--install)-i[install]' '(-i)--install')
97#  _dpkg_actions_record_avail=('(--record-avail)-A[record available]' '(-A)--record-avail')
98
99case "$service" in
100  dpkg)
101    _arguments -C -s \
102      "$_dpkg_actions[@]" \
103      "$_dpkg_deb_actions[@]" \
104      "$_dpkg_common_actions[@]" \
105      "$_dpkg_options[@]" \
106      "$_dpkg_options_recursive[@]" \
107      "$_dpkg_query_actions[@]" && return 0
108  ;;
109
110  dpkg-deb)
111    _arguments "$_dpkg_deb_actions[@]" \
112        "$_dpkg_deb_only_actions[@]" \
113        "$_dpkg_common_actions[@]" \
114        "$_dpkg_deb_and_query_only_actions[@]" \
115        "$_dpkg_deb_and_query_only_options[@]" && return 0
116
117  ;;
118
119  dpkg-query)
120    _arguments "$_dpkg_query_actions[@]" \
121           "$_dpkg_common_actions[@]" \
122           "$_dpkg_deb_and_query_only_actions[@]" \
123           "$_dpkg_deb_and_query_only_options[@]" && return 0
124  ;;
125  dpkg-reconfigure)
126    _arguments -s -w \
127      '(-f --frontend)'{-f,--frontend}'[select frontend to use]:frontend:(dialog readline noninteractive gnome kde editor web)' \
128      '(-p --priority)'{-p,--priority}'[specify min priority of questions]:priority:(low medium high critical)' \
129      '--default-priority[use default question priority]' \
130      '(*)--all[reconfigure all installed packages using debconf]' \
131      '(-u --unseen-only)'{-u,--unseen-only}'[only ask questions not yet seen are asked]' \
132      '--force[reconfigure even packages in broken state]' \
133      '(-)'{-h,--help}'[display help information]' \
134      '*:package:_deb_packages installed' && return 0
135  ;;
136esac
137
138case "$state" in
139  install|record_avail)
140    _call_function ret _dpkg_$state && return ret
141# not needed anymore?
142#            "${(@e):-\$_dpkg_actions_${state}}" \
143    _arguments -C -A '-*' -s \
144	"$_dpkg_options[@]" \
145	\!${^_dpkg_actions%%:*} \
146      - recur \
147	"$_dpkg_options_recursive[@]" \
148	'*:directory:_path_files -/' \
149      - nonrecur \
150	'*: :_deb_files'
151  ;;
152  remove|status|listfiles)
153    _call_function ret _dpkg_$state && return ret
154    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
155       '*:package:_deb_packages installed'
156  ;;
157  purge)
158    _call_function ret _dpkg_$state && return ret
159    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
160       '*:package:_deb_packages xinstalled'
161  ;;
162  list)
163    _call_function ret _dpkg_$state && return ret
164    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
165       '*:packages:_deb_packages avail'
166  ;;
167  compare_versions)
168    _call_function ret _dpkg_$state && return ret
169    _arguments -C -A "-*" -s \
170    '1:version A:' \
171    '2:operator:(lt le eq ne ge gt lt-nl le-nl ge-nl gt-nl)' \
172    '3:version B:'
173  ;;
174  configure)
175    _call_function ret _dpkg_$state && return ret
176    _arguments -C -A "-*" -s '--configure' \
177       "$_dpkg_options[@]" \
178      '(* -a --pending)'{-a,--pending}'[pending packages]' \
179      '*:package:_deb_packages installed'
180  ;;
181  search)
182    _call_function ret _dpkg_$state && return ret
183    _files
184  ;;
185  add_architecture)
186    _call_function ret _dpkg_$state && return ret
187    _wanted architecture expl 'extra architecture' \
188      compadd ${(f)"$(dpkg-architecture -L 2>/dev/null)"}
189  ;;
190  remove_architecture)
191    _call_function ret _dpkg_$state && return ret
192    _wanted architecture expl 'extra architecture' \
193      compadd ${(f)"$(dpkg --print-foreign-architectures 2>/dev/null)"}
194esac
195