summary refs log tree commit diff
path: root/Completion/Debian/Command/_dpkg
blob: e7184e7cc01cc7c2c1e0f4ae888c4202e7edf490 (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
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
#compdef dpkg dpkg-deb dpkg-query dpkg-reconfigure

local _dpkg_deb_actions _dpkg_common_actions _dpkg_actions _dpkg_options
local _dpkg_options_recursive #_dpkg_actions_install _dpkg_actions_record_avail
local _dpkg_deb_only_actions
local _dpkg_deb_and_query_only_actions _dpkg_deb_and_query_only_options 
local _dpkg_query_actions
local curcontext="$curcontext" context state line expl ret
typeset -A opt_args

_dpkg_deb_only_actions=(
    '-D[debugging output]'
    '(--new)--old[old archive format]'
    '(--old)--new[new archive format]'
    '--nocheck[suppress control file check]'
    '-z+[compression level]:compression number:(1 2 3 4 5 6 7 8 9)'
)

_dpkg_deb_actions=(
  '(--build -b)'{--build,-b}'[build archive]:directory:_files -/'
  '(--contents -c)'{--contents,-c}'[list contents]:Debian package:_files -g "*.u#deb(-.)"'
  '(--info -I)'{--info,-I}'[show info]:Debian package:_files -g "*.u#deb(-.)"'
  '(--field -f)'{--field,-f}'[show fields]:Debian package:_files -g "*.u#deb(-.)"'
  '(--control -e)'{--control,-e}'[extract control]:Debian package:_files -g "*.u#deb(-.)"'
  '(--extract -x)'{--extract,-x}'[extract files]:Debian package:_files -g "*.u#deb(-.)"'
  '(--vextract -X)'{--vextract,-X}'[extract and list files]:Debian package:_files -g "*.u#deb(-.)"'
  '--fsys-tarfile[output fs tarfile]:Debian package:_files -g "*.u#deb(-.)"'
)

_dpkg_common_actions=(
  '--help[show help]'
  '--version[show version]'
  '(--license --licence)'{--license,--licence}'[show licencing]'
)

_dpkg_actions=(
  '(--install -i)'{--install,-i}'[install packages]:*:Debian packages:->install'
  '--unpack[unpack package]:Debian package:_files -g "*.deb(-.)"'
  '--configure[reconfigure specified packages]:*:package:->configure'
  '(--remove -r)'{--remove,-r}'[remove package]:*:package:->remove'
  '(--purge -P)'{--purge,-P}'[purge package]:*:package:->purge'
  '--update-avail[update available]:package file:_files'
  '--merge-avail[merge available]:package file:_files'
  '(--record-avail -A)'{--record-avail,-A}'[record available]:*:package files:->record_avail'
  '--forget-old-unavail[forget uninstalled unavailable]'
  '--clear-avail[clear available]'
  '(--audit -C)'{--audit,-C}'[check for broken pkgs]'
  '--get-selections[get selections]:pattern:'
  '--set-selections[set selections]'
  '--yet-to-unpack[list uninstalled]'
  '--print-architecture[print target architecture]'
  '--print-installation-architecture'
  '--compare-versions[compare version numbers]:*::expression:= ->compare_versions'
)

_dpkg_options=(
  '--abort-after[abort after errors]:number of errors:'
  '--root=[alternative root]:root:_files -/'
  '--instdir=[change inst root but not data dir]:_files -/'
  '(--selected-only -O)'{--selected-only,-O}'[skip unselected packages]'
  '(--skip-same-version -E)'{--skip-same-version,-E}'[skip packages with same version as installed]'
  '(--refuse-downgrade -G)'{--refuse-downgrade,-G}'[skip packages with earlier version than installed]'
  '(--auto-deconfigure -B)'{--auto-deconfigure,-B}'[install can break other packages]'
  '--largemem[optimize for >4Mb RAM]'
  '--smallmem[optimize for <4Mb RAM]'
  '--no-act[show potential actions but do not follow through]'
  '-D+[debug options]:debug options:(h 1 2 3)'
  '--debug=[debug options]:debug options:(help 1 2 3)'
  '--ignore-depends=[ignore depends involving package]:package:_deb_packages avail'
  --{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)'
)

_dpkg_options_recursive=( '(--recursive -R)'{--recursive,-R}'[recursive]' )

_dpkg_deb_and_query_only_actions=(
    '(--show -W)'{--show,-W}'[show package info]:Debian package:_files -g \*.u\#deb\(-.\)'
)

_dpkg_deb_and_query_only_options=(
    '--showformat=-[alternative format]:format: '
)

_dpkg_query_actions=(
      '(--status -s)'{--status,-s}'[display package status]:*:packages:->status'
      '(--print-avail -p)'{--print-avail,-p}'[display available details]:packages:_deb_packages avail'
      '(--listfiles, -L)'{--listfiles,-L}'[list owned files]:*:packages:->listfiles'
      '(--list -l)'{--list,-l}'[list packages]:*:packages:->list'
      '(--search -S)'{--search,-S}'[search for file owner]:*:pattern:->search'
      '--admindir=[data directory]:directory:_files -/'
)

# not needed anymore?
#  _dpkg_actions_install=('(--install)-i[install]' '(-i)--install')
#  _dpkg_actions_record_avail=('(--record-avail)-A[record available]' '(-A)--record-avail')

case "$service" in
  dpkg)
    _arguments -C -s \
      "$_dpkg_actions[@]" \
      "$_dpkg_deb_actions[@]" \
      "$_dpkg_common_actions[@]" \
      "$_dpkg_options[@]" \
      "$_dpkg_options_recursive[@]" \
      "$_dpkg_query_actions[@]" && return 0
  ;;

  dpkg-deb)
    _arguments "$_dpkg_deb_actions[@]" \
        "$_dpkg_deb_only_actions[@]" \
        "$_dpkg_common_actions[@]" \
        "$_dpkg_deb_and_query_only_actions[@]" \
        "$_dpkg_deb_and_query_only_options[@]" && return 0

  ;;

  dpkg-query)
    _arguments "$_dpkg_query_actions[@]" \
           "$_dpkg_common_actions[@]" \
           "$_dpkg_deb_and_query_only_actions[@]" \
           "$_dpkg_deb_and_query_only_options[@]" && return 0
  ;;
  dpkg-reconfigure)
    _arguments -s -w \
      '(-f --frontend)'{-f,--frontend}'[select frontend to use]:frontend:(dialog readline noninteractive gnome kde editor web)' \
      '(-p --priority)'{-p,--priority}'[specify min priority of questions]:priority:(low medium high critical)' \
      '--default-priority[use default question priority]' \
      '(*)--all[reconfigure all installed packages using debconf]' \
      '(-u --unseen-only)'{-u,--unseen-only}'[only ask questions not yet seen are asked]' \
      '--force[reconfigure even packages in broken state]' \
      '(-)'{-h,--help}'[display help information]' \
      '*:package:_deb_packages installed' && return 0
  ;;
esac

case "$state" in
  install|record_avail)
    _call_function ret _dpkg_$state && return ret
# not needed anymore?
#            "${(@e):-\$_dpkg_actions_${state}}" \
    _arguments -C -A '-*' -s \
	"$_dpkg_options[@]" \
	\!${^_dpkg_actions%%:*} \
      - recur \
	"$_dpkg_options_recursive[@]" \
	'*:directory:_path_files -/' \
      - nonrecur \
	'*:Debian package:_path_files -g "*.deb(-.)"'
  ;;
  remove|status|listfiles)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
       '*:package:_deb_packages installed'
  ;;
  purge)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
       '*:package:_deb_packages xinstalled'
  ;;
  list)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
       '*:packages:_deb_packages avail'
  ;;
  compare_versions)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s \
    '1:version A:' \
    '2:operator:(lt le eq ne ge gt lt-nl le-nl ge-nl gt-nl)' \
    '3:version B:'
  ;;
  configure)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s '--configure' \
       "$_dpkg_options[@]" \
      '(* -a --pending)'{-a,--pending}'[pending packages]' \
      '*:package:_deb_packages installed'
  ;;
  search)
    _call_function ret _dpkg_$state && return ret
    _files
  ;;
esac