mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-25 13:31:12 +01:00
moved to Completion/Redhat/Command/_rpm
This commit is contained in:
parent
efb9b9f813
commit
7ff9c8a8bd
1 changed files with 0 additions and 278 deletions
|
@ -1,278 +0,0 @@
|
||||||
#compdef rpm
|
|
||||||
|
|
||||||
# This uses `_arguments' in a state-machine kind of way. These states
|
|
||||||
# have names and before executing the default action for such a state
|
|
||||||
# we try to call a function with the name `_rpm_<state>'. If such a
|
|
||||||
# function exists, we return with its return status immediately. This
|
|
||||||
# allows users to override the default completions by simply defining
|
|
||||||
# these functions.
|
|
||||||
# The states (and possible values for the `<state>' above) are:
|
|
||||||
#
|
|
||||||
# query
|
|
||||||
# complete for `rpm -q' query
|
|
||||||
# verify
|
|
||||||
# complete for `rpm --verify'
|
|
||||||
# install
|
|
||||||
# complete for `rpm -i' or `rpm --install'
|
|
||||||
# upgrade
|
|
||||||
# complete for `rpm -U' or `rpm --upgrade'
|
|
||||||
# uninstall
|
|
||||||
# complete for `rpm -e' or `rpm --erase'
|
|
||||||
# build_b
|
|
||||||
# complete for `rpm -bx' (the stage `x' is already completed)
|
|
||||||
# build_t
|
|
||||||
# complete for `rpm -tx' (the stage `x' is already completed)
|
|
||||||
# sigcheck
|
|
||||||
# complete for `rpm --sigcheck'
|
|
||||||
# rebuild
|
|
||||||
# complete for `rpm --rebuild'
|
|
||||||
# package
|
|
||||||
# complete a RPM package name
|
|
||||||
# package_file
|
|
||||||
# complete a RPM package file name
|
|
||||||
# package_or_file
|
|
||||||
# the previous two together
|
|
||||||
# tags
|
|
||||||
# complete a tag name
|
|
||||||
# capability
|
|
||||||
# complete a capability
|
|
||||||
# relocate
|
|
||||||
# complete a `old=new' pair of paths
|
|
||||||
|
|
||||||
# Used by `_arguments', made local here.
|
|
||||||
|
|
||||||
_rpm () {
|
|
||||||
local curcontext="$curcontext" state lstate line nm="$compstate[nmatches]"
|
|
||||||
typeset -A opt_args
|
|
||||||
|
|
||||||
state=''
|
|
||||||
|
|
||||||
local ret=1
|
|
||||||
local -a tmp expl commonopts packageopts
|
|
||||||
commonopts=(
|
|
||||||
'*-v[verbose mode]'
|
|
||||||
'--rcfile:resource file:_files'
|
|
||||||
'--ftpproxy:FTP proxy server:_hosts'
|
|
||||||
'--ftpport:FTP port number:'
|
|
||||||
'--httpproxy:HTTP proxy server:_hosts'
|
|
||||||
'--httpport:HTTP port number:'
|
|
||||||
)
|
|
||||||
packageopts=(
|
|
||||||
'-a[query all packages]'
|
|
||||||
'-p[query uninstalled package file]:*:RPM package file:->package_file'
|
|
||||||
'-f[specify file to query owner of]:file:_files'
|
|
||||||
'--triggeredby:RPM package:->package'
|
|
||||||
'--whatprovides:RPM capability:->capability'
|
|
||||||
'--whatrequires:RPM capability:->capability'
|
|
||||||
)
|
|
||||||
pathopts=(
|
|
||||||
'--root:RPM root directory:_files -/'
|
|
||||||
'--dbpath:RPM database path:_files -/'
|
|
||||||
)
|
|
||||||
|
|
||||||
# Do simple completions or get the first state.
|
|
||||||
|
|
||||||
_arguments -C -s \
|
|
||||||
'--help[print help message]' \
|
|
||||||
'--version[print version number]' \
|
|
||||||
"${commonopts[@]}" \
|
|
||||||
'-q+[query mode]:*:query:->query' \
|
|
||||||
--{querytags,initdb,showrc} \
|
|
||||||
'--pipe:pipe command:_command_names -e' \
|
|
||||||
-{V,y}'[verify mode]:*:verify:->verify' \
|
|
||||||
'--verify[verify mode]:*:verify:->verify' \
|
|
||||||
'--setperms[set file permissions]:*:package:->setattrs' \
|
|
||||||
'--setugids[set file owner/group]:*:package:->setattrs' \
|
|
||||||
'(--install)-i+[install mode]:*:install:->install' \
|
|
||||||
'(-i)--install:*:install:->install' \
|
|
||||||
'(--upgrade)-U+[upgrade mode]:*:upgrade:->upgrade' \
|
|
||||||
'(-U)--upgrade:*:upgrade:->upgrade' \
|
|
||||||
'(--freshen)-F+[freshen mode]:*:upgrade:->upgrade' \
|
|
||||||
'(-F)--freshen:*:upgrade:->upgrade' \
|
|
||||||
'(--erase)-e+[uninstall mode]:*:uninstall:->uninstall' \
|
|
||||||
'(-e)--erase:*:uninstall:->uninstall' \
|
|
||||||
'-b+[build mode (spec file)]:build stage:((p\:execute\ \%prep\ stage l\:do\ a\ list\ check c\:execute\ build\ stage i\:execute\ install\ stage b\:build\ a\ binary\ package a\:build\ binary\ and\ source\ packages)):*:build:->build_b' \
|
|
||||||
'(-b)-t+[build mode (tar file)]:build stage:((p\:execute\ \%prep\ stage l\:do\ a\ list\ check c\:execute\ build\ stage i\:execute\ install\ stage b\:build\ a\ binary\ package a\:build\ binary\ and\ source\ packages)):*:build:->build_t' \
|
|
||||||
--{resign,addsign}':*:RPM package:->package_file' \
|
|
||||||
'--rmsource:*:spec file:->spec_file' \
|
|
||||||
--{rebuild,recompile}':*:Src RPM files:->package_src' \
|
|
||||||
'(--checksig)-K+[signature check mode]:*:sigcheck:->sigcheck' \
|
|
||||||
'(-K)--checksig:*:sigcheck:->sigcheck' \
|
|
||||||
'--rebuilddb:*:rebuild:->rebuild' && ret=0
|
|
||||||
|
|
||||||
# As long as we have a state name...
|
|
||||||
|
|
||||||
while [[ -n "$state" ]]; do
|
|
||||||
|
|
||||||
# First try to call a user-defined function.
|
|
||||||
|
|
||||||
_funcall ret _rpm_$state && return ret
|
|
||||||
|
|
||||||
# Copy the state and reset `state', to simplify the test above.
|
|
||||||
|
|
||||||
lstate="$state"
|
|
||||||
state=''
|
|
||||||
tmp=()
|
|
||||||
|
|
||||||
# Dispatch...
|
|
||||||
|
|
||||||
case "$lstate" in
|
|
||||||
query)
|
|
||||||
# --dump requires on of -{l,c,d}
|
|
||||||
# --triggers requires --script
|
|
||||||
_arguments -s \
|
|
||||||
-q "${commonopts[@]}" "${packageopts[@]}" "${pathopts[@]}" \
|
|
||||||
'--queryformat:RPM query format:->tags' \
|
|
||||||
'-i[display package information]' \
|
|
||||||
'--changelog[display change log]' \
|
|
||||||
'-l[display package file list]' \
|
|
||||||
'-s[show file states]' \
|
|
||||||
'-d[documentation files only]' \
|
|
||||||
'-c[configuration files only]' \
|
|
||||||
'--dump[show all information]' \
|
|
||||||
--provides \
|
|
||||||
-{R,-requires}'[list dependencies]' \
|
|
||||||
'--scripts[show (un)install scripts]' \
|
|
||||||
'--triggers[show trigger scripts]' \
|
|
||||||
'*:RPM package:->package_or_file' && ret=0
|
|
||||||
;;
|
|
||||||
setattrs)
|
|
||||||
_arguments -s --set{perm,ugids} "${packageopts[@]}" && ret = 0
|
|
||||||
;;
|
|
||||||
verify)
|
|
||||||
_arguments -s \
|
|
||||||
'(-y --verify)-V' '(-V --verify)-y' '(-y -V)--verify' \
|
|
||||||
"${commonopts[@]}" "${pathopts[@]}" \
|
|
||||||
--no{deps,md5,files} \
|
|
||||||
'*:RPM package:->package' && ret=0
|
|
||||||
;;
|
|
||||||
upgrade)
|
|
||||||
tmp=( '(--upgrade)-U' '(-U)--upgrade' '(--force)--oldpackage' )
|
|
||||||
;&
|
|
||||||
install)
|
|
||||||
(( $#tmp )) || tmp=( '(--install)-i' '(-i)--install' )
|
|
||||||
_arguments -s "$tmp[@]" \
|
|
||||||
"${commonopts[@]}" "${pathopts[@]}" \
|
|
||||||
'--excludepath:exclude files in following path:_files -/' \
|
|
||||||
'--relocate:relocate:->relocate' \
|
|
||||||
'--prefix:package prefix directory:_files -/' \
|
|
||||||
'(-h)--hash' '(--hash)-h' \
|
|
||||||
'(--replacepkgs --replacefiles --oldpackage)--force' \
|
|
||||||
'(--force)--'{replacefiles,replacepkgs} \
|
|
||||||
--{badreloc,excludedocs,allfiles,ignorearch,ignoreos,includedocs,justdb,nodeps,noorder,noscripts,notriggers,percent,test} \
|
|
||||||
'*:pkg file:->package_file' && ret=0
|
|
||||||
;;
|
|
||||||
uninstall)
|
|
||||||
_arguments -s \
|
|
||||||
'(-e)--erase' '(--erase)-e' \
|
|
||||||
"${commonopts[@]}" "${pathopts[@]}" \
|
|
||||||
--{allmatches,justdb,nodeps,noorder,noscripts,notriggers} \
|
|
||||||
'*:RPM package:->package' && ret=0
|
|
||||||
;;
|
|
||||||
build_b)
|
|
||||||
tmp=( '*:spec file:_files -g \*.spec' )
|
|
||||||
;&
|
|
||||||
build_t)
|
|
||||||
(( $#tmp )) || tmp=( '*:tar file:_files -g \*.\(\#i\)tar\(.\*\|\)' )
|
|
||||||
|
|
||||||
_arguments -s \
|
|
||||||
"${commonopts[@]}" "${pathopts[@]}" \
|
|
||||||
--{short-circuit,clean,rmsource,sign,test} \
|
|
||||||
'--target:specify a build target:->target'\
|
|
||||||
'--buildroot:build root directory:_files -/' \
|
|
||||||
'--buildarch:architecture for which to build:->target' \
|
|
||||||
'--buildos:ositecture for which to build:' \
|
|
||||||
'--timecheck:time check (seconds):' "$tmp[1]" && ret=0
|
|
||||||
;;
|
|
||||||
sigcheck)
|
|
||||||
_arguments -s \
|
|
||||||
'(-K)--checksig' '(--checksig)-K' \
|
|
||||||
"${commonopts[@]}" \
|
|
||||||
--no{pgp,md5} \
|
|
||||||
'*:RPM package file:->package_file' && ret=0
|
|
||||||
;;
|
|
||||||
rebuild)
|
|
||||||
_arguments -s \
|
|
||||||
"${commonopts[@]}" "${pathopts[@]}" \
|
|
||||||
'*:RPM source package file:->package_file' && ret=0
|
|
||||||
;;
|
|
||||||
target)
|
|
||||||
_wanted target expl 'Target platforms' \
|
|
||||||
compadd $(_call target rpm --showrc 2> /dev/null |grep 'compatible archs'|sed 's/.*: //') && ret=0
|
|
||||||
;;
|
|
||||||
package_or_file)
|
|
||||||
state=package_file
|
|
||||||
;&
|
|
||||||
package)
|
|
||||||
if ( [[ ${+_rpms} -eq 0 ]] || _cache_invalid RPMs ) &&
|
|
||||||
! _retrieve_cache RPMs;
|
|
||||||
then
|
|
||||||
_rpms=( $(_call packages rpm -qa 2>/dev/null) )
|
|
||||||
_store_cache RPMs _rpms
|
|
||||||
fi
|
|
||||||
_wanted packages expl 'RPM package' \
|
|
||||||
compadd -M 'r:|-=* r:|=*' - "$_rpms[@]" && ret=0
|
|
||||||
;;
|
|
||||||
spec_file)
|
|
||||||
_wanted specfiles expl 'spec file' \
|
|
||||||
_files -g \*.spec && ret=0
|
|
||||||
;;
|
|
||||||
package_file)
|
|
||||||
_wanted files expl 'RPM package file' \
|
|
||||||
_files -g '*.(#i)rpm' && ret=0
|
|
||||||
if [[ -prefix 1 (f|ht)tp:// ]]; then
|
|
||||||
_wanted urls expl 'URL of RPM package file' \
|
|
||||||
_urls -f -g '*.(#i)rpm' "${expl[@]}" && ret=0
|
|
||||||
else
|
|
||||||
_wanted urls expl 'URL of RPM package file' \
|
|
||||||
compadd -S '' "${expl[@]}" ftp:// http:// && ret=0
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
package_src)
|
|
||||||
_files -g \*.src\(\#i\).rpm
|
|
||||||
;&
|
|
||||||
tags)
|
|
||||||
if compset -P '*%*\{'; then
|
|
||||||
_wanted tags expl 'RPM tag' \
|
|
||||||
compadd -M 'm:{a-z}={A-Z}' -S '\}' - \
|
|
||||||
"${(@)${(@f)$(_call tags rpm --querytags 2> /dev/null)}#RPMTAG_}" && ret=0
|
|
||||||
else
|
|
||||||
_message 'RPM format'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
capability)
|
|
||||||
_message 'RPM capability'
|
|
||||||
;;
|
|
||||||
relocate)
|
|
||||||
if compset -P '*='; then
|
|
||||||
_description directories expl 'new path'
|
|
||||||
else
|
|
||||||
_description directories expl 'old path'
|
|
||||||
fi
|
|
||||||
|
|
||||||
_files "$expl[@]" -/ && ret=0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
[[ ret -eq 0 || $nm -ne $compstate[nmatches] ]] && return 0
|
|
||||||
done
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
# set a sensible default caching policy
|
|
||||||
local update_policy
|
|
||||||
zstyle -s ":completion:*:*:rpm:*" cache-policy update_policy
|
|
||||||
if [[ -z "$update_policy" ]]; then
|
|
||||||
zstyle ":completion:*:*:rpm:*" cache-policy _rpms_caching_policy
|
|
||||||
fi
|
|
||||||
|
|
||||||
_rpms_caching_policy () {
|
|
||||||
# rebuild if cache is more than a week old
|
|
||||||
oldp=( "$1"(mw+1) )
|
|
||||||
(( $#oldp )) && return 0
|
|
||||||
|
|
||||||
[[ /var/lib/rpm/packages.rpm -nt "$1" ]]
|
|
||||||
}
|
|
||||||
|
|
||||||
_rpm "$@"
|
|
Loading…
Reference in a new issue