summaryrefslogtreecommitdiffstats
path: root/completions/rpm
diff options
context:
space:
mode:
Diffstat (limited to 'completions/rpm')
-rw-r--r--completions/rpm302
1 files changed, 302 insertions, 0 deletions
diff --git a/completions/rpm b/completions/rpm
new file mode 100644
index 0000000..8299a37
--- /dev/null
+++ b/completions/rpm
@@ -0,0 +1,302 @@
+# bash completion for rpm -*- shell-script -*-
+
+# helper functions
+
+_rpm_installed_packages()
+{
+ 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
+ COMPREPLY=($(compgen -W "$(command sed -ne \
+ 's|^\([^[:space:]]\{1,\}\)-[^[:space:]-]\{1,\}-[^[:space:]-]\{1,\}\.rpm$|\1|p' \
+ /var/log/rpmpkgs)" -- "$cur"))
+ elif type rpmqpack &>/dev/null; then
+ # SUSE's rpmqpack is faster than rpm -qa
+ COMPREPLY=($(compgen -W '$(rpmqpack)' -- "$cur"))
+ else
+ COMPREPLY=($(${1:-rpm} -qa --nodigest --nosignature \
+ --queryformat='%{NAME} ' "$cur*" 2>/dev/null))
+ fi
+}
+
+_rpm_groups()
+{
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(${1:-rpm} -qa --nodigest --nosignature \
+ --queryformat='%{GROUP}\n' 2>/dev/null)" -- "$cur"))
+}
+
+_rpm_macros()
+{
+ # get a list of macros
+ COMPREPLY=($(compgen -W "$(${1:-rpm} --showrc | command sed -ne \
+ 's/^-\{0,1\}[0-9]\{1,\}[:=][[:space:]]\{1,\}\([^[:space:](]\{3,\}\).*/%\1/p')" \
+ -- "$cur"))
+}
+
+_rpm_buildarchs()
+{
+ COMPREPLY=($(compgen -W "$(${1:-rpm} --showrc | command sed -ne \
+ 's/^\s*compatible\s\s*build\s\s*archs\s*:\s*\(.*\)/\1/ p')" \
+ -- "$cur"))
+}
+
+# rpm(8) completion
+#
+_rpm()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ if ((cword == 1)); then
+ # first parameter on line
+ case $cur in
+ --*)
+ COMPREPLY=($(compgen -W '--help --version --initdb
+ --checksig --addsign --delsign --rebuilddb --showrc
+ --setperms --setugids --eval --install --upgrade --query
+ --freshen --erase --verify --querytags --import' \
+ -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W '-e -E -F -i -q -t -U -V' -- "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ case $prev in
+ --dbpath | --excludepath | --prefix | --relocate | --root | -!(-*)r)
+ _filedir -d
+ return
+ ;;
+ --eval | -!(-*)E)
+ _rpm_macros $1
+ return
+ ;;
+ --pipe)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --rcfile)
+ _filedir
+ return
+ ;;
+ --specfile)
+ # complete on .spec files
+ _filedir spec
+ return
+ ;;
+ --whatenhances | --whatprovides | --whatrecommends | --whatrequires | \
+ --whatsuggests | --whatsupplements)
+ if [[ $cur == */* ]]; then
+ _filedir
+ else
+ # complete on capabilities
+ local IFS=$'\n' fmt
+ case $prev in
+ *enhances) fmt="%{ENHANCENAME}" ;;
+ *provides) fmt="%{PROVIDENAME}" ;;
+ *recommends) fmt="%{RECOMMENDNAME}" ;;
+ *requires) fmt="%{REQUIRENAME}" ;;
+ *suggests) fmt="%{SUGGESTNAME}" ;;
+ *supplements) fmt="%{SUPPLEMENTNAME}" ;;
+ esac
+ COMPREPLY=($(compgen -W "$($1 -qa --nodigest --nosignature \
+ --queryformat=\"$fmt\\n\" 2>/dev/null |
+ command grep -vF '(none)')" -- "$cur"))
+ fi
+ return
+ ;;
+ --define | --fileid | --hdrid | --pkgid | -!(-*)D)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # options common to all modes
+ local opts="--define= --eval= --macros= --nodigest --nosignature --rcfile=
+ --quiet --pipe --verbose"
+
+ 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 --ftpproxy --ftpport --justdb --httpproxy --httpport
+ --noorder --relocate= --badreloc --notriggers --excludepath=
+ --ignoresize --oldpackage --queryformat --repackage
+ --nosuggests" -- "$cur"))
+ else
+ _filedir '[rs]pm'
+ fi
+ ;;
+ -e | --erase)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --allmatches --noscripts
+ --notriggers --nodeps --test --repackage" -- "$cur"))
+ else
+ _rpm_installed_packages $1
+ fi
+ ;;
+ -q* | --query)
+ # options common to all query types
+ opts+=" --changelog --configfiles --conflicts --docfiles --dump
+ --enhances --filesbypkg --filecaps --fileclass --filecolor
+ --fileprovide --filerequire --filesbypkg --info --list
+ --obsoletes --pipe --provides --queryformat= --requires
+ --scripts --suggests --triggers --xml --recommends
+ --supplements --filetriggers --licensefiles"
+
+ if [[ ${words[*]} == *\ -@(*([^ -])f|-file )* ]]; then
+ # -qf completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --dbpath --fscontext
+ --last --root --state" -- "$cur"))
+ else
+ _filedir
+ fi
+ elif [[ ${words[*]} == *\ -@(*([^ -])g|-group )* ]]; then
+ # -qg completion
+ _rpm_groups $1
+ elif [[ ${words[*]} == *\ -@(*([^ -])p|-package )* ]]; then
+ # -qp; uninstalled package completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --ftpport --ftpproxy
+ --httpport --httpproxy --nomanifest" -- "$cur"))
+ else
+ _filedir '[rs]pm'
+ fi
+ else
+ # -q; installed package completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --all --file --fileid
+ --dbpath --fscontext --ftswalk --group --hdrid --last
+ --package --pkgid --root= --specfile --state
+ --triggeredby --whatenhances --whatprovides
+ --whatrecommends --whatrequires --whatsuggests
+ --whatsupplements" \
+ -- "$cur"))
+ elif [[ ${words[*]} != *\ -@(*([^ -])a|-all )* ]]; then
+ _rpm_installed_packages $1
+ fi
+ fi
+ ;;
+ -K* | --checksig)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --nopgp --nogpg --nomd5" \
+ -- "$cur"))
+ else
+ _filedir '[rs]pm'
+ fi
+ ;;
+ -[Vy]* | --verify)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --root= --dbpath --nodeps
+ --nogroup --nolinkto --nomode --nomtime --nordev --nouser
+ --nofiles --noscripts --nomd5 --querytags --specfile
+ --whatenhances --whatprovides --whatrecommends
+ --whatrequires --whatsuggests --whatsupplements" \
+ -- "$cur"))
+ # check whether we're doing file completion
+ elif [[ ${words[*]} == *\ -@(*([^ -])f|-file )* ]]; then
+ _filedir
+ elif [[ ${words[*]} == *\ -@(*([^ -])g|-group )* ]]; then
+ _rpm_groups $1
+ elif [[ ${words[*]} == *\ -@(*([^ -])p|-package )* ]]; then
+ _filedir '[rs]pm'
+ else
+ _rpm_installed_packages $1
+ fi
+ ;;
+ --resign | --addsign | --delsign)
+ _filedir '[rs]pm'
+ ;;
+ --setperms | --setgids)
+ _rpm_installed_packages $1
+ ;;
+ --import | --dbpath | --root)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--import --dbpath --root=' \
+ -- "$cur"))
+ else
+ _filedir
+ fi
+ ;;
+ esac
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _rpm rpm
+
+_rpmbuild()
+{
+ 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 | --dbpath | -!(-*)r)
+ _filedir -d
+ return
+ ;;
+ --target)
+ _rpm_buildarchs $rpm
+ return
+ ;;
+ --eval | -!(-*)E)
+ _rpm_macros $rpm
+ return
+ ;;
+ --macros | --rcfile)
+ _filedir
+ return
+ ;;
+ --buildpolicy)
+ local cfgdir=$($rpm --eval '%{_rpmconfigdir}' 2>/dev/null)
+ if [[ $cfgdir ]]; then
+ COMPREPLY=($(compgen -W "$(command ls $cfgdir 2>/dev/null |
+ command sed -ne 's/^brp-//p')" -- "$cur"))
+ fi
+ ;;
+ --define | --with | --without | -!(-*)D)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1")" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ # Figure out file extensions to complete
+ local word ext
+ for word in "${words[@]}"; do
+ case $word in
+ -b? | --clean | --nobuild)
+ 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 _rpmbuild rpmbuild rpmbuild-md5
+
+# ex: filetype=sh