Skip to content

Commit babfbce

Browse files
scopakinomyoga
andcommitted
refactor(dpkg): convert xfuncs to current API behavior
Additionally, just try invoking `grep-status` every time rather than defining different functions based on load time existence. Provides for simpler code and survives removal of `grep-status` after load, at expense of slight runtime cost. Co-authored-by: Koichi Murase <myoga.murase@gmail.com>
1 parent d37b0af commit babfbce

File tree

4 files changed

+48
-34
lines changed

4 files changed

+48
-34
lines changed

completions/apt-build

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ _comp_cmd_apt_build()
1919
COMPREPLY=($(_comp_xfunc apt-cache packages))
2020
;;
2121
remove)
22-
COMPREPLY=(
23-
$(_comp_xfunc dpkg installed_packages "$cur"))
22+
_comp_xfunc dpkg installed_packages
2423
;;
2524
esac
2625
return

completions/apt-get

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ _comp_xfunc_apt_get_installed_packages()
44
{
55
if [[ -f /etc/debian_version ]]; then
66
# Debian system
7-
COMPREPLY=($(
8-
_comp_xfunc dpkg installed_packages "$cur"
9-
))
7+
_comp_xfunc dpkg installed_packages
108
else
119
# assume RPM based
1210
_comp_xfunc rpm installed_packages

completions/aptitude

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ _comp_cmd_aptitude()
2222
return
2323
;;
2424
purge | remove | reinstall | forbid-version)
25-
COMPREPLY=(
26-
$(_comp_xfunc dpkg installed_packages "$cur"))
25+
_comp_xfunc dpkg installed_packages
2726
return
2827
;;
2928
unhold)

completions/dpkg

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,38 @@
11
# dpkg(1) and related commands completion -*- shell-script -*-
22

3-
if _comp_have_command grep-status; then
4-
_comp_xfunc_dpkg_installed_packages()
5-
{
6-
grep-status -P -e "^${1-}" -a -FStatus 'ok installed' -n -s Package
7-
}
8-
9-
_comp_xfunc_dpkg_purgeable_packages()
10-
{
11-
grep-status -P -e "^${1-}" -a -FStatus 'ok installed' -o -FStatus 'ok config-files' -n -s Package
12-
}
13-
else
14-
_comp_xfunc_dpkg_installed_packages()
15-
{
16-
command awk -F '\n' -v RS="" "
17-
index(\$1, \"Package: ${1-}\") == 1 &&
3+
# @since 2.12
4+
_comp_xfunc_dpkg_installed_packages()
5+
{
6+
local pkgs
7+
pkgs=$(
8+
grep-status -P -e "^${cur-}" -a \
9+
-FStatus 'ok installed' \
10+
-n -s Package 2>/dev/null ||
11+
command awk -F '\n' -v RS="" "
12+
index(\$1, \"Package: ${cur-}\") == 1 &&
1813
\$2 ~ /ok installed|half-installed|unpacked|half-configured|^Essential: yes/ {
1914
print(substr(\$1, 10));
2015
}" /var/lib/dpkg/status 2>/dev/null
21-
}
16+
)
17+
_comp_compgen -a -- -W '$pkgs'
18+
}
2219

23-
_comp_xfunc_dpkg_purgeable_packages()
24-
{
25-
command awk -F '\n' -v RS="" "
26-
index(\$1, \"Package: ${1-}\") == 1 &&
20+
# @since 2.12
21+
_comp_xfunc_dpkg_purgeable_packages()
22+
{
23+
local pkgs
24+
pkgs=$(
25+
grep-status -P -e "^${cur-}" -a \
26+
-FStatus 'ok installed' -o -FStatus 'ok config-files' \
27+
-n -s Package 2>/dev/null ||
28+
command awk -F '\n' -v RS="" "
29+
index(\$1, \"Package: ${cur-}\") == 1 &&
2730
\$2 ~ /ok installed|half-installed|unpacked|half-configured|config-files|^Essential: yes/ {
2831
print(substr(\$1, 10));
2932
}" /var/lib/dpkg/status 2>/dev/null
30-
}
31-
fi
33+
)
34+
_comp_compgen -a -- -W '$pkgs'
35+
}
3236

3337
# @since 2.12
3438
_comp_xfunc_dpkg_held_packages()
@@ -38,8 +42,22 @@ _comp_xfunc_dpkg_held_packages()
3842
_comp_compgen -a -- -W '$pkgs'
3943
}
4044

41-
_comp_deprecate_func _comp_dpkg_installed_packages _comp_xfunc_dpkg_installed_packages
42-
_comp_deprecate_func _comp_dpkg_purgeable_packages _comp_xfunc_dpkg_purgeable_packages
45+
# @deprecated 2.12 use _comp_xfunc_dpkg_installed_packages instead
46+
_comp_dpkg_installed_packages()
47+
{
48+
local COMPREPLY=() cur="${1-}"
49+
# shellcheck disable=SC2119
50+
_comp_xfunc_dpkg_installed_packages
51+
printf "%s\n" "${COMPREPLY[@]}"
52+
}
53+
# @deprecated 2.12 use _comp_xfunc_dpkg_purgeable_packages instead
54+
_comp_dpkg_purgeable_packages()
55+
{
56+
local COMPREPLY=() cur="${1-}"
57+
# shellcheck disable=SC2119
58+
_comp_xfunc_dpkg_purgeable_packages
59+
printf "%s\n" "${COMPREPLY[@]}"
60+
}
4361

4462
# Debian dpkg(1) completion
4563
#
@@ -86,11 +104,11 @@ _comp_cmd_dpkg()
86104
return
87105
;;
88106
--remove | --verify | -${noargopts}[rV])
89-
COMPREPLY=($(_comp_xfunc_dpkg_installed_packages "$cur"))
107+
_comp_xfunc_dpkg_installed_packages
90108
return
91109
;;
92110
--listfiles | --purge | -${noargopts}[LP])
93-
COMPREPLY=($(_comp_xfunc_dpkg_purgeable_packages "$cur"))
111+
_comp_xfunc_dpkg_purgeable_packages
94112
return
95113
;;
96114
--debug | -${noargopts}D)
@@ -161,7 +179,7 @@ _comp_cmd_dpkg_reconfigure()
161179
COMPREPLY=($(compgen -W '--frontend --priority --all --unseen-only
162180
--help --showold --force --terse' -- "$cur"))
163181
else
164-
COMPREPLY=($(_comp_xfunc_dpkg_installed_packages "$cur"))
182+
_comp_xfunc_dpkg_installed_packages
165183
fi
166184
} &&
167185
complete -F _comp_cmd_dpkg_reconfigure -o default dpkg-reconfigure

0 commit comments

Comments
 (0)