diff options
Diffstat (limited to 'src/_portage_utils')
-rw-r--r-- | src/_portage_utils | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/src/_portage_utils b/src/_portage_utils new file mode 100644 index 0000000..dbb45d6 --- /dev/null +++ b/src/_portage_utils @@ -0,0 +1,270 @@ +#compdef qatom qcache qcheck qdepends qfile qgrep qlist qlop qpkg qsearch qsize qtbz2 quse qxpak + +# portage-utils-0.53 + + +_portdir() { + local mainreponame mainrepopath overlayname overlaypath + + if [[ -e /usr/share/portage/config/repos.conf ]]; then + if [[ ${1} == -o ]]; then + for overlayname in $(_parsereposconf -l); do + overlaypath+=($(_parsereposconf ${overlayname} location)) + done + + source /etc/make.conf 2>/dev/null + source /etc/portage/make.conf 2>/dev/null + + overlaypath+=(${PORTDIR_OVERLAY}) + + # strip out duplicates + overlaypath=($(printf "%s\n" "${overlaypath[@]}" | sort -u)) + + echo "${overlaypath[@]}" + else + mainreponame=$(_parsereposconf DEFAULT main-repo) + mainrepopath=$(_parsereposconf ${mainreponame} location) + + echo "${mainrepopath}" + fi + else + source /usr/share/portage/config/make.globals 2>/dev/null + source /etc/make.conf 2>/dev/null + source /etc/portage/make.conf 2>/dev/null + + echo "${PORTDIR}" + + if [[ ${1} == -o ]]; then⋅ + echo "${PORTDIR_OVERLAY}" + fi⋅⋅⋅ + fi +} + +_parsereposconf() { + local f insection line section v value var + + for f in /usr/share/portage/config/repos.conf \ + /etc/portage/repos.conf \ + /etc/portage/repos.conf/*.conf; do + + [[ -f ${f} ]] || continue + insection=0 + + while read -r line; do + # skip comments and blank lines + [[ -z ${line} || ${line} == '#'* ]] && continue + + if [[ ${insection} == 1 && ${line} == '['*']' ]]; then + # End of the section we were interested in so stop + secname+=(${line//[(\[|\])]/}) # record name for -l + break + elif [[ ${line} == '['*']' ]]; then + # Entering a new section, check if it's the one we want + section=${line//[(\[|\])]/} + [[ ${section} == "${1}" ]] && insection=1 + secname+=(${section}) # record name for -l + elif [[ ${insection} == 1 ]]; then + # We're in the section we want, grab the values + var=${line%%=*} + var=${var// /} + value=${line#*=} + value=${value# } + [[ ${var} == ${2} ]] && v=${value} + fi + continue + done < "${f}" + done + + if [[ ${1} == -l ]]; then + echo "${secname[@]}" + else + echo "${v}" + fi +} + + +local common_args PORTDIR + +PORTDIR="$(_portdir)" + +common_args=( + '--root[Set the ROOT env var]:root directory:_files -/' \ + {'(--verbose)-v','(-v)--verbose'}'[Make a lot of noise]' \ + {'(--quiet)-q','(-q)--quiet'}'[Tighter output; suppress warnings]' \ + {'(--nocolor)-C','(-C)--nocolor'}'[Do not output color]' \ + {'(--help)-h','(-h)--help'}'[Print this help and exit]' \ + {'(--version)-V','(-V)--version'}'[Print version and exit]' \ +) + +case $service in + qatom) + _arguments -s $common_args \ + {'(--compare)-c','(-c)--compare'}'[Compare two atoms]' + ;; + qcache) + local arch + local -a arches allarches + + show_archs(){ + arches=(${(f)"$(<$PORTDIR/profiles/arch.list)"}) + for arch in $arches; do + [[ $arch =~ '^[^#]' ]] && allarches+=( $arch ) + done + _describe -t available-arches "arch" allarches + } + + _arguments -s $common_args \ + {'(--matchpkg)-p','(-p)--matchpkg'}'[match pkgname]:package name:_gentoo_packages available_pkgnames_only' \ + {'(--matchcat)-c','(-c)--matchcat'}'[match catname]:category:_gentoo_packages category' \ + {'(--imlate)-i','(-i)--imlate'}'[list packages that can be marked stable on a given arch]' \ + {'(--dropped)-d','(-d)--dropped'}'[list packages that have dropped keywords on a version bump on a given arch]' \ + {'(--testing)-t','(-t)--testing'}'[list packages that have ~arch versions, but no stable versions on a given arch]' \ + {'(--stats)-s','(-s)--stats'}'[display statistics about the portage tree]' \ + {'(--all)-a','(-a)--all'}'[list packages that have at least one version keyworded for on a given arch]' \ + {'(--not)-n','(-n)--not'}"[list packages that aren't keyworded on a given arch]" \ + '*:arch:show_archs' + ;; + qcheck) + _arguments -s $common_args \ + {'(--all)-a','(-a)--all'}'[List all packages]' \ + {'(--exact)-e','(-e)--exact'}'[Exact match (only CAT/PN or PN without PV)]' \ + {'(--skip)-s','(-s)--skip'}'[Ignore files matching regular expression]:regex' \ + {'(--update)-u','(-u)--update'}'[Update missing files, chksum and mtimes for packages]' \ + {'(--noafk)-A','(-A)--noafk'}'[Ignore missing files]' \ + {'(--badonly)-B','(-B)--badonly'}'[Only print pkgs containing bad files]' \ + {'(--nohash)-H','(-H)--nohash'}'[Ignore differing/unknown file chksums]' \ + {'(--nomtime)-T','(-T)--nomtime'}'[Ignore differing file mtimes]' \ + '--skip-protected[Ignore files in CONFIG_PROTECT-ed paths]' \ + {'(--prelink)-p','(-p)--prelink'}'[Undo prelink when calculating checksums]' \ + '*:packages:_gentoo_packages installed' + ;; + qdepends) + _arguments -s $common_args \ + {'(--depend)-d','(-d)--depend'}'[Show DEPEND info (default)]' \ + {'(--rdepend)-r','(-r)--rdepend'}'[Show RDEPEND info]' \ + {'(--pdepend)-p','(-p)--pdepend'}'[Show PDEPEND info]' \ + {'(--key)-k','(-k)--key'}'[User defined vdb key]:vdb key' \ + {'(--query)-Q','(-Q)--query'}'[Query reverse deps]' \ + {'(--name-only)-N','(-N)--name-only'}'[Only show package name]' \ + {'(--all)-a','(-a)--all'}'[Show all DEPEND info]' \ + {'(--format)-f','(-f)--format'}'[Pretty format specified depend strings]' \ + '*:packages:_gentoo_packages installed' + ;; + qfile) + _arguments -s $common_args \ + {'(--slots)-S','(-S)--slots'}'[Display installed packages with slots]' \ + {'(--root-prefix)-R','(-R)--root-prefix'}'[Assume arguments are already prefixed by $ROOT]' \ + {'(--from)-f','(-f)--from'}'[Read arguments from file <arg> ("-" for stdin)]' \ + {'(--max-args)-m','(-m)--max-args'}'[Treat from file arguments by groups of <arg> (defaults to 5000)]:number' \ + {'(--basename)-b','(-b)--basename'}'[Match any component of the path]' \ + {'(--orphans)-o','(-o)--orphans'}'[List orphan files]' \ + {'(--exclude)-x','(-x)--exclude'}"[Don't look in package <arg> (used with --orphans)]:package:_gentoo_packages installed" \ + {'(--exact)-e','(-e)--exact'}'[Exact match (used with --exclude)]' \ + '*:filename:_files' + ;; + qgrep) + _arguments -s $common_args \ + {'(--invert-match)-I','(-I)--invert-match'}'[Select non-matching lines]' \ + {'(--ignore-case)-i','(-i)--ignore-case'}'[Ignore case distinctions]' \ + {'(--with-filename)-H','(-H)--with-filename'}'[Print the filename for each match]' \ + {'(--with-name)-N','(-N)--with-name'}'[Print the package or eclass name for each match]' \ + {'(--count)-c','(-c)--count'}'[Only print a count of matching lines per FILE]' \ + {'(--list)-l','(-l)--list'}'[Only print FILE names containing matches]' \ + {'(--invert-list)-L','(-L)--invert-list'}'[Only print FILE names containing no match]' \ + {'(--regexp)-e','(-e)--regexp'}'[Use PATTERN as a regular expression]' \ + {'(--extended)-x','(-x)--extended'}'[Use PATTERN as an extended regular expression]' \ + {'(--installed)-J','(-J)--installed'}'[Search in installed ebuilds instead of the tree]' \ + {'(--eclass)-E','(-E)--eclass'}'[Search in eclasses instead of ebuilds]' \ + {'(--skip-comments)-s','(-s)--skip-comments'}'[Skip comments lines]' \ + {'(--skip)-S','(-S)--skip'}'[Skip lines matching <arg>]:pattern' \ + {'(--before)-B','(-B)--before'}'[Print <arg> lines of leading context]:number' \ + {'(--after)-A','(-A)--after'}'[Print <arg> lines of trailing context]:number' \ + '*:pattern::' + ;; + qlist) + _arguments -s $common_args \ + {'(--installed)-I','(-I)--installed'}'[Just show installed packages]' \ + {'(--slots)-S','(-S)--slots'}'[Display installed packages with slots]' \ + {'(--repo)-R','(-R)--repo'}'[Display installed packages with repository]' \ + {'(--umap)-U','(-U)--umap'}'[Display installed packages with flags used]' \ + {'(--columns)-c','(-c)--columns'}'[Display column view]' \ + '--show-debug[Show /usr/lib/debug files]' \ + {'(--exact)-e','(-e)--exact'}'[Exact match (only CAT/PN or PN without PV)]' \ + {'(--all)-a','(-a)--all'}'[Show every installed package]' \ + {'(--dir)-d','(-d)--dir'}'[Only show directories]' \ + {'(--obj)-o','(-o)--obj'}'[Only show objects]' \ + {'(--sym)-s','(-s)--sym'}'[Only show symlinks]' \ + '*:packages:_gentoo_packages installed' + ;; + qlop) + _arguments -s $common_args \ + {'(--gauge)-g','(-g)--gauge'}'[Gauge number of times a package has been merged]' \ + {'(--time)-t','(-t)--time'}'[Calculate merge time for a specific package]' \ + {'(--human)-H','(-H)--human'}'[Print seconds in human readable format (needs -t)]' \ + {'(--list)-l','(-l)--list'}'[Show merge history]' \ + {'(--unlist)-u','(-u)--unlist'}'[Show unmerge history]' \ + {'(--sync)-s','(-s)--sync'}'[Show sync history]' \ + {'(--current)-c','(-c)--current'}'[Show current emerging packages]' \ + {'(--logfile)-f','(-f)--logfile'}'[Read emerge logfile instead of /var/log/emerge.log]:log:_files' \ + '*:packages:_gentoo_packages available' + ;; + qsearch) + _arguments -s $common_args \ + {'(--all)-a','(-a)--all'}'[List the descriptions of every package in the cache]' \ + {'(--cache)-c','(-c)--cache'}'[Use the portage cache]' \ + {'(--ebuilds)-e','(-e)--ebuilds'}'[Use the portage ebuild tree]' \ + {'(--search)-s','(-s)--search'}'[Regex search package basenames]' \ + {'(--desc)-S','(-S)--desc'}'[Regex search package descriptions]' \ + {'(--name-only)-N','(-N)--name-only'}'[Only show package name]' \ + {'(--homepage)-H','(-H)--homepage'}'[Show homepage info]' \ + '*:pattern::' + ;; + qsize) + _arguments -s $common_args \ + {'(--filesystem)-f','(-f)--filesystem'}'[Show size used on disk]' \ + {'(--all)-a','(-a)--all'}'[Size all installed packages]' \ + {'(--sum)-s','(-s)--sum'}'[Include a summary]' \ + {'(--sum-only)-S','(-S)--sum-only'}'[Show just the summary]' \ + {'(--megabytes)-m','(-m)--megabytes'}'[Display size in megabytes]' \ + {'(--kilobytes)-k','(-k)--kilobytes'}'[Display size in kilobytes]' \ + {'(--bytes)-b','(-b)--bytes'}'[Display size in bytes]' \ + {'(--ignore)-i','(-i)--ignore'}'[Ignore regexp string]:pattern' \ + '*:packages:_gentoo_packages installed' + ;; + quse) + _arguments -s $common_args \ + {'(--exact)-e','(-e)--exact'}'[Show exact non regexp matching using strcmp]' \ + {'(--all)-a','(-a)--all'}'[Show annoying things in IUSE]' \ + {'(--keywords)-K','(-K)--keywords'}'[Use the KEYWORDS vs IUSE]' \ + {'(--license)-L','(-L)--license'}'[Use the LICENSE vs IUSE]' \ + {'(--describe)-D','(-D)--describe'}'[Describe the USE flag]' \ + {'(--format)-F','(-F)--format'}'[Use your own variable formats: -F NAME=]:format' \ + {'(--name-only)-N','(-N)--name-only'}'[Only show package name]' \ + '*:use flag:_gentoo_packages useflag' + ;; + qtbz2) + _arguments -s $common_args \ + {'(--dir)-d','(-d)--dir'}'[Change to specified directory]:directory:_files -/' \ + {'(--join)-j','(-j)--join'}'[Join tar.bz2 + xpak into a tbz2]:*:tar.bz2 file and xpak file:_files -g \*.\(tar.bz2\|xpak\)' \ + {'(--split)-s','(-s)--split'}'[Split a tbz2 into a tar.bz2 + xpak]:tbz2 file:_files -g \*.tbz2' \ + {'(--tarbz2)-t','(-t)--tarbz2'}'[Just split the tar.bz2]:tbz2 file:_files -g \*.tbz2' \ + {'(--xpak)-x','(-x)--xpak'}'[Just split the xpak]:tbz2 file:_files -g \*.tbz2' \ + {'(--stdout)-O','(-O)--stdout'}'[Write files to stdout]' + ;; + qpkg) + _arguments -s $common_args \ + {'(--clean)-c','(-c)--clean'}'[clean pkgdir of unused binary files]' \ + {'(--eclean)-E','(-E)--eclean'}'[clean pkgdir of files not in the tree anymore (slow)]' \ + {'(--pretend)-p','(-p)--pretend'}'[pretend only]' \ + {'(--pkgdir)-P','(-P)--pkgdir'}'[alternate package directory]:alternate pkgdir:_files -/' \ + '*:Installed packages:_gentoo_packages installed_versions' + ;; + qxpak) + _arguments -s $common_args \ + {'(--list)-l','(-l)--list'}'[List the contents of an archive]:xpak archive:_files -g \*.xpak' \ + {'(--extract)-x','(-x)--extract'}'[Extract the contents of an archive]:xpak archive:_files -g \*.xpak' \ + {'(--create)-c','(-c)--create'}'[Create an archive of a directory/files]:*:archive name and files to archive:_files' \ + {'(--dir)-d','(-d)--dir'}'[Change to specified directory]:directory:_files -/' \ + {'(--stdout)-O','(-O)--stdout'}'[Write files to stdout]' + ;; +esac |