/
niceSOFT
/
tdnf
Обзор
Документация
Войти
/
niceSOFT
/
tdnf
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
etc/bash_completion.d/tdnf-completion.bash
234 строки
9 KB
Shreenidhi Shedi
Add repoquery downgrades support
23 янв 2026, 09:45
23 янв 2026, 09:45
ec38238
Код
Авторство
О чём код?
_tdnf__process_if_prev_is_option() { local prev opts prev="${COMP_WORDS[COMP_CWORD-1]}" case $prev in -c|--config) COMPREPLY=( $(compgen -f -- $cur) ) return 0 ;; -d|--debuglevel) opts="emergency alert critical error warning notice info debug" COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --downloaddir|--download-path) COMPREPLY=( $(compgen -d -- $cur) ) return 0 ;; --enablerepo) opts=$(tdnf repolist disabled 2>/dev/null | awk '{if (NR > 1) print $1}') COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --disablerepo) opts=$(tdnf repolist enabled 2>/dev/null | awk '{if (NR > 1) print $1}') COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; -i|--installroot) COMPREPLY=( $(compgen -d -- $cur) ) return 0 ;; --repo|--repoid) opts=$(tdnf repolist all 2>/dev/null | awk '{if (NR > 1) print $1}') COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --rpmverbosity) opts="emergency alert critical error warning notice info debug" COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --forcearch) opts="x86_64 aarch64" COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --releasever) COMPREPLY=( $(compgen -W "4.0 5.0" -- $cur) ) return 0 ;; --sec-severity) opts="Critical Important Moderate Low" COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --exclude|--disableplugin|--enableplugin) COMPREPLY=( $(compgen -W "" -- $cur) ) return 0 ;; --repofrompath|--repofromdir) COMPREPLY=( $(compgen -d -- $cur) ) return 0 ;; --file) COMPREPLY=( $(compgen -f -- $cur) ) return 0 ;; --arch) opts="x86_64 aarch64 noarch" COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --metadata-path) COMPREPLY=( $(compgen -d -- $cur) ) return 0 ;; --whatdepends|--whatrequires|--whatprovides|--whatobsoletes|--whatconflicts|--whatrecommends|--whatsuggests|--whatsupplements|--whatenhances) opts=$(tdnf repoquery --qf=%{name} 2>/dev/null) COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --qf) COMPREPLY=( $(compgen -W "" -- $cur) ) return 0 ;; --to|--from) opts=$(tdnf history list | awk '{if (NR > 1) print $1}') COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 ;; --setopt) COMPREPLY=( $(compgen -W "" -- $cur) ) return 0 ;; --rpmdefine) COMPREPLY=( $(compgen -W "" -- $cur) ) return 0 ;; esac return 1 } _tdnf__process_if_cmd() { local cmd opts cmd="${COMP_WORDS[$1]}" [[ " $__cmds " =~ " $cmd " ]] || return 1 case $cmd in check-local) [ $1 -eq $(($COMP_CWORD - 1)) ] && COMPREPLY=( $(compgen -d -- $cur) ) return 0 ;; clean) if [ $1 -eq $(($COMP_CWORD - 1)) ]; then opts="packages metadata dbcache plugins expire-cache all" else return 0 fi ;; downgrade) opts=$(tdnf repoquery --downgrades --qf=%{name} 2>/dev/null) ;; autoerase|autoremove|erase|reinstall|remove) opts=$(tdnf repoquery --installed --qf=%{name} 2>/dev/null) ;; history) if [ $1 -eq $(($COMP_CWORD - 1)) ]; then opts="init update list rollback undo redo" else return 0 fi ;; count) return 0 ;; distro-sync) opts=$(tdnf repoquery --qf=%{name} 2>/dev/null) ;; install) opts=$(tdnf repoquery --qf=%{name}) ;; mark) if [ $1 -eq $(($COMP_CWORD - 1)) ]; then opts="install remove" else return 0 fi ;; repolist) if [ $1 -eq $(($COMP_CWORD - 1)) ]; then opts="all enabled disabled" else return 0 fi ;; repoquery) # After repoquery, offer both repoquery-specific options and package names local repoquery_opts="--available --duplicates --extras --file --installed --userinstalled --upgrades --downgrades --whatconflicts --whatdepends --whatenhances --whatobsoletes --whatprovides --whatrecommends --whatrequires --whatsuggests --whatsupplements --changelogs --conflicts --depends --enhances --list --location --obsoletes --provides --qf --recommends --requires --requires-pre --suggests --supplements --source" local pkg_names=$(tdnf repoquery --qf=%{name} 2>/dev/null) opts="$repoquery_opts $pkg_names" ;; update|upgrade) opts=$(tdnf repoquery --upgrades --qf=%{name} 2>/dev/null) ;; check|help|makecache) # Commands that take no arguments return 0 ;; check-update) # Optional package names opts="$(tdnf repoquery --qf=%{name} 2>/dev/null)" ;; info) # Package names or scope options local scope_opts="installed available updates downgrades recent all" local pkg_names="$(tdnf repoquery --qf=%{name} 2>/dev/null)" opts="$scope_opts $pkg_names" ;; list) # Scope options or package names local scope_opts="installed available updates downgrades recent all" local pkg_names="$(tdnf repoquery --qf=%{name} 2>/dev/null)" opts="$scope_opts $pkg_names" ;; provides|whatprovides) # Capability names (files, provides, etc.) - no easy way to list these # Just return 0 to allow free-form input return 0 ;; reposync) # Optional repository names opts=$(tdnf repolist all 2>/dev/null | awk '{if (NR > 1) print $1}') ;; search) # Search terms - no easy way to list these, allow free-form input return 0 ;; update-to|upgrade-to) # Package names (with optional version) opts="$(tdnf repoquery --qf=%{name} 2>/dev/null)" ;; updateinfo) # Mode options or package names local mode_opts="all info summary" local pkg_names="$(tdnf repoquery --qf=%{name} 2>/dev/null)" opts="$mode_opts $pkg_names" ;; esac COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 } _tdnf() { local c=0 cur __opts __cmds COMPREPLY=() __opts="--4 -4 --6 -6 --alldeps --allowerasing --assumeno -y --assumeyes -b --best --builddeps -C --cacheonly -c --config -d --debuglevel --debugsolver --disableexcludes --disableplugin --disablerepo --downloaddir --downloadonly --enablerepo --enableplugin --exclude --forcearch --help -h -i --installroot --json --noautoremove --nodeps --nogpgcheck --nocligpgcheck --noplugins -q --quiet --reboot-required --refresh --releasever --repo --repofromdir --repofrompath --repoid --rpmdefine --rpmverbosity --sec-severity --security --setopt --skip-broken --skipconflicts --skipdigest --skipsignature --skipobsoletes --source --testonly -v --verbose --version --available --duplicates --extras --file --installed --userinstalled --upgrades --downgrades --whatdepends --whatrequires --whatenhances --whatobsoletes --whatprovides --whatrecommends --whatsuggests --whatsupplements --whatconflicts --changelogs --conflicts --depends --enhances --list --location --obsoletes --provides --qf --recommends --requires --requires-pre --suggests --supplements --all --info --summary --recent --updates --downgrades --to --from --reverse --arch --delete --download-metadata --download-path --gpgcheck --metadata-path --newest-only --norepopath --urls" __cmds="autoerase autoremove check check-local check-update clean count distro-sync downgrade erase help history info install list makecache mark provides whatprovides reinstall remove repolist repoquery reposync search update update-to updateinfo upgrade upgrade-to" cur="${COMP_WORDS[COMP_CWORD]}" _tdnf__process_if_prev_is_option && return 0 while [ $c -lt ${COMP_CWORD} ]; do _tdnf__process_if_cmd $((c++)) && return 0 done # if command was not specified: # 1) time for [options], or # 2) command autocomplete? local opts [[ $cur == -* ]] && opts=$__opts || opts=$__cmds COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 } complete -F _tdnf -o default -o filenames tdnf # vim: set et ts=4 sw=4 :