summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--Completion/Base/Utility/_store_cache11
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  <schaefer@zsh.org>
+
+	* Oliver Kiddle: 35310 (plus undo 35268 (git 899613f)):
+	Completion/Base/Utility/_store_cache: fix quoting of cached arrays
+
 2015-05-29  Peter Stephenson  <p.stephenson@samsung.com>
 
 	* 35326: Src/subst.c, Test/D04parameter.ztst: $#- was misparsed
@@ -52,9 +57,10 @@
 
 2015-05-26  Peter Stephenson  <p.stephenson@samsung.com>
 
-	* 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