diff options
author | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2020-05-03 18:28:34 +0900 |
---|---|---|
committer | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2020-05-03 18:28:34 +0900 |
commit | 0e6ccfdb2b6ae52e077bd6b7b006a5e99e1db704 (patch) | |
tree | 2cca0af48ef6123e2d338d5737b5a343a5c4bb81 /Completion/Redhat/Command | |
parent | d128bc0bd475a43d71ef220b797a6291ffbf808c (diff) | |
download | zsh-0e6ccfdb2b6ae52e077bd6b7b006a5e99e1db704.tar.gz zsh-0e6ccfdb2b6ae52e077bd6b7b006a5e99e1db704.tar.xz zsh-0e6ccfdb2b6ae52e077bd6b7b006a5e99e1db704.zip |
45614: update _dnf
Diffstat (limited to 'Completion/Redhat/Command')
-rw-r--r-- | Completion/Redhat/Command/_dnf | 555 |
1 files changed, 454 insertions, 101 deletions
diff --git a/Completion/Redhat/Command/_dnf b/Completion/Redhat/Command/_dnf index 82b9b188f..174788ec6 100644 --- a/Completion/Redhat/Command/_dnf +++ b/Completion/Redhat/Command/_dnf @@ -1,78 +1,268 @@ #compdef dnf dnf-2 dnf-3 +# +# based on dnf-4.2.18 +# _dnf_helper() { - compadd $($python_exec $helper "$@" -d 0 -q -C 2>/dev/null) + # Get the pathname of the python executable from the 1st line of dnf-2/dnf-3. + # Probably /usr/bin/python{2,3} or /usr/libexec/platform-python. + local shebang + read -u0 shebang < $(readlink -f /usr/bin/dnf) + local python_exec=${${shebang##\#! #}%% *} + local -a helper_script=( + 'import sys' + 'from dnf.cli.completion_helper import main' + 'main(sys.argv[1:])' + ) + $python_exec -c ${(j.;.)helper_script} "$@" "$PREFIX" \ + -d 0 -q -C --assumeno --nogpgcheck 2>/dev/null </dev/null } _dnf_query_db() { - sqlite3 -batch -init /dev/null "$cache_file" "$1" + # $1: table name in the database ('available' or 'installed') + sqlite3 -batch -init /dev/null "$cache_file" \ + "select pkg from $1 WHERE pkg LIKE '$PREFIX%$SUFFIX'" } -_dnf_disabled_repos() { - _dnf_helper repolist disabled "" +_dnf_repositories() { + # required option: -T (all|disabled|enabled) + local selected expl + zparseopts -D -E - T:=selected + selected=$selected[2] + _wanted $selected-repositories expl "$selected repository" \ + compadd "$@" - $(_dnf_helper repolist --$selected) } -_dnf_enabled_repos() { - _dnf_helper repolist enabled "" +_dnf_packages() { + # required option: -T (all|available|installed|upgradable) + local selected pkgs expl + zparseopts -D -E - T:=selected + selected=$selected[2] + if [[ $selected = upgradable ]]; then + pkgs=( $(_dnf_helper upgrade) ) + elif [[ -r $cache_file ]]; then + local table=$selected + # 'available' table contains both 'available' and 'installed' packages + [[ $selected = all ]] && table=available + pkgs=( $(_dnf_query_db $table) ) + if [[ $selected = available ]]; then + local inst=( $(_dnf_query_db installed) ) + pkgs=( ${pkgs:|inst} ) # remove installed packages + fi + else + pkgs=( $(_dnf_helper list --$selected) ) + fi + _wanted $selected-packages expl "$selected package" compadd "$@" -a pkgs } -_dnf_available_packages() { - if [ -r $cache_file ]; then - compadd $(_dnf_query_db "select pkg from available WHERE pkg LIKE \"$1%\"") +_dnf_rpm_files() { + local expl + _wanted rpm-files expl 'rpm file' _files -g '(#i)*.rpm(-.)' +} + +_dnf_packages_or_rpms() { + if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name + _dnf_rpm_files else - _dnf_helper install "$1" + _dnf_packages "$@" fi } -_dnf_installed_packages() { - if [ -r $cache_file ]; then - compadd $(_dnf_query_db "select pkg from installed WHERE pkg LIKE \"$1%\"") - else - _dnf_helper remove "$1" +_dnf_groups_caching_policy() { + # TODO: Are there any reliable ways to validate the cache? + local -a newer=( "$1"(Nmw-1) ) # rebuild if more than a week old + return $#newer +} + +_dnf_groups() { + local package_groups update_policy expl + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + if [[ -z "$update_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _dnf_groups_caching_policy + fi + if _cache_invalid dnf-groups || ! _retrieve_cache dnf-groups; then + # this can be very slow + package_groups=( ${${${(M)${(f)"$(_call_program package-groups \ + $service group list -v 2>/dev/null)"}:# *}#*\(}%\)*} ) + _store_cache dnf-groups package_groups fi + _wanted package-groups expl 'package group' compadd "$@" -a package_groups } -_dnf_local_packages() { - _files -/ -g '(#i)*.rpm(-.)' +_dnf_repoquery() { + local _h='' + # 'dnf deplist' is an alias for 'dnf repoquery --deplist' + [[ $words[1] = deplist ]] && _h='!' + local -a opts=( '(- *)--querytags[list tags recognized by --queryformat]' ) + # Select options + opts+=( + '(-a --all)'{-a,--all}'[query all packages]' + '--arch=[limit results to specified architectures]:list of archs: ' + '--available[limit results to available packages]' + '--disable-modular-filtering[include packages of inactive module streams]' + '(-f --file)'{-f+,--file=}'[limit results to packages which own specified file]:file:_files' + '--latest-limit=[limit results to latest packages of specified number]:number: ' + '--recent[limit results to recently edited packages]' + '(--exactdeps)--alldeps[with --what{depends,requires}, also check non-explicit dependencies]' + '(--alldeps)--exactdeps[with --what{depends,requires}, check only explicit dependencies]' + '*--repo=[limit result to packages from the specified repo]: : _sequence _dnf_repositories -T all' + '--srpm[operate on the corresponding source RPM]' + '--whatdepends=[limit result to packages that require, enhance, recommend, suggest or supplement specified capability]:capability: ' + ) + for v in conflict enhance obsolete provide recommend require suggest supplement; do + opts+=( "--what${v}s=[limit result to packages that $v specified capability]:capability: " ) + done + # Query options + opts+=( + '--location[show a location where package could be downloaded from]' + '--tree[display recursive tree of packages]' + $_h'--deplist[display list of all direct dependencies and their providers]' + '--recursive[query packages recursively]' + '--resolve[resolve capabilities to originating package(s)]' + ) + # mutually exclusive Select options + opts+=( + + '(pkg_filter)' + '--duplicates[limit results to installed duplicate packages]' + '--installonly[limit results to installed installonly packages]' + '--unsatisfied[limit results to installed packages with unsatisfied dependencies]' + + '(list_group)' + '--installed[limit results to installed packages]' + '--extras[limit results to extra packages (not in any repos)]' + '--upgrades[limit results to upgrades for installed packages]' + '--unneeded[limit results to packages which are no longer needed]' + '--userinstalled[limit results to packages installed by user]' + ) + # mutually exclusive Query options + opts+=( + + '(output_format)' + {-i,--info}'[show detailed info about the package]' + {-l,--list}'[show list of files in the packages]' + {-s,--source}'[show source RPM name]' + '--changelogs[print package changelogs]' + '--nvr[show found packages in name-version-release format]' + '--nevra[show found packages in name-epoch:version-release.architecture format]' + '--envra[show found packages in epoch:name-version-release.architecture format]' + {--qf=,--queryformat=}'[specify custom output format]:format: ' + '--groupmember[display groups in which the package belongs]' + + '(pkg_attr)' + '--conflicts[display capabilities that the package conflicts with]' + '--depends[display capabilities that the package depends on, enhances, recommends, suggests or supplements]' + '--enhances[display capabilities that the package enhance]' + '--provides[display capabilities that the package provides]' + '--recommends[display capabilities that the package recommends]' + '--requires[display capabilities that the package depends on]' + '--requires-pre[display capabilities that the package depends on for running %pre script]' + '--suggests[display capabilities that the package suggests]' + '--supplements[display capabilities that the package supplements]' + '--obsoletes[display capabilities that the package obsoletes]' + ) + _arguments : '*: : _dnf_packages -T all' $opts } -_dnf() { - if [[ "$(readlink /usr/bin/dnf)" == "dnf-2" ]]; then - local python_exec="/usr/bin/python2" +_dnf_repository_packages() { + if (( CURRENT == 2 )); then + _dnf_repositories -T all + elif (( CURRENT == 3 )); then + local -a subcmds=( + 'check-update:check if updates are available in the repository' + 'info:list description of packages in the repository' + 'install:install all packages in the repository' + 'list:list packages in the repository' + 'move-to:reinstall all packages that are available in the repository' + 'reinstall:run reinstall-old, or move-to if it fails' + 'reinstall-old:reinstall all packages that were installed from the repository' + 'remove:remove all packages installed from the repository' + 'remove-or-distro-sync:sync packages with other repo if available there, or remove otherwise' + 'remove-or-reinstall:reinstall packages if available in other repo, or remove otherwise' + 'upgrade:update all packages in the repository' + ) + _describe -t subcommands 'subcommand' subcmds + elif [[ $words[3] = (info|list) ]]; then + if (( CURRENT == 4 )); then + _wanted options expl "option" compadd - --all --installed --available \ + --extras --obsoletes --recent --upgrades + else + _dnf_packages -T all + fi + elif [[ $words[3] = install ]]; then + _dnf_packages -T available + elif [[ $words[3] = upgrade* ]]; then + _dnf_packages -T upgradable else - local python_exec="/usr/bin/python3" + _dnf_packages -T installed fi - local helper=$(${python_exec} -c "import dnf.cli; print('{}/completion_helper.py'.format(dnf.cli.__path__[0]))") - local cache_file="/var/cache/dnf/packages.db" +} - _arguments -s \ - '(- *)'{-h,--help}'[show the help message]' \ - '--version[show dnf version]' \ - '(-v --verbose)'{-v,--verbose}'[set verbose, show debug messages]' \ - '(-q --quiet)'{-q,--quiet}'[show just the relevant content]' \ - '--allowerasing[allow erasing of installed packages]' \ - '(-y --assumeyes)'{-y,--assumeyes}'[answer yes for all questions]' \ - '(-C --cacheonly)'{-C,--cacheonly}'[run entirely from cache]' \ - '(-c --config)'{-c,--config=}'[config file location]:config file:_files' \ - '(-R --randomwait)'{-R,--randomwait=}'[maximum command wait time (in minutes)]:max wait time' \ - '--releasever=[configure DNF for another release]:release' \ - '--refresh[set metadata as expired before running the command]' \ - '--nogpgcheck[skip checking GPG signatures on package]' \ - '--installroot=[set install root]:install root:_files -/' \ - '*--enablerepo=[enable one or more repositories]:repos to enable:_dnf_disabled_repos' \ - '*--disablerepo=[disable one or more repositories]:disable repos:_dnf_enabled_repos' \ - '*::dnf command:_dnf_command' +_dnf() { + local cache_file="/var/cache/dnf/packages.db" + local -a opts=( + '(-6)-4[resolve to IPv4 addresses only]' + '(-4)-6[resolve to IPv6 addresses only]' + '*--advisory=[include packages for specified advisory]:advisory: ' + '--allowerasing[allow erasing installed packages to resolve dependencies]' + '(-y --assumeyes)--assumeno[answer no for all questions]' + '(-b --best)'{-b,--best}'[try the best available package version]' + '--bugfix[include bugfix relevant packages]' + '*'{--bz=,--bzs=}'[include packages needed to fix the specified Bugzilla]:BZ ID: ' + '(-C --cacheonly)'{-C,--cacheonly}"[run entirely from system cache, don't update cache]" + '--color=[control whether color is used]:when:(always never auto)' + '--comment=[add comment to transaction history]:comment: ' + '(-c --config)'{-c+,--config=}'[specify configuration file]:config file:_files' + '*'{--cve=,--cves=}'[include packages needed to fix the specified CVE]:CVE ID: ' + '(-d --debuglevel)'{-d+,--debuglevel=}'[specify debugging output level]:level (0-10): ' + '--debugsolver[dump detailed solving results in file ./debugdata]' + '*--disableexcludes=[disable config file excludes]: : _alternative "sections\:section\:(all main)" "repositories\:repository\:_dnf_repositories -T all"' + '(--disable --set-disabled)'{--disable,--set-disabled}'[disable repos with config-manager command]' + '*--disableplugin=[disable specified plugins]:list of plugin names: ' + '(--repo)*--disablerepo=[disable specified repos]: : _sequence _dnf_repositories -T enabled' + '(--downloaddir --destdir)'{--downloaddir=,--destdir=}'[redirect downloaded packages to the specified dir]:directory:_files -/' + '--downloadonly[only download the resolved packages]' + '(-e --errorlevel)'{-e+,--errorlevel=}'[specify error output level]:level (0-10): ' + '(--enable --set-enabled)'{--enable,--set-enabled}'[enable repos with config-manager command]' + '--enableplugin=[enable specified plugins]:list of plugin names: ' + '*--enablerepo=[enable additional repos]: : _sequence _dnf_repositories -T disabled' + '--enhancement[include enhancement relevant packages]' + '*'{-x+,--exclude=}'[exclude specified packages]: : _sequence _dnf_packages -T all' + '--forcearch=[force the use of the specified arch]:arch: ' + '(-)'{-h,--help}'[show the help message]' + '--installroot=[set install root]:directory:_files -/' + '--newpackage[include newpackage relevant packages]' + '--noautoremove[disable removal of dependencies that are no longer used]' + '--nobest[do not limit transactions to best candidates]' + '--nodocs[do not install documentation]' + '--nogpgcheck[skip checking GPG signatures on packages]' + '--noplugins[disable all plugins]' + '--obsoletes[enable obsoletes processing logic]' + '(-q --quiet)'{-q,--quiet}'[show just the relevant content]' + '(-R --randomwait)'{-R+,--randomwait=}'[maximum command wait time]:max wait time (minutes): ' + '--refresh[set metadata as expired before running the command]' + '--releasever=[configure DNF for another release]:release: ' + '*--repofrompath=[specify additional repos]:repository_label,path_or_url: ' + '(--disablerepo)*'{--repo=,--repoid=}'[enable just the specified repo]: : _sequence _dnf_repositories -T all' + '--rpmverbosity=[set RPM debug scriptlet output level]:debug level:(critical emergency error warn info debug)' + '*--sec-severity=[include security relevant packages matching specified severity]:severity:(Critical Important Moderate Low)' + '--security[include security relevant packages]' + '*--setopt=[override config option]:repoid.option=value: ' + '--skip-broken[resolve depsolve problems by skipping packages]' + '--show-duplicates[show duplicate packages in repos]' + '(-v --verbose)'{-v,--verbose}'[set verbose, show debug messages]' + '(- *)--version[show dnf version]' + '(-y --assumeyes --assumeno)'{-y,--assumeyes}'[answer yes for all questions]' + ) + _arguments -s : $opts '*::dnf command:_dnf_command' } _dnf_command() { - local -a _dnf_cmds - _dnf_cmds=( + local -a dnf_cmds=( + 'alias:define and manage aliases' "autoremove:automatically remove no longer required packages" + 'check:report problems in local packagedb if any' "check-update:check for available package upgrades" "clean:remove cached data" + 'deplist:alias for "repoquery --deplist"' "distro-sync:synchronize installed packages to the latest available versions" "downgrade:downgrade a package" - "erase:deprecated alias for remove" "group:display, or use, the groups information" "help:display a helpful usage message" "history:display, or use, the transaction history" @@ -81,117 +271,280 @@ _dnf_command() { "list:list a package or groups of packages" "makecache:generate the metadata cache" "mark:mark or unmark installed packages as installed by user" + 'module:interact with modules' "provides:find what package provides the given value" "reinstall:reinstall a package" "remove:remove a package or packages from your system" "repolist:display the configured software repositories" + 'repoquery:search repos for packages and display info about them' "repository-packages:run commands on top of all packages in given repository" "search:search package details for the given string" - "update:deprecated alias for upgrade" + 'shell:open an interactive shell' + 'swap:replace a package by another' "updateinfo:display advisories about packages" "upgrade:upgrade a package or packages on your system" - "upgrade-to:upgrade a package on your system to the specified version" + 'upgrade-minimal:upgrade only bugfix, enhancement or security fix' ) if (( CURRENT == 1 )); then - _describe -t commands 'dnf command' _dnf_cmds || compadd "$@" + _describe -t dnf-commands 'dnf command' dnf_cmds else - local command="${${_dnf_cmds[(r)$words[1]:*]%%:*}}" - # Deal with any aliases - case $command in - erase) command="remove";; - whatprovides) command="provides";; - update) command="upgrade";; + local curcontext=$curcontext cur=$words[CURRENT] cmd tmp expl ret=1 + # Deal with aliases (not comprehensive) + case $words[1] in + check-updgrade) cmd=check-update;; + distrosync|dsync) cmd=distro-sync;; + dg) cmd=downgrade;; + erase|rm) cmd=remove;; + groups|grp) cmd=group;; + hist) cmd=history;; + in) cmd=install;; + mc) cmd=makecache;; + prov|whatprovides) cmd=provides;; + rei) cmd=reinstall;; + repoinfo) cmd=repolist;; + rq) cmd=repoquery;; + se) cmd=search;; + sh) cmd=shell;; + update|up) cmd=upgrade;; + update-minimal|up-min) cmd=upgrade-minimal;; + *) cmd="${${dnf_cmds[(r)$words[1]:*]%%:*}}";; esac + (( $#cmd )) && curcontext="${curcontext%:*:*}:dnf-${cmd}:" - _is_path() { - [[ "$1" == *\/* ]] || [[ "$1" == \~* ]] - } - - local cur=$words[CURRENT] - local prev="" - [[ $CURRENT > 2 ]] && prev=$words[$((CURRENT - 1))] - - case $command in - install|upgrade|reinstall|info|check-update|distro-sync) - if ! _is_path "$cur"; then - _dnf_available_packages "$cur" + case $cmd in + alias) + if (( CURRENT == 2 )); then + _wanted subcommands expl 'subcommand' \ + compadd - list add delete && ret=0 + elif [[ $words[2] = add ]]; then + _message "name='value'" && ret=0 else - _dnf_local_packages + _message "alias name" && ret=0 fi ;; - remove|downgrade) - if ! _is_path "$cur"; then - _dnf_installed_packages "$cur" - elif [[ "$command" == downgrade ]]; then - _dnf_local_packages + autoremove|downgrade|reinstall) + _dnf_packages_or_rpms -T installed && ret=0 + ;; + check) + tmp=( + '--all:show all problems (default)' + '--dependencies:show dependency problems' + '--duplicates:show duplicate problems' + '--obsoleted:show obsoleted packages' + '--provides:show problems with provides' + ) + _describe -t options 'option' tmp && ret=0 + ;; + check-update) + if [[ $cur = -* ]]; then + _wanted options expl 'option' compadd - --changelogs && ret=0 + else + _dnf_packages -T installed && ret=0 fi ;; - list|clean) - _dnf_helper $command "$prev" "$cur" + clean) + tmp=( + 'dbcache:remove chache files generated from the repository metadata' + 'expire-cache:mark the repository metadata expired' + 'metadata:remove the repository metadata' + 'packages:remove any cached packages' + 'all:clean all' + ) + _describe -t targets 'clean target' tmp && ret=0 + ;; + distro-sync) + _dnf_packages -T installed && ret=0 ;; group) - local -a _dnf_group_cmds - _dnf_group_cmds=( - "summary:display groups overview" - "info:display package lists of a group" - "install:install packages from a group" - "list:list all matching groups" - "remove:mark the group removed" - "upgrade:upgrades the group and its packages" - "mark:mark a group for installation or removal" - ) if (( CURRENT == 2 )); then - _describe -t commands 'dnf group command' _dnf_group_cmds + tmp=( + "summary:display groups overview" + "info:display package lists of a group" + "install:install packages from a group" + "list:list all matching groups" + "remove:remove packages in a group not used by other groups" + "upgrade:upgrade the group and its packages" + "mark:mark a group for installation or removal" + ) + _describe -t subcommands 'subcommand' tmp && ret=0 + elif (( CURRENT == 3 )) && [[ $cur = -* ]]; then + if [[ $words[2] == install ]]; then + _wanted options expl 'option' compadd - --with-optional && ret=0 + elif [[ $words[2] == list ]]; then + tmp=( + '--available:show only available groups' + '--installed:show only installed groups' + '--hidden:show also hidden groups' + '--ids:show also ID of groups' + ) + _describe -t options 'option' tmp && ret=0 + fi + elif (( CURRENT == 3 )) && [[ $words[2] == mark ]]; then + _wanted subcommands expl 'subcommand' \ + compadd - install remove && ret=0 + else + _dnf_groups && ret=0 fi ;; help) if (( CURRENT == 2 )); then - _dnf_helper '_cmds' '' + _wanted commands expl 'dnf command or alias' \ + compadd - $(_dnf_helper '_cmds') && ret=0 fi ;; history) - local -a _dnf_history_cmds - _dnf_history_cmds=( - "list:list transactions" - "info:describe the given transactions" - "redo:repeat the specified transaction" - "rollback:undo all since the given transaction" - "undo:undo transactions" - "userinstalled:list names of all packages installed by a user" - ) if (( CURRENT == 2 )); then - _describe -t commands 'dnf history command' _dnf_history_cmds + tmp=( + "list:list transactions" + "info:describe the given transactions" + "redo:repeat the specified transaction" + "rollback:undo all since the given transaction" + "undo:undo transactions" + "userinstalled:list all packages installed by users" + ) + _describe -t subcommands 'subcommand' tmp && ret=0 + elif [[ $words[2] != userinstalled ]]; then + _message 'transaction' && ret=0 + fi + ;; + info|list) + if (( CURRENT == 2 )); then + if [[ $cur = -* ]]; then + tmp=( --all --available --installed --extras + --obsoletes --upgrades --autoremove --recent ) + _wanted options expl 'option' compadd -a tmp + else + _dnf_packages -T all && ret=0 + fi + elif [[ $words[2] == --(all|recent) ]]; then + _dnf_packages -T all && ret=0 + elif [[ $words[2] == --available ]]; then + _dnf_packages -T available && ret=0 + elif [[ $words[2] == --upgrades ]]; then + _dnf_packages -T upgradable && ret=0 else - _dnf_helper $command "$prev" "$cur" + _dnf_packages -T installed && ret=0 fi ;; + install) + _dnf_packages_or_rpms -T available && ret=0 + ;; makecache) if (( CURRENT == 2 )); then - _values 'make cache' 'timer' + _describe -t options 'option' \ + '(--timer:"be more resource-aware")' && ret=0 fi ;; mark) if (( CURRENT == 2 )); then - _values 'mark' 'install' 'remove' + _wanted subcommands expl 'mark as' \ + compadd - install remove group && ret=0 + else + _dnf_packages -T installed && ret=0 + fi + ;; + module) + if (( CURRENT == 2 )); then + tmp=( + 'install:install a module profile including its packages' + 'update:update packages associated with an active module stream' + 'remove:remove installed module profiles and their packages' + 'enable:enable a module stream' + 'disable:disable a module with all its streams' + 'reset:reset module state, no longer enabled or disabled' + 'provides:list modular packages, with modules they belong to' + 'list:list all (or selected) module streams, profiles and states' + 'info:print detailed information about a module' + 'repoquery:list packages belonging to a module' + ) + _describe -t subcommands 'subcommand' tmp && ret=0 + elif (( CURRENT == 3 )) && [[ $cur = -* ]]; then + if [[ $words[2] = remove ]]; then + tmp=( --all ) + elif [[ $words[2] = list ]]; then + tmp=( --all --enabled --disabled --installed ) + elif [[ $words[2] = info ]]; then + tmp=( --profile ) + elif [[ $words[2] = repoquery ]]; then + tmp=( --available --installed ) + fi + _wanted options expl 'option' compadd -a tmp && ret=0 else - _dnf_installed_packages "$cur" + # TODO: complete module name or spec + if [[ $words[2] = provides ]]; then + _dnf_packages -T all && ret=0 + elif [[ $words[2] = (disable|reset|list) ]]; then + _message 'module name' && ret=0 + else + _message 'module spec' && ret=0 + fi fi ;; provides) - _files + _files && ret=0 + ;; + remove) + if (( CURRENT == 2 )) && [[ $cur = -* ]]; then + _wanted options expl 'option' \ + compadd - --duplicates --oldinstallonly && ret=0 + elif [[ $words[2] != -* ]]; then + _dnf_packages_or_rpms -T installed && ret=0 + fi ;; repolist) if (( CURRENT == 2 )); then - _values 'repolist' 'enabled' 'disabled' 'all' + _wanted options expl 'option' \ + compadd - --enabled --disabled --all && ret=0 fi ;; + repoquery|deplist) + _dnf_repoquery && ret=0 + ;; + repository-packages) + _dnf_repository_packages + ;; search) + if [[ $cur = -* ]]; then + _wanted options expl 'option' compadd - --all && ret=0 + else + _message 'keywords' && ret=0 + fi + ;; + shell) if (( CURRENT == 2 )); then - _values 'search' 'all' + _wanted script-files expl 'script file' _files && ret=0 fi ;; + swap) + case $CURRENT in + 2) _dnf_packages -T installed && ret=0 ;; + 3) _dnf_packages -T available && ret=0 ;; + esac + ;; + updateinfo) + tmp=( + '--with-cve[print only advisories referencing CVE]' + '--with-bz[print only advisories referencing bugzilla]' + + '(output-type)' + '--summary[display just counts of advisories of each type]' + '--list[display list of advisories]' + '--info[display detailed information of advisories]' + + '(availability)' + '--available[limit to advisories about newer versions of installed packages]' + '--installed[limit to advisories about equal or older versions of installed packages]' + '--updates[limit to advisories about newer and available versions of installed packages]' + ) + _arguments '*: : _dnf_packages -T installed' $tmp && ret=0 + ;; + upgrade) + _dnf_packages_or_rpms -T upgradable && ret=0 + ;; + upgrade-minimal) + _dnf_packages -T upgradable && ret=0 + ;; esac + return ret fi } |