ce9a4a0196a372b153a592ecd61b728cd88bb767
- Author
- Carlo Sala <carlosalag@protonmail.com>
- Committer
- Carlo Sala <carlosalag@protonmail.com>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/plugins/dnf/_dnf5 b/plugins/dnf/_dnf5
2new file mode 100644
3index 0000000000000000000000000000000000000000..e194dd5a7a4498723ea23758b3a46c325771c49c
4--- /dev/null
5+++ b/plugins/dnf/_dnf5
6@@ -0,0 +1,570 @@
7+#compdef dnf5
8+# based on dnf-5.2.6.2
9+
10+# utility functions
11+
12+_dnf5_helper() {
13+ _call_program specs $service "${(q-)@}" "${(q-)PREFIX}\*" \
14+ -qC --assumeno --nogpgcheck 2>/dev/null </dev/null
15+}
16+
17+_dnf5_repositories() {
18+ # required option: -T (all|disabled|enabled)
19+ local selected expl
20+ zparseopts -D -E - T:=selected
21+ selected=$selected[2]
22+ _wanted $selected-repositories expl "$selected repository" \
23+ compadd "$@" - "${(@)${(f)$(_dnf5_helper repo list --$selected)}[2,-1]%% *}"
24+}
25+
26+_dnf5_packages() {
27+ # required option: -T (all|available|installed|upgradable)
28+ local selected opt expl
29+ zparseopts -D -E - T:=selected
30+ selected=$selected[2]
31+ case $selected in
32+ all) opt='' ;; # option --all does not exist
33+ upgradable) opt='--upgrades' ;;
34+ *) opt="--$selected" ;;
35+ esac
36+ _wanted $selected-packages expl "$selected package" \
37+ compadd "$@" - $(_dnf5_helper repoquery $opt --qf='%{name} ')
38+}
39+
40+_dnf5_rpm_files() {
41+ local expl
42+ _wanted rpm-files expl 'rpm file' _files -g '(#i)*.rpm(-.)'
43+}
44+
45+_dnf5_packages_or_rpms() {
46+ if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
47+ _dnf_rpm_files
48+ else
49+ _dnf5_packages "$@"
50+ fi
51+}
52+
53+_dnf5_groups() {
54+ # optional option: -T (available|installed)
55+ local update_policy selected line pat groups
56+ zparseopts -D -E - T:=selected
57+ selected=$selected[2]
58+ if [[ -z $selected ]]; then
59+ selected=all
60+ opt= # option --all does not exist
61+ else
62+ opt=--$selected
63+ fi
64+ # XXX hidden groups are not included
65+ for line in ${${(f)"$(_dnf5_helper group list $opt)"}[2,-1]}; do
66+ line=( ${(z)line} )
67+ groups+=( "$line[1]:$line[2,-2]" )
68+ done
69+ _describe -t $selected-groups "$selected group" groups
70+}
71+
72+_dnf5_environments() {
73+ local line envs
74+ for line in ${${(f)"$(_dnf5_helper environment list)"}[2,-1]}; do
75+ line=( ${(z)line} )
76+ envs+=( "$line[1]:$line[2,-2]" )
77+ done
78+ _describe -t environments 'environment' envs
79+}
80+
81+# completers for (several) dnf commands
82+
83+_dnf5-advisory () {
84+ _arguments : \
85+ $advisory_opts \
86+ '--contains-pkgs=[only show advisories containing specified packages]: : _sequence _dnf5_packages -T installed' \
87+ + '(with)' \
88+ '--with-cve[show only advisories referencing CVE ticket]' \
89+ '--with-bz[show only advisories referencing Bugzilla ticket]' \
90+ + '(type)' \
91+ '--all[show all advisories]' \
92+ '--available[show advisories containing newer versions of installed packages (default)]' \
93+ '--installed[show advisories containing equal and older version of installed packages]' \
94+ '--updates[show advisories containing upgradable packages]' \
95+ + args \
96+ ':subcommand:(list info summary)' '*:advisory spec:'
97+}
98+
99+_dnf5-group() {
100+ local -a tmp
101+ if (( CURRENT == 2 )); then
102+ tmp=(
103+ 'list:list all matching groups'
104+ 'info:print detailed information about groups'
105+ 'install:install packages from specified groups'