mirror of
https://github.com/Gator96100/ProxSpace.git
synced 2025-01-09 20:33:34 -08:00
303 lines
10 KiB
Bash
303 lines
10 KiB
Bash
# 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
|