ce9a4a0196a372b153a592ecd61b728cd88bb767

Author
Carlo Sala <carlosalag@protonmail.com>
Committer
Carlo Sala <carlosalag@protonmail.com>
Date

Message

feat(dnf): add `dnf5` completion

Closes #12939

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'