From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8931 invoked from network); 30 Mar 2001 21:00:55 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 30 Mar 2001 21:00:55 -0000 Received: (qmail 12376 invoked by alias); 30 Mar 2001 21:00:38 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 13860 Received: (qmail 12363 invoked from network); 30 Mar 2001 21:00:37 -0000 Date: Fri, 30 Mar 2001 16:00:36 -0500 From: Clint Adams To: zsh-workers@sunsite.dk Subject: PATCH: _deb_packages caching Message-ID: <20010330160036.A3477@dman.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i This adds caching layer support to _deb_packages, a la _rpm. It should probably make use of _call as well. Index: Completion/Debian/_deb_packages =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Debian/_deb_packages,v retrieving revision 1.2 diff -u -r1.2 _deb_packages --- Completion/Debian/_deb_packages 2000/04/11 07:57:57 1.2 +++ Completion/Debian/_deb_packages 2001/03/30 20:59:11 @@ -3,19 +3,26 @@ # Usage: _deb_packages expl... avail|installed|uninstalled _deb_packages_update_avail () { - if (( ! $+_deb_packages_cache_avail )); then + if ( [[ ${+_deb_packages_cache_avail} -eq 0 ]] || + _cache_invalid DEBS_avail ) && ! _retrieve_cache DEBS_avail; + then _deb_packages_cache_avail=( ${(f)"$(apt-cache dumpavail | awk '/^Package:/ { print $2 }')"} ) + + _store_cache DEBS_avail _deb_packages_cache_avail fi cachevar=_deb_packages_cache_avail } _deb_packages_update_installed () { - if (( ! $+_deb_packages_cache_installed )); then + if ( [[ ${+_deb_packages_cache_installed} -eq 0 ]] || + _cache_invalid DEBS_installed ) && ! _retrieve_cache DEBS_installed; + then _deb_packages_cache_installed=( ${${${(f)"$(dpkg --get-selections)"}:#*deinstall}%% *} ) + _store_cache DEBS_installed _deb_packages_cache_installed fi cachevar=_deb_packages_cache_installed } @@ -32,7 +39,12 @@ } _deb_packages () { - local command="$argv[$#]" expl cachevar pkgset + local command="$argv[$#]" expl cachevar pkgset update_policy + + zstyle -s ":completion:*:*:$service:*" cache-policy update_policy + if [[ -z "$update_policy" ]]; then + zstyle ":completion:*:*:$service:*" cache-policy _debs_caching_policy + fi [[ "$command" = (installed|uninstalled|avail) ]] || { _message "_deb_packages:unknown command: $command" @@ -53,5 +65,16 @@ _tags packages && compadd "$expl[@]" - "${(@P)cachevar}" } + + _debs_caching_policy () { + # rebuild if cache is more than a week old + oldp=( "$1"(mw+1) ) + (( $#oldp )) && return 0 + + [[ /var/cache/apt/pkgcache.bin -nt "$1" || + /var/lib/dpkg/available -nt "$1" ]] + } + + _deb_packages "$@"