summaryrefslogtreecommitdiff
path: root/completions/rpm
diff options
context:
space:
mode:
Diffstat (limited to 'completions/rpm')
-rw-r--r--completions/rpm256
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