#compdef emerge ebuild quickpkg emaint env-update portageq repoman tbz2tool # Already done: # emerge (fully done) # ebuild (fully done) # emaint (fully done) # env-update (fully done) # portageq (fully done) # repoman (fully done) # tbz2tool (fully done) # # Still TODO: # xpak # Stuff for ebuild _ebuild () { if (( CURRENT == 2 ));then _files -g \*.ebuild elif (( CURRENT > 2 ));then _values "ebuild command" \ 'clean[Cleans the temporary build directory]' \ 'help[Show help]' \ 'setup[Run all package specific setup actions and exotic system checks.]' \ 'fetch[Fetch all necessary files]' \ 'digest[Creates a digest file for the package]' \ 'unpack[Extracts the sources to a subdirectory in the build directory]' \ 'compile[Compiles the extracted sources by running the src_compile()]' \ 'preinst[Run specific actions that need to be done before installation]' \ 'install[Installs the package to the temporary install directory]' \ 'postinst[Run specific actions that need to be done after installation]' \ 'qmerge[Installs the package de the filesystem]' \ 'merge[perform the following actions: fetch, unpack, compile, install and qmerge.]' \ 'unmerge[Remove the installed files of the packages]' \ 'prerm[Run specific actions that need to be executed before unmerge]' \ 'postrm[Run specific actions that need to be executed after unmerge]' \ 'config[Run specific actions needed to be executed after the emerge process has completed.]' \ 'package[This command is a lot like the merge command, but create a .tbz2 package]' \ 'manifest[Updates the manifest file for the package.]' \ 'rpm[Builds a RedHat RPM package]' fi } # Stuff for quickpkg _quickpkg () { if compset -P '(\\|)(>=|<=|<|>|=)'; then _arguments -s \ '*:installed package:_gentoo_packages installed_versions' elif compset -P '(\\|)[/]'; then _path_files -W / -/ else _arguments \ '*:installed package:_gentoo_packages installed' fi } # Stuff for emerge _emerge () { local nopkg_opts all noask_opts bopts install_args common_args profiles noask_opts=(-p -a --pretend --ask --regen --info --search -s --searchdesc \ -S --version -V --help -h --metadata --check-news) nopkg_opts=(--resume --skipfirst -c --clean -h --help --depclean --info \ --metadata -P --prune --regen -s --search -S --searchdesc --sync -C \ --unmerge -V --version -i --inject --list-sets --deselect --check-news) bopts=($nopkg_opts -b --buildpkg -B --buildpkgonly -G --getbinpkgonly -g \ --getbinpkg -k --usepkg -K --usepkgonly --fetch-all-uri -f -F --fetchonly) all=($bopts -l --changelog --columns --deep -D --emptytree -e --newuse \ --noconfmem --nodeps -O --noreplace -n --oneshot -1 -o --onlydeps --tree -t \ -u --update -U --upgradeonly --config) common_args=( "($noask_opts --sync)"{-p,--pretend}"[Simply display what would be done]" "($noask_opts)"{-a,--ask}"[Ask what would be done]" '(-d --debug --help -h --version -V)'{-d,--debug}'[Tells emerge to run the emerge command in debug mode]' '(--quiet -q --verbose -v)'{-q,--quiet}'[General outcome is a reduced or condensed output]' '(--verbose -v --quiet -q)'{-v,--verbose}'[Tell emerge to run in verbose mode]' '--nospinner[Disables the spinner for the session]' '(: -)'{-h,--help}'[Displays help]' "(: -)--config[Run package specific actions needed to be executed after the emerge process has completed]:installed atom:_gentoo_packages installed" "(: -)--list-sets[Displays a list of available package sets]" "--color=[Color output]:yes/no:((y\:'yes' n\:'no'))" "--accept-properties=[Temporarily override the ACCEPT_PROPERTIES variable]" "--accept-restrict=[Temporarily override the ACCEPT_RESTRICT variable]" "($noask_opts)"{-A,--alert=}"[Add a terminal bell to all interactive prompts]:yes/no:((y\:'yes' n\:'no'))" "--ignore-default-opts[Ignore EMERGE_DEFAULT_OPTS]" "--moo[Have you mooed today?]" ) install_args=( '--deselect=[Remove atom from world file]:yes/no:((y\:'yes' n\:'no'))' "--alphabetical[Sort use/other flags output alphabetically despite of status]" "--ask-enter-invalid[When with --ask, interpret a single 'Enter' key press as invalid input]" "--autounmask[Automatically unmask packages and generate package.use]:yes/no:((y\:'yes' n\:'no'))" "--autounmask-unrestricted-atoms[Use >= for autounmask if possible]:yes/no:((y\:'yes' n\:'no'))" "--autounmask-keep-masks[Don't unmask hardmasks and unkeyworded (live)]:yes/no:((y\:'yes' n\:'no'))" "--autounmask-write[Automatically write autounmask changes (respect CONFIG_PROTECT)]:yes/no:((y\:'yes' n\:'no'))" "--backtrack=[Number of times to backtrack if dependency calculation fails]:number:(0 10 30)" "--binpkg-respect-use=[Ignore binary packages if their uses don't match current config]:yes/no:((y\:'yes' n\:'no'))" "--complete-graph=[Consider the deep dependencies of all packages from the world set]:yes/no:((y\:'yes' n\:'no'))" "--complete-graph-if-new-use=[--complete-graph if USE or IUSE will change for an installed package]:yes/no:((y\:'yes' n\:'no'))" "--complete-graph-if-new-ver=[--complete-graph if an installed package version will change]:yes/no:((y\:'yes' n\:'no'))" "--config-root=[Set PORTAGE_CONFIGROOT variable]:root path:_files -/" "--depclean-lib-check=[Check library link-level dependencies]:yes/no:((y\:'yes' n\:'no'))" "--digest[Prevent corruption from being noticed]" "--dynamic-deps=[Substitute the dependencies of installed packages with the dependencies of corresponding unbuilt ebuilds]:yes/no:((y\:'yes' n\:'no'))" "--fail-clean=[Clean up temporary files after a build failure]:yes/no:((y\:'yes' n\:'no'))" "--ignore-built-slot-operator-deps=[Ignore the slot/sub-slot dependencies for built pkg]:yes/no:((y\:'yes' n\:'no'))" "(: $nopkg_opts)"{-j,--jobs=}"[Number of packages to build simultaneously]:jobs:({1.."${#${$(=|<=|<|>|=)'; then _arguments -s \ '*:installed package:_gentoo_packages installed_versions' && return 0 else _arguments -s \ "$common_args[@]" "$install_args[@]" \ "*:installed package:_gentoo_packages installed" \ "::installed sets:_gentoo_packages installed_sets" \ && return 0 fi elif (( $words[(I)(world|system)] )) ; then _arguments -s \ "$common_args[@]" "$install_args[@]" \ "($nopkg_opts[1,-2] --inject -i --oneshot -1):" && return 0 elif (( $words[(I)(--usepkgonly|-[[:alnum:]]#K[[:alnum:]]#)] )) ; then _arguments -s \ "$common_args[@]" "$install_args[@]" \ '*:binary package:_gentoo_packages binary' && return 0 else if compset -P '(\\|)(>=|<=|<|>|=)'; then _arguments \ "*:portage:_gentoo_packages available_versions" && return 0 elif (( $words[(I)(--inject|-i)] )) ; then _arguments -s \ "$common_args[@]" "$install_args[@]" \ "*:portage:_gentoo_packages available_versions" && return 0 else _arguments -s \ "$common_args[@]" "$install_args[@]" \ "($nopkg_opts)::portage: _values 'profile' \$profiles[@] " \ "($nopkg_opts)*:portage:_gentoo_packages available" \ "($nopkg_opts)::available sets:_gentoo_packages available_sets" \ && return 0 fi fi } _emaint () { _arguments -s \ "(: -)"{-h,--help}'[show help message and exit]' \ "(: -)"--version"[show program's version number and exit]" \ '(-c --check -f --fix)'{-c,--check}"[Check for any problems that may exist]:emaint:((all\:'check all' world\:'check only world file'))" \ '(-c --check -f --fix)'{-f,--fix}"[Fix any problems that may exist]:emaint:((all\:'check all' world\:'check only world file'))" } _env-update () { _arguments -s '(: -)--no-ldconfig[Do not run ldconfig]' } _portageq () { local action action="$words[2]" if (( CURRENT == 2 )); then _values 'command' \ '--help[Show help]' \ 'config_protect_mask[Returns the CONFIG_PROTECT_MASK paths]' \ 'config_protect[Returns the CONFIG_PROTECT paths]' \ 'portdir[Returns PORTDIR paths]' \ 'contents[List the files that are installed for a given package]' \ 'vdb_path[Returns the path used for the var(installed) package database]' \ 'gentoo_mirrors[Returns the mirrors set to use in the portage configuration]' \ 'exithandler[MISSING DOCUMENTATION!]' \ 'all_best_visible[Returns all best_visible packages (without .ebuild)]' \ 'match[Returns a \n separated list of category/package-version]' \ 'metadata[Returns metadata values for the specified package]' \ 'best_visible[Returns category/package-version (without .ebuild)]' \ 'mass_best_visible[Returns category/package-version (without .ebuild)]' \ "has_version[Return code 0 if it's available, 1 otherwise]" \ 'envvar[Returns a specific environment variable as exists prior to ebuild.sh]' \ 'pkgdir[Returns the PKGDIR path]' \ 'best_version[Returns category/package-version (without .ebuild)]' \ 'mass_best_version[Returns category/package-version (without .ebuild)]' \ 'portdir_overlay[Returns the PORTDIR_OVERLAY path]' \ 'distdir[Returns the DISTDIR path]' \ 'owners[print the packages that own the files and which files belong to each package]' elif (( CURRENT == 3 )); then if [[ "$action" =~ (contents|(all_|mass_|)best_visible|match|metadata|(has|best)_version|owners|mass_best_version) ]]; then _arguments -s '*:root:_files -g /' fi elif (( CURRENT > 3 )); then if [[ "$action" =~ ((mass_|)best_(visible|version)|has_version) ]]; then _arguments -s '*:package:_gentoo_packages available' elif [[ "$action" == owners ]]; then _arguments -s '*:root:_files' fi fi } _repoman () { local previous previous="$words[CURRENT-1]" _arguments -s \ '(--force)'--force'[Force commit to proceed, regardless of QA issues]' \ '(-q --quiet -v --verbose)'{-q,--quiet}'[Be less verbose about extraneous info]' \ '(-p --pretend -m --commitmsg -M --commitmsgfile)'{-p,--pretend}'[Don’t commit or fix anything; just show what would be done]' \ '(-i --include-masked)'{-i,--include-masked}'[Include masked packages in scans at category or tree level]' \ '(-x --xmlparse)'{-x,--xmlparse}'[Forces the metadata.xml parse check to be carried out]' \ '(-q --quiet -v --verbose)'{-v,--verbose}'[Displays every package name while checking]' \ '(-I --ignore-arches)'{-I,--ignore-arches}'[Ignore arch-specific failures (where arch != host)]' \ '(-m --commitmsg -M --commitmsgfile)'{-m,--commitmsg}'[Adds a commit message via the command line]:message:' \ '(-m --commitmsg -M --commitmsgfile)'{-M,--commitmsgfile}'[Adds a commit message from the specified file]:commit_file:_files' \ '(: -)'{-V,--version}'[Show version info]' \ '(: -)'{-h,--help}'[Show this screen]' # if we don't have an option that cancel action, or if we don't already have an action. if ! [[ "$previous" =~ (-h|-V|-m|-M|--version|--help|--commitmsg|--commitmsgfile) ]] && ! (( $words[(I)(full|last|help|scan|fix|lfull|manifest|commit)] )); then _values 'action' \ 'full[Scan directory tree for QA issues (full listing)]' \ 'last[Remember report from last run]' \ 'help[Show this screen]' \ 'scan[Scan directory tree for QA issues (short listing)]' \ 'fix[Fix simple QA issues (stray digests, missing digests)]' \ 'lfull[Remember report from last run (full listing)]' \ 'manifest[Generate a Manifest (fetches files if necessary)]' \ 'commit[Scan directory tree for QA issues; if OK, commit via cvs]' fi } _tbz2tool () { if (( CURRENT == 2 )); then _values 'action' 'join' 'split' elif (( CURRENT > 2 )) && (( CURRENT < 6 )); then _arguments -s '*:file:_files' fi } zparseopts -D -E -A Args -- -emerge if (( ${+Args[--emerge]} ));then _emerge "$@" && return 0 fi case "$service" in emerge) _emerge "$@" && return 0 ;; ebuild) _ebuild "$@" && return 0 ;; quickpkg) _quickpkg "$@" && return 0 ;; emaint) _emaint "$@" && return 0 ;; env-update) _env-update "$@" && return 0 ;; portageq) _portageq "$@" && return 0 ;; repoman) _repoman "$@" && return 0 ;; tbz2tool) _tbz2tool "$@" && return 0 ;; esac