about summary refs log tree commit diff
path: root/Completion/Debian/Command/_dpkg
blob: f098e8a883720012fe890244b799d0ad710229a7 (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
#compdef dpkg dpkg-deb 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 curcontext="$curcontext" context state line expl ret
typeset -A opt_args

_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'
  '(--print-avail -p)'{--print-avail,-p}'[display available details]:packages:_deb_packages avail'
  '--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]'
  '(--list -l)'{--list,-l}'[list packages]:*:packages:->list'
  '(--status -s)'{--status,-s}'[display package status]:*:packages:->status'
  '(--audit -C)'{--audit,-C}'[check for broken pkgs]'
  '--get-selections[get selections]:pattern:'
  '--set-selections[set selections]'
  '--yet-to-unpack[list uninstalled]'
  '(--listfiles, -L)'{--listfiles,-L}'[list owned files]:*:packages:->listfiles'
  '(--search -S)'{--search,-S}'[search for file owner]:*:pattern:->search'
  '--print-architecture[print target architecture]'
  '--print-gnu-build-architecture'
  '--print-installation-architecture'
  '--compare-versions[compare version numbers]:*::expression:= ->compare_versions'
)

_dpkg_options=(
  '--abort-after[abort after errors]:number of errors:'
  '--admindir=[data directory]:directory:_files -/'
  '--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:(auto-select downgrade configure-any hold bad-path not-root overwrite overwrite-diverted depends-version depends confnew confold confdef confmiss conflicts architecture overwrite-dir remove-reinstreq remove-essential)'
)

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

# 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[@]" && return 0
  ;;

  dpkg-deb)
    _arguments "$_dpkg_deb_actions[@]" \
	"$_dpkg_common_actions[@]" && return 0
  ;;
  dpkg-reconfigure)
    _arguments -s \
      '(-f --frontend)'{-f,--frontend}'[select frontend to use]:frontend' \
      '(-p --priority)'{-p,--priority}'[specify min priority of questions]:priority' \
      '--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|purge|status|listfiles)
    _call_function ret _dpkg_$state && return ret
    _arguments -C -A "-*" -s "$_dpkg_options[@]" \
       '*:package:_deb_packages installed'
  ;;
  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