From 4c2a62fe8623c24f3fbb56ed17550c7f02cf9316 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 30 May 2015 11:14:48 -0700 Subject: 35310 (plus undo 35268 (git 899613f)): fix quoting of cached arrays Also add file name reference to ChangeLog entry from rev 899613f. --- ChangeLog | 12 +++++++++--- Completion/Base/Utility/_store_cache | 11 +++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index f379ddb19..513d02581 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-05-30 Barton E. Schaefer + + * Oliver Kiddle: 35310 (plus undo 35268 (git 899613f)): + Completion/Base/Utility/_store_cache: fix quoting of cached arrays + 2015-05-29 Peter Stephenson * 35326: Src/subst.c, Test/D04parameter.ztst: $#- was misparsed @@ -52,9 +57,10 @@ 2015-05-26 Peter Stephenson - * see 35268: revert 34476 (ae7dcab) as it seems to be having - effects beyond the intended optimisation of completion caching. - To be investigated further after the release. + * see 35268: Completion/Base/Utility/_store_cache: revert 34476 + (ae7dcab) as it seems to be having effects beyond the intended + optimisation of completion caching. To be investigated further + after the release. * Han Pingtian: 35295: Functions/Zftp/zfcd_match: be more inventive zftp directory listing. diff --git a/Completion/Base/Utility/_store_cache b/Completion/Base/Utility/_store_cache index 86e72e9a9..fb2ab328a 100644 --- a/Completion/Base/Utility/_store_cache +++ b/Completion/Base/Utility/_store_cache @@ -46,8 +46,15 @@ if zstyle -t ":completion:${curcontext}:" use-cache; then for var; do case ${(Pt)var} in (*readonly*) ;; - (*(association|array)*) print -r "$var=( ${(kv@Pqq)^^var} )";; - (*) print -r "$var=${(Pqq)^^var}";; + (*(association|array)*) + # Dump the array as a here-document to reduce parsing overhead + # when reloading the cache with "source" from _retrieve_cache + print -r "$var=( "'${(Q)"${(z)$(<<\EO:'"$var" + print -r "${(kv@Pqq)^^var}" + print -r "EO:$var" + print -r ')}"} )' + ;; + (*) print -r "$var=${(Pqq)^^var}";; esac done >! "$_cache_dir/$_cache_ident" else -- cgit 1.4.1