From d2ce821cc885e7e95284dbcdbd7aff1759f191a5 Mon Sep 17 00:00:00 2001 From: Zhao Cai Date: Sun, 28 Apr 2013 21:06:40 -0400 Subject: [PATCH 1/3] Use cache-policy for _gem --- src/_gem | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/src/_gem b/src/_gem index 505c0e4..1391566 100644 --- a/src/_gem +++ b/src/_gem @@ -19,6 +19,12 @@ _gem() { local -a gem_general_flags + local context curcontext="$curcontext" update_policy + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && \ + zstyle ":completion:${curcontext}:" cache-policy _gem_extensions_caching_policy + gem_general_flags=("(-h --help)"{-h,--help}"[Get help on this command]" "(-V --verbose)"{-V,--verbose}"[Set the verbose level of output]" "(-q --quiet)"{-q,--quiet}"[Silence commands]" @@ -28,25 +34,34 @@ _gem() { $nul_arg ) - extra_gems=$(_call_program commands ${words[1]} list --no-version gem-browse gemedit gem-edit) local gem_edit_command="edit[Edit installed gem in editor]" local gem_clone_command="clone[Clone a gem's source from GitHub]" local gem_browse_command="browse[browse the gem's homepage]" - if [ ${#extra_gems} -eq 0 ] ; then - extra_gem_commands_desc="" - extra_gem_commands="" - elif [[ "${extra_gems[(i)gem-browse]}" -le ${#extra_gems} ]] ; then - extra_gem_commands_desc=(${gem_edit_command} ${gem_browse_command} ${gem_clone_command}) - extra_gem_commands=(clone browse edit) + unset _gem_extra_commands + if ( [[ ${+_gem_extra_commands} -eq 0 ]] || \ + _cache_invalid "gem_extensions" ) && ! _retrieve_cache "gem_extensions"; then - elif [[ "${extra_gems[(r)gem-edit]}" -le ${#extra_gems} ]] \ - || [[ "${extra_gems[(r)gemedit]}" -le ${#extra_gems} ]] ; then - extra_gem_commands_desc=${gem_edit_command} - extra_gem_commands=edit + _gem_extensions=$(_call_program commands ${words[1]} list --no-version gem-browse gemedit gem-edit) + + _store_cache "gem_extensions" _gem_extensions fi + if [ ${#_gem_extensions} -eq 0 ] ; then + extra_gem_commands_desc="" + extra_gem_commands="" + elif [[ "${_gem_extensions[(i)gem-browse]}" -le ${#_gem_extensions} ]] ; then + extra_gem_commands_desc=(${gem_edit_command} ${gem_browse_command} ${gem_clone_command}) + extra_gem_commands=(clone browse edit) + + elif [[ "${_gem_extensions[(r)gem-edit]}" -le ${#_gem_extensions} ]] \ + || [[ "${_gem_extensions[(r)gemedit]}" -le ${#_gem_extensions} ]] ; then + extra_gem_commands_desc=${gem_edit_command} + extra_gem_commands=edit + fi + + if (( CURRENT > 2 )); then (( CURRENT-- )) shift words @@ -493,6 +508,12 @@ _gem_which() { $gem_general_flags && ret=0 } +_gem_extensions_caching_policy() { + local -a oldp + oldp=( "$1"(Nm+1) ) + (( $#oldp )) +} + # Local Variables: # mode: Shell-Script # sh-indentation: 2 @@ -501,3 +522,4 @@ _gem_which() { # End: # vim: ft=zsh sw=2 ts=2 et + From d3a6d8fbcc3a9475fc246aac8e22808e0d0dd0ef Mon Sep 17 00:00:00 2001 From: Zhao Cai Date: Sun, 28 Apr 2013 21:15:56 -0400 Subject: [PATCH 2/3] Check GEM_HOME to compare recency --- src/_gem | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/_gem b/src/_gem index 1391566..31f168e 100644 --- a/src/_gem +++ b/src/_gem @@ -509,8 +509,18 @@ _gem_which() { } _gem_extensions_caching_policy() { + if [[ -n $GEM_HOME ]]; then + gem_home=$GEM_HOME + else + gem_home=$(_call_program commands ${words[1]} env gemdir) + fi + + # Rebuild if gems directory is more recent than cache. + [[ $gem_home/gems -nt "$1" ]] && return 0 + + # Rebuild if cache is older than one week. local -a oldp - oldp=( "$1"(Nm+1) ) + oldp=( "$1"(Nmw+1) ) (( $#oldp )) } From 75bf6f64c200e536a99dcfae4436d49d857fbd0a Mon Sep 17 00:00:00 2001 From: Zhao Cai Date: Mon, 29 Apr 2013 20:08:24 -0400 Subject: [PATCH 3/3] (gem) Add open command --- src/_gem | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/_gem b/src/_gem index 31f168e..5870928 100644 --- a/src/_gem +++ b/src/_gem @@ -34,8 +34,10 @@ _gem() { $nul_arg ) + extra_gems=$(_call_program commands ${words[1]} list --no-version gem-browse gemedit gem-edit) local gem_edit_command="edit[Edit installed gem in editor]" + local gem_open_command="open[open installed gem in editor]" local gem_clone_command="clone[Clone a gem's source from GitHub]" local gem_browse_command="browse[browse the gem's homepage]" @@ -51,8 +53,8 @@ _gem() { if [ ${#_gem_extensions} -eq 0 ] ; then extra_gem_commands_desc="" extra_gem_commands="" - elif [[ "${_gem_extensions[(i)gem-browse]}" -le ${#_gem_extensions} ]] ; then - extra_gem_commands_desc=(${gem_edit_command} ${gem_browse_command} ${gem_clone_command}) + elif [[ "${extra_gems[(i)gem-browse]}" -le ${#extra_gems} ]] ; then + extra_gem_commands_desc=(${gem_edit_command} ${gem_open_command} ${gem_browse_command} ${gem_clone_command}) extra_gem_commands=(clone browse edit) elif [[ "${_gem_extensions[(r)gem-edit]}" -le ${#_gem_extensions} ]] \ @@ -226,6 +228,10 @@ _gem_browse() { _gem_edit } +_gem_open() { + _gem_edit +} + _gem_environment() { typeset -g _environment_arg= _environment_arg='::environment:((packageversion\:"display the package version"