diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2005-11-06 17:45:11 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2005-11-06 17:45:11 +0000 |
commit | 78ace07e1604b4ffd990fea3066a9cfa2c6c5669 (patch) | |
tree | 4f95e14ecb21ca320cf85a8617bcbdd5ba85d8cb | |
parent | 67c4c4efa648bfe50866fac1a0f2b9e0c3fb003a (diff) | |
download | zsh-78ace07e1604b4ffd990fea3066a9cfa2c6c5669.tar.gz zsh-78ace07e1604b4ffd990fea3066a9cfa2c6c5669.tar.xz zsh-78ace07e1604b4ffd990fea3066a9cfa2c6c5669.zip |
Scott Murray: users/9648: new _yum completion
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Completion/Redhat/Command/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Redhat/Command/_yum | 269 |
3 files changed, 276 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 8b7b68e84..d033848e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-06 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * Scott Murray <semurray@ntlworld.com>: users/9648: + Completion/Redhat/Command/_yum, + Completion/Redhat/Command/.distfiles: new yum completion. + 2005-11-05 Clint Adams <clint@zsh.org> * 21987: Completion/Unix/Command/_cplay: completion for diff --git a/Completion/Redhat/Command/.distfiles b/Completion/Redhat/Command/.distfiles index 0f0981d4e..9f0a3ef6a 100644 --- a/Completion/Redhat/Command/.distfiles +++ b/Completion/Redhat/Command/.distfiles @@ -2,4 +2,5 @@ DISTFILES_SRC=' .distfiles _rpm _service +_yum ' diff --git a/Completion/Redhat/Command/_yum b/Completion/Redhat/Command/_yum new file mode 100644 index 000000000..632cd0a0d --- /dev/null +++ b/Completion/Redhat/Command/_yum @@ -0,0 +1,269 @@ +#compdef yum + +# Main dispatcher +_yum() +{ + local curcontext="$curcontext" state lstate line + + local comp_num='compadd "$expl[@]" -S0 -r "0-9" - ""' + + _arguments -s \ + {-h,--help}'[show the help message]' \ + {-t,--tolerant}'[be tolerant of errors]' \ + '-C[Run entirely from cache]' \ + '-c[Config file location]:Yum conf file:_files' \ + '-R[Maximum command wait time (in minutes)]:Max wait time' \ + '-d[Debug level (0-10)]:Debug level' \ + '-e[Error level (0-10)]:Error level' \ + '-y[Answer yes for all questions]' \ + '--installroot=[Set install root]:Install Root:_files -/' \ + '--enablerepo=[Enable or or more repositories]:Repos to enable' \ + '--disablerepo=[Disable one or more repositories]:Disable Repos' \ + '--exclude=[Exclude package(s) by name or glob]:Exclude Repos' \ + '--version[Show yum version]' \ + '--obseletes[Enable obsoletes processing during updates]' \ + '--noplugins[Disable yum plugins]' \ + '*::yum command:_yum_command' +} + +(( $+functions[_yum_command] )) || _yum_command() +{ + local -a _yum_cmds + _yum_cmds=( + "install:Install the latest version of a package or group of packages" + "erase:Remove an installed package (with its dependencies)" + "remove:Remove an installed package (with its dependencies)" + "clean:Clean local yum cache" + "deplist:Gives a list of all dependencies for a package" + "check-update:Check if any updates are available" + "info:Get description of available packages" + "list:Is used to list various information about packages" + "groupinfo:Get info on package groups" + "groupinstall:Install a package group or groups" + "groupremove:Remove a package group or groups" + "grouplist:List package groups" + "groupupdate:Update a package group or groups" + "localinstall:Install packages with local rpm files" + "localupdate:Update packages with local rpm files" + "makecache:Makes a local yum cache" + "provides:Find out which package provides some feature or file" + "whatprovides:Find out which package provides some feature or file" + "resolvedep:List packages providing the specified dependencies" + "search:Find any packages matching pattern" + "shell:Enter the 'yum shell'" + "update:Update one or more packages" + "upgrade:Upgrade one or more packages" + ) + + if (( CURRENT == 1 )); then + _describe -t commands 'yum command' _yum_cmds || compadd "$@" + else + local curcontext="$curcontext" + + cmd="${${_yum_cmds[(r)$words[1]:*]%%:*}}" + # Deal with any aliases + case $cmd in + remove) cmd="erase";; + whatprovides) cmd="provides";; + upgrade) cmd="update";; + esac + + if (( $#cmd )); then + curcontext="${curcontext%:*:*}:yum-${cmd}:" + + local update_policy + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + if [[ -z "$update_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _yum_caching_policy + fi + + _call_function ret _yum_$cmd || _message 'no more arguments' + else + _message "unknown yum command: $words[1]" + fi + return ret + fi +} + +# Fills the installed pkg cache +_yum_all_pkgs() +{ + if ( [[ ${+_all_pkgs} -eq 0 ]] || _cache_invalid ALL ) && + ! _retrieve_cache ALL; + then + local prog="yum -C list all | sed 's/\s.*//' | grep '\.'" + _all_pkgs=( $(_call_program allpackages $prog 2>/dev/null) ) + _store_cache ALL _all_pkg + fi +} + +# Fills the installed pkg cache +_yum_installed_pkgs() +{ + if ( [[ ${+_installed_pkgs} -eq 0 ]] || _cache_invalid INSTALLED ) && + ! _retrieve_cache INSTALLED; + then + local prog="yum -C list installed | sed 's/\s.*//' | grep '\.'" + _installed_pkgs=( $(_call_program ipackages $prog 2>/dev/null) ) + _store_cache INSTALLED _installed_pkgs + fi +} + +# Fills the available pkg cache +_yum_available_pkgs() +{ + if ( [[ ${+_available_pkgs} -eq 0 ]] || _cache_invalid AVAILABLE ) && + ! _retrieve_cache AVAILABLE; + then + local prog="yum -C list available | sed 's/\s.*//' | grep '\.'" + _available_pkgs=( $(_call_program apackages $prog 2>/dev/null) ) + _store_cache AVAILABLE _available_pkgs + fi +} + +# Fills the upgrade pkg cache +_yum_upgrade_pkgs() +{ + if ( [[ ${+_upgrade_pkgs} -eq 0 ]] || _cache_invalid UPGRADE ) && + ! _retrieve_cache UPGRADE; + then + local prog="yum -C list upgrade | sed 's/\s.*//' | grep '\.'" + _upgrade_pkgs=( $(_call_program upackages $prog 2>/dev/null) ) + _store_cache UPGRADE _upgrade_pkgs + fi +} + +# Completion function for erase|remove +(( $+functions[_yum_erase] )) || _yum_erase() +{ + _yum_installed_pkgs + compadd "$@" -a -- _installed_pkgs +} + +# Completion function for install +(( $+functions[_yum_install] )) || _yum_install() +{ + _yum_available_pkgs + compadd "$@" -a -- _available_pkgs +} + +# Completion function for localinstall +(( $+functions[_yum_localinstall] )) || _yum_localinstall() +{ + _files -g '(#i)*.rpm(-.)' +} + +# Completion function for localupdate +(( $+functions[_yum_localupdate] )) || _yum_localupdate() +{ + _files -g '(#i)*.rpm(-.)' +} + +# Completion function for update/upgrade +(( $+functions[_yum_update] )) || _yum_update() +{ + _yum_upgrade_pkgs + compadd "$@" -a -- _upgrade_pkgs +} + +# Completion function for deplist +(( $+functions[_yum_deplist] )) || _yum_deplist() +{ + _yum_available_pkgs + compadd "$@" -a -- _available_pkgs +} + +_yum_all() +{ + _yum_all_pkgs + compadd "$@" -a -- _all_pkgs +} +_yum_list_or_info() +{ + local -a listlist + listlist=( + "all:all packages in repositories" + "available:packages available in repositories" + "updates:packages with updates available" + "installed:installed packages" + "extras:packages installed that are not available in any yum repository" + "obsoletes:packages installed that are obsoleted" + "recent:packages recently added to repositories" + ) + + if (( CURRENT == 2 )); then + _describe -t yum-list-subcmds "Yum info/list sub-commands" listlist || _yum_all + else + local subcmd + subcmd="${${listlist[(r)$words[2]:*]%%:*}}" + # Deal with any aliases + case $subcmd in + installed) _yum_erase;; + available) _yum_install;; + updates) _yum_update;; + esac + fi +} + +# Completion function for list +(( $+functions[_yum_list] )) || _yum_list() +{ + _yum_list_or_info +} + +# Completion function for info +(( $+functions[_yum_info] )) || _yum_info() +{ + _yum_list_or_info +} + +# Completion function for provides|whatprovides +(( $+functions[_yum_provides] )) || _yum_provides() +{ + _files +} + +# Completion function for resolvedep +(( $+functions[_yum_resolvedep] )) || _yum_resolvedep() +{ + _files +} + +# Completion function for clean +(( $+functions[_yum_clean] )) || _yum_clean() +{ + local -a cleanlist + cleanlist=( + "all:all cache" + "cache:all cache" + "dbcache:DB cache" + "headers:cache headers" + "packages:cache packages" + "metadata:cache meta-data" + ) + + if (( CURRENT == 2 )); then + _describe -t yum-clean-subcmds "Yum clean sub-commands" cleanlist + fi +} + +_yum_caching_policy() +{ + local _yumrepomds + + # rebuild if cache is more than a week old + oldp=( "$1"(mw+1) ) + (( $#oldp )) && return 0 + + _yumrepomds=( /var/cache/yum/**/repomd.xml ) + + if (( $#__yumrepomds )); then + for repo in $_yumrepomds; do + [[ "$repo" -nt "$1" ]] && return 0 + done + fi + + return 1 +} + +_yum "$@" |