/bash_completion_lib/complete -o filenames/rpm
http://github.com/brinkman83/bashrc · #! · 258 lines · 246 code · 12 blank · 0 comment · 0 complexity · 9874ef6500d1067b655a67e4df191c17 MD5 · raw file
- # rpm(8) completion
- comp_include _filedir _get_cword _rpm_installed_packages
- _rpm_groups()
- {
- local IFS=$'\t'
- # remove trailing backslash, or grep will complain
- cur=${cur%"\\"}
- COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat '%{group}\n' | \
- grep "^$cur" ) )
- # backslash escape spaces and translate newlines to tabs
- COMPREPLY=( $( echo ${COMPREPLY[@]} | sed 's/ /\\ /g' | tr '\n' '\t' ) )
- }
- _rpm()
- {
- local cur prev ver nodig nosig
- COMPREPLY=()
- cur=`_get_cword`
- prev=${COMP_WORDS[COMP_CWORD-1]}
- nodig=""
- nosig=""
- ver=$(rpm --version); ver=${ver##* }
-
- if [[ "$ver" > "4.0.4" ]]; then
- nodig="--nodigest"
- fi
- if [[ "$ver" > "4.0.99" ]]; then
- nosig="--nosignature"
- fi
- if [ $COMP_CWORD -eq 1 ]; then
- # first parameter on line
- case "$cur" in
- -b*)
- COMPREPLY=( $( compgen -W '-ba -bb -bc -bi -bl -bp -bs'\
- -- $cur ) )
- ;;
- -t*)
- COMPREPLY=( $( compgen -W '-ta -tb -tc -ti -tl -tp -ts'\
- -- $cur ) )
- ;;
- --*)
- COMPREPLY=( $( compgen -W '--help --version --initdb \
- --checksig --recompile --rebuild --resign --addsign \
- --rebuilddb --showrc --setperms --setugids --tarbuild \
- --eval --install --upgrade --query --freshen --erase \
- --verify --querytags --rmsource --rmspec --clean \
- --import' -- $cur ) )
- ;;
- *)
- COMPREPLY=( $( compgen -W '-b -e -F -i -q -t -U -V' \
- -- $cur ) )
- ;;
- esac
- return 0
- fi
- case "$prev" in
- --@(@(db|exclude)path|prefix|relocate|root))
- _filedir -d
- return 0
- ;;
- --eval)
- # get a list of macros
- COMPREPLY=( $( sed -ne 's|^\(%'${cur#\%}'[^ '$'\t'']*\).*$|\1|p' \
- /usr/lib/rpm/macros ) )
- return 0
- ;;
- --pipe)
- COMPREPLY=( $( compgen -c -- $cur ) )
- return 0
- ;;
- --rcfile)
- _filedir
- return 0
- ;;
- --specfile)
- # complete on .spec files
- _filedir spec
- return 0
- ;;
- --whatprovides)
- if [[ "$cur" == */* ]]; then
- _filedir
- else
- # complete on capabilities
- COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat \
- '%{providename}\n' | grep "^$cur" ) )
- fi
- return 0
- ;;
- --whatrequires)
- # complete on capabilities
- COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat \
- '%{requirename}\n' | grep "^$cur" ) )
- return 0
- ;;
- esac
- case "${COMP_WORDS[1]}" in
- -@([iFU]*|-install|-freshen|-upgrade))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--percent --force --test \
- --replacepkgs --replacefiles --root --excludedocs \
- --includedocs --noscripts --rcfile --ignorearch \
- --dbpath --prefix --ignoreos --nodeps --allfiles \
- --ftpproxy --ftpport --justdb --httpproxy --httpport \
- --noorder --relocate --badreloc --notriggers \
- --excludepath --ignoresize --oldpackage --define \
- --eval --pipe --queryformat --repackage --nosuggests \
- --nodigest --nosignature' -- $cur ) )
- else
- _filedir 'rpm'
- fi
- ;;
- -@(e|-erase))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--allmatches --noscripts \
- --notriggers --nodeps --test --repackage' -- $cur ) )
- else
- _rpm_installed_packages
- fi
- ;;
- -@(q*|-query))
- # check whether we're doing file completion
- if [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--scripts --root \
- --rcfile --requires --ftpport --ftpproxy \
- --httpproxy --httpport --provides --triggers \
- --dump --changelog --dbpath \
- --last --filesbypkg \
- --info --list --state \
- --docfiles --configfiles --queryformat \
- --conflicts --obsoletes \
- --nodigest --nosignature \
- --triggerscripts' -- $cur ) )
- else
- _filedir
- fi
- elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then
- _rpm_groups
- elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then
- # uninstalled package completion
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--scripts --root \
- --rcfile --whatprovides --whatrequires \
- --requires --triggeredby --ftpport --ftpproxy \
- --httpproxy --httpport --provides --triggers \
- --dump --changelog --dbpath --filesbypkg \
- --define --eval --pipe --showrc --info --list \
- --state --docfiles --configfiles --queryformat\
- --conflicts --obsoletes --nodigest \
- --nosignature' -- $cur ) )
- else
- _filedir 'rpm'
- fi
- else
- # installed package completion
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--scripts --root \
- --rcfile --whatprovides --whatrequires \
- --requires --triggeredby --ftpport --ftpproxy \
- --httpproxy --httpport --provides --triggers \
- --dump --changelog --dbpath --specfile \
- --querybynumber --last --filesbypkg --define \
- --eval --pipe --showrc --info --list --state \
- --docfiles --configfiles --queryformat \
- --conflicts --obsoletes --pkgid --hdrid \
- --fileid --tid --nodigest --nosignature \
- --triggerscripts' -- $cur ) )
- elif [ "${COMP_LINE#* -*([^ -])a}" == "$COMP_LINE" ]; then
- _rpm_installed_packages
- fi
- fi
- ;;
- -@(K*|-checksig))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--nopgp --nogpg --nomd5 \
- --nodigest --nosignature' -- $cur ) )
- else
- _filedir 'rpm'
- fi
- ;;
- -@([Vy]*|-verify))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--root --rcfile --dbpath \
- --nodeps --nogroup --nolinkto --nomode --nomtime \
- --nordev --nouser --nofiles --noscripts --nomd5 \
- --querytags --specfile --whatrequires --whatprovides \
- --nodigest --nosignature' -- $cur ) )
- # check whether we're doing file completion
- elif [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then
- _filedir
- elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then
- _rpm_groups
- elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then
- _filedir 'rpm'
- else
- _rpm_installed_packages
- fi
- ;;
- -[bt]*)
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--short-circuit --timecheck \
- --clean --rmsource --rmspec --test --sign --buildroot \
- --target -- buildarch --buildos --nobuild --nodeps \
- --nodirtokens' -- $cur ) )
- elif [[ ${COMP_WORDS[1]} == -b* ]]; then
- _filedir 'spec'
- else
- _filedir '@(tgz|tar.@(gz|bz2))'
- fi
- ;;
- --re@(build|compile))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--nodeps --rmsource \
- --rmspec --sign --nodirtokens --target' -- $cur ) )
- else
- _filedir '?(no)src.rpm'
- fi
- ;;
- --tarbuild)
- _filedir '@(tgz|tar.@(gz|bz2))'
- ;;
- --@(re|add)sign)
- _filedir 'rpm'
- ;;
- --set@(perms|gids))
- _rpm_installed_packages
- ;;
- --@(clean|rms@(ource|pec)))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--clean --rmsource \
- --rmspec' -- $cur ) )
- else
- _filedir 'spec'
- fi
- ;;
- --@(import|dbpath|root))
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $( compgen -W '--import --dbpath --root' \
- -- $cur ) )
- else
- _filedir
- fi
- ;;
- esac
- return 0
- }
- _rpm