diff options
Diffstat (limited to 'completions/rpm')
-rw-r--r-- | completions/rpm | 256 |
1 files changed, 126 insertions, 130 deletions
diff --git a/completions/rpm b/completions/rpm index bbab0368..c7e67705 100644 --- a/completions/rpm +++ b/completions/rpm @@ -1,12 +1,9 @@ -# bash completion for rpm +# bash completion for rpm -*- shell-script -*- -have rpm && { # helper functions _rpm_installed_packages() { - local nodig="$1" nosig="$2" - if [[ -r /var/log/rpmpkgs && \ /var/log/rpmpkgs -nt /var/lib/rpm/Packages ]]; then # using RHL 7.2 or later - this is quicker than querying the DB @@ -17,73 +14,56 @@ _rpm_installed_packages() # SUSE's rpmqpack is faster than rpm -qa COMPREPLY=( $( compgen -W '$( rpmqpack )' -- "$cur" ) ) else - _rpm_nodigsig - COMPREPLY=( $( rpm -qa $nodig $nosig --qf='%{NAME} ' "$cur*" ) ) + COMPREPLY=( $( ${1:-rpm} -qa --nodigest --nosignature \ + --queryformat='%{NAME} ' "$cur*" 2>/dev/null ) ) fi } _rpm_groups() { local IFS=$'\n' - COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig --queryformat \ - '%{group}\n' )" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "$( ${1:-rpm} -qa --nodigest --nosignature \ + --queryformat='%{GROUP}\n' 2>/dev/null )" -- "$cur" ) ) } -_rpm_nodigsig() +_rpm_macros() { - if [[ -z "$nodig" && -z "$nosig" ]]; then - local rpmver - - rpmver=$(rpm --version) - rpmver=${rpmver##* } + # get a list of macros + COMPREPLY=( $( compgen -W "$( ${1:-rpm} --showrc | sed -ne \ + 's/^-\{0,1\}[0-9]\{1,\}[:=][[:space:]]\{1,\}\([^[:space:](]\{3,\}\).*/%\1/p' )" \ + -- "$cur" ) ) +} - if [[ "$rpmver" > "4.0.4" ]]; then - nodig="--nodigest" - fi - if [[ "$rpmver" > "4.0.99" ]]; then - nosig="--nosignature" - fi - fi +_rpm_buildarchs() +{ + COMPREPLY=( $( compgen -W "$( ${1:-rpm} --showrc | sed -ne \ + 's/^\s*compatible\s\s*build\s\s*archs\s*:\s*\(.*\)/\1/ p' )" \ + -- "$cur" ) ) } # rpm(8) completion # _rpm() { - local cur prev opts nodig nosig + local cur prev words cword split + _init_completion -s || return - COMPREPLY=() - _get_comp_words_by_ref cur prev - nodig="" - nosig="" - _rpm_nodigsig - - if [ $COMP_CWORD -eq 1 ]; then + if [ $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" ) ) + --checksig --resign --addsign --rebuilddb --showrc \ + --setperms --setugids --eval --install --upgrade --query \ + --freshen --erase --verify --querytags --import' \ + -- "$cur" ) ) ;; *) - COMPREPLY=( $( compgen -W '-b -e -E -F -i -q -t -U -V' \ + COMPREPLY=( $( compgen -W '-e -E -F -i -q -t -U -V' \ -- "$cur" ) ) ;; esac - - return 0 + return 0 fi case $prev in @@ -92,14 +72,11 @@ _rpm() return 0 ;; --eval|-E) - # get a list of macros - COMPREPLY=( $( compgen -W "$( rpm --showrc | sed -ne \ - 's/^-\{0,1\}[0-9]\{1,\}[:=][[:space:]]\{1,\}\([^[:space:](]\{3,\}\).*/%\1/p' )" \ - -- "$cur" ) ) + _rpm_macros $1 return 0 ;; --pipe) - _compopt_o_filenames + compopt -o filenames COMPREPLY=( $( compgen -c -- "$cur" ) ) return 0 ;; @@ -118,8 +95,9 @@ _rpm() else # complete on capabilities local IFS=$'\n' - COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ - --queryformat='%{providename}\n' )" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "$( $1 -qa --nodigest --nosignature \ + --queryformat='%{PROVIDENAME}\n' 2>/dev/null )" \ + -- "$cur" ) ) fi return 0 ;; @@ -129,37 +107,34 @@ _rpm() else # complete on capabilities local IFS=$'\n' - COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ - --queryformat='%{requirename}\n' )" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "$( $1 -qa --nodigest --nosignature \ + --queryformat='%{REQUIRENAME}\n' 2>/dev/null )" \ + -- "$cur" ) ) fi return 0 ;; - --target) - COMPREPLY=( $( compgen -W "$( command rpm --showrc | sed -ne \ - 's/^\s*compatible\s\s*build\s\s*archs\s*:\s*\(.*\)/\1/ p' )" \ - -- "$cur" ) ) - return 0 - ;; --define|-D|--fileid|--hdrid|--pkgid) # argument required but no completions available return 0 ;; esac + $split && return 0 + # options common to all modes - opts="--define --eval --macros --nodigest --nosignature --rcfile \ - --quiet --pipe --verbose" + local opts="--define= --eval= --macros= --nodigest --nosignature \ + --rcfile= --quiet --pipe --verbose" - case ${COMP_WORDS[1]} in + case ${words[1]} in -[iFU]*|--install|--freshen|--upgrade) if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --percent --force \ --test --replacepkgs --replacefiles --root \ --excludedocs --includedocs --noscripts --ignorearch \ - --dbpath --prefix --ignoreos --nodeps --allfiles \ + --dbpath --prefix= --ignoreos --nodeps --allfiles \ --ftpproxy --ftpport --justdb --httpproxy --httpport \ - --noorder --relocate --badreloc --notriggers \ - --excludepath --ignoresize --oldpackage \ + --noorder --relocate= --badreloc --notriggers \ + --excludepath= --ignoresize --oldpackage \ --queryformat --repackage --nosuggests" -- "$cur" ) ) else _filedir '[rs]pm' @@ -171,18 +146,18 @@ _rpm() --noscripts --notriggers --nodeps --test --repackage" \ -- "$cur" ) ) else - _rpm_installed_packages "$nodig" "$nosig" + _rpm_installed_packages $1 fi ;; -q*|--query) # options common to all query types - opts="$opts --changelog --configfiles --conflicts --docfiles + opts+=" --changelog --configfiles --conflicts --docfiles --dump --enhances --filesbypkg --filecaps --fileclass --filecolor --fileprovide --filerequire --filesbypkg --info - --list --obsoletes --pipe --provides --queryformat --rcfile + --list --obsoletes --pipe --provides --queryformat= --requires --scripts --suggests --triggers --xml" - if [[ $COMP_LINE == *\ -@(*([^ -])f|-file )* ]]; then + if [[ ${words[@]} == *\ -@(*([^ -])f|-file )* ]]; then # -qf completion if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --dbpath --fscontext \ @@ -190,10 +165,10 @@ _rpm() else _filedir fi - elif [[ $COMP_LINE == *\ -@(*([^ -])g|-group )* ]]; then + elif [[ ${words[@]} == *\ -@(*([^ -])g|-group )* ]]; then # -qg completion - _rpm_groups - elif [[ $COMP_LINE == *\ -@(*([^ -])p|-package )* ]]; then + _rpm_groups $1 + elif [[ ${words[@]} == *\ -@(*([^ -])p|-package )* ]]; then # -qp; uninstalled package completion if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --ftpport --ftpproxy \ @@ -206,11 +181,11 @@ _rpm() if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --all --file --fileid --dbpath --fscontext --ftswalk --group --hdrid --last - --package --pkgid --root --specfile --state + --package --pkgid --root= --specfile --state --triggeredby --whatprovides --whatrequires" \ -- "$cur" ) ) - elif [[ $COMP_LINE != *\ -@(*([^ -])a|-all )* ]]; then - _rpm_installed_packages "$nodig" "$nosig" + elif [[ ${words[@]} != *\ -@(*([^ -])a|-all )* ]]; then + _rpm_installed_packages $1 fi fi ;; @@ -224,86 +199,107 @@ _rpm() ;; -[Vy]*|--verify) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "$opts --root --dbpath --nodeps \ + COMPREPLY=( $( compgen -W "$opts --root= --dbpath --nodeps \ --nogroup --nolinkto --nomode --nomtime --nordev --nouser \ --nofiles --noscripts --nomd5 --querytags --specfile \ --whatrequires --whatprovides" -- "$cur" ) ) # check whether we're doing file completion - elif [[ $COMP_LINE == *\ -@(*([^ -])f|-file )* ]]; then + elif [[ ${words[@]} == *\ -@(*([^ -])f|-file )* ]]; then _filedir - elif [[ $COMP_LINE == *\ -@(*([^ -])g|-group )* ]]; then - _rpm_groups - elif [[ $COMP_LINE == *\ -@(*([^ -])p|-package )* ]]; then + elif [[ ${words[@]} == *\ -@(*([^ -])g|-group )* ]]; then + _rpm_groups $1 + elif [[ ${words[@]} == *\ -@(*([^ -])p|-package )* ]]; then _filedir '[rs]pm' else - _rpm_installed_packages "$nodig" "$nosig" - fi - ;; - -[bt]*) - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "$opts --short-circuit --timecheck \ - --clean --rmsource --rmspec --test --sign --buildroot \ - --target --nobuild --nodeps --nodirtokens" -- "$cur" ) ) - elif [[ ${COMP_WORDS[1]} == -b* ]]; then - _filedir spec - else - _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))' + _rpm_installed_packages $1 fi ;; - --rebuild|--recompile) - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "$opts --nodeps --rmsource \ - --rmspec --sign --nodirtokens --target" -- "$cur" ) ) - else - _filedir '@(?(no)src.r|s)pm' - fi - ;; - --tarbuild) - _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))' - ;; --resign|--addsign) _filedir '[rs]pm' ;; --setperms|--setgids) - _rpm_installed_packages "$nodig" "$nosig" - ;; - --clean|--rmsource|--rmspec) - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--clean --rmsource --rmspec' \ - -- "$cur" ) ) - else - _filedir spec - fi + _rpm_installed_packages $1 ;; --import|--dbpath|--root) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--import --dbpath --root' \ + COMPREPLY=( $( compgen -W '--import --dbpath --root=' \ -- "$cur" ) ) else _filedir fi ;; esac + [[ $COMPREPLY == *= ]] && compopt -o nospace return 0 -} -complete -F _rpm rpm rpmbuild -} +} && +complete -F _rpm rpm -have gendiff && -_gendiff() +_rpmbuild() { - COMPREPLY=() - local cur cword - _get_comp_words_by_ref cur cword - [[ $cword != 1 ]] || _filedir -d + local cur prev words cword split + _init_completion -s || return + + local rpm="${1%build*}" + [[ $rpm == $1 ]] || ! type $rpm &>/dev/null && rpm= + + case $prev in + --buildroot|--root|-r|--dbpath) + _filedir -d + return 0 + ;; + --target) + _rpm_buildarchs + return 0 + ;; + --eval|-E) + _rpm_macros $rpm + return 0 + ;; + --macros|--rcfile) + _filedir + return 0 + ;; + --buildpolicy) + local cfgdir=$( $rpm --eval '%{_rpmconfigdir}' 2>/dev/null ) + if [[ $cfgdir ]]; then + COMPREPLY=( $( compgen -W "$( command ls $cfgdir 2>/dev/null \ + | sed -ne 's/^brp-//p' )" -- "$cur" ) ) + fi + ;; + --define|-D|--with|--without) + return 0 + ;; + esac + + $split && return 0 + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W "$( _parse_help "$1" )" -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + return 0 + fi + + # Figure out file extensions to complete + local word ext + for word in ${words[@]}; do + case $word in + -b?) + ext=spec + break + ;; + -t?|--tarbuild) + ext='@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))' + break + ;; + --rebuild|--recompile) + ext='@(?(no)src.r|s)pm' + break + ;; + esac + done + [[ -n $ext ]] && _filedir $ext } && -complete -F _gendiff gendiff +complete -F _rpmbuild rpmbuild rpmbuild-md5 -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: # ex: ts=4 sw=4 et filetype=sh |