summaryrefslogtreecommitdiff
path: root/Completion/Redhat/Command
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2005-11-06 17:45:11 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2005-11-06 17:45:11 +0000
commit78ace07e1604b4ffd990fea3066a9cfa2c6c5669 (patch)
tree4f95e14ecb21ca320cf85a8617bcbdd5ba85d8cb /Completion/Redhat/Command
parent67c4c4efa648bfe50866fac1a0f2b9e0c3fb003a (diff)
downloadzsh-78ace07e1604b4ffd990fea3066a9cfa2c6c5669.tar.gz
zsh-78ace07e1604b4ffd990fea3066a9cfa2c6c5669.zip
Scott Murray: users/9648: new _yum completion
Diffstat (limited to 'Completion/Redhat/Command')
-rw-r--r--Completion/Redhat/Command/.distfiles1
-rw-r--r--Completion/Redhat/Command/_yum269
2 files changed, 270 insertions, 0 deletions
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 "$@"