Zbigniew Jędrzejewski-Szmek 5d6eed
From d8386bfd28676e1c6fd88deaf203eb1cd7585233 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 03e93e
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?=
Zbigniew Jędrzejewski-Szmek 03e93e
 =?UTF-8?q?=D0=A2=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?=
Zbigniew Jędrzejewski-Szmek 03e93e
 <disarmer.mk@gmail.com>
Zbigniew Jędrzejewski-Szmek 03e93e
Date: Sat, 21 Jan 2017 23:53:09 +0400
Zbigniew Jędrzejewski-Szmek 03e93e
Subject: [PATCH] Fixi caching in zsh completion (#5122)
Zbigniew Jędrzejewski-Szmek 03e93e
Zbigniew Jędrzejewski-Szmek 03e93e
I found several issues with zsh completion code:
Zbigniew Jędrzejewski-Szmek 03e93e
Zbigniew Jędrzejewski-Szmek 03e93e
1. typo in cache filename: "SYS_ALL_PROPRTIES", so cache just not loading from this file
Zbigniew Jędrzejewski-Szmek 03e93e
2. cache stored in one file, despite user or system mode. So it can be loaded later in wrong mode
Zbigniew Jędrzejewski-Szmek 03e93e
3. most serious problem: broken logic - it retrieves cache when _cache_invalid is true
Zbigniew Jędrzejewski-Szmek 03e93e
Zbigniew Jędrzejewski-Szmek 03e93e
How to reproduce: type "systemctl --user status <TAB>" and you will see user units. Then press
Zbigniew Jędrzejewski-Szmek 03e93e
control+C and type "systemctl --system status <TAB>" in same session and you'll see user units again
Zbigniew Jędrzejewski-Szmek 03e93e
(cherry picked from commit 88e4dbd505ed4f8480b1f3b837b3c2ac55f1b1dd)
Zbigniew Jędrzejewski-Szmek 03e93e
---
Zbigniew Jędrzejewski-Szmek 03e93e
 shell-completion/zsh/_systemctl.in | 18 +++++++++---------
Zbigniew Jędrzejewski-Szmek 03e93e
 1 file changed, 9 insertions(+), 9 deletions(-)
Zbigniew Jędrzejewski-Szmek 03e93e
Zbigniew Jędrzejewski-Szmek 03e93e
diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in
Zbigniew Jędrzejewski-Szmek 03e93e
index d77a2df74e..553216da5e 100644
Zbigniew Jędrzejewski-Szmek 03e93e
--- a/shell-completion/zsh/_systemctl.in
Zbigniew Jędrzejewski-Szmek 03e93e
+++ b/shell-completion/zsh/_systemctl.in
Zbigniew Jędrzejewski-Szmek 03e93e
@@ -98,11 +98,11 @@ __systemctl()
Zbigniew Jędrzejewski-Szmek 03e93e
 # Fills the unit list
Zbigniew Jędrzejewski-Szmek 03e93e
 _systemctl_all_units()
Zbigniew Jędrzejewski-Szmek 03e93e
 {
Zbigniew Jędrzejewski-Szmek 03e93e
-  if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS ) &&
Zbigniew Jędrzejewski-Szmek 03e93e
-    ! _retrieve_cache SYS_ALL_UNITS;
Zbigniew Jędrzejewski-Szmek 03e93e
+  if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS$_sys_service_mgr ) ||
Zbigniew Jędrzejewski-Szmek 03e93e
+    ! _retrieve_cache SYS_ALL_UNITS$_sys_service_mgr;
Zbigniew Jędrzejewski-Szmek 03e93e
   then
Zbigniew Jędrzejewski-Szmek 03e93e
     _sys_all_units=( ${${(f)"$(__systemctl list-units --all)"}%% *} )
Zbigniew Jędrzejewski-Szmek 03e93e
-    _store_cache SYS_ALL_UNITS _sys_all_units
Zbigniew Jędrzejewski-Szmek 03e93e
+    _store_cache SYS_ALL_UNITS$_sys_service_mgr _sys_all_units
Zbigniew Jędrzejewski-Szmek 03e93e
   fi
Zbigniew Jędrzejewski-Szmek 03e93e
 }
Zbigniew Jędrzejewski-Szmek 03e93e
 
Zbigniew Jędrzejewski-Szmek 03e93e
@@ -111,14 +111,14 @@ _systemctl_really_all_units()
Zbigniew Jędrzejewski-Szmek 03e93e
 {
Zbigniew Jędrzejewski-Szmek 03e93e
   local -a all_unit_files;
Zbigniew Jędrzejewski-Szmek 03e93e
   local -a really_all_units;
Zbigniew Jędrzejewski-Szmek 03e93e
-  if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS ) &&
Zbigniew Jędrzejewski-Szmek 03e93e
-    ! _retrieve_cache SYS_REALLY_ALL_UNITS;
Zbigniew Jędrzejewski-Szmek 03e93e
+  if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS$_sys_service_mgr ) ||
Zbigniew Jędrzejewski-Szmek 03e93e
+    ! _retrieve_cache SYS_REALLY_ALL_UNITS$_sys_service_mgr;
Zbigniew Jędrzejewski-Szmek 03e93e
   then
Zbigniew Jędrzejewski-Szmek 03e93e
     all_unit_files=( ${${(f)"$(__systemctl list-unit-files)"}%% *} )
Zbigniew Jędrzejewski-Szmek 03e93e
     _systemctl_all_units
Zbigniew Jędrzejewski-Szmek 03e93e
     really_all_units=($_sys_all_units $all_unit_files)
Zbigniew Jędrzejewski-Szmek 03e93e
     _sys_really_all_units=(${(u)really_all_units})
Zbigniew Jędrzejewski-Szmek 03e93e
-    _store_cache SYS_REALLY_ALL_UNITS _sys_really_all_units
Zbigniew Jędrzejewski-Szmek 03e93e
+    _store_cache SYS_REALLY_ALL_UNITS$_sys_service_mgr _sys_really_all_units
Zbigniew Jędrzejewski-Szmek 03e93e
   fi
Zbigniew Jędrzejewski-Szmek 03e93e
 }
Zbigniew Jędrzejewski-Szmek 03e93e
 
Zbigniew Jędrzejewski-Szmek 03e93e
@@ -330,13 +330,13 @@ _unit_types() {
Zbigniew Jędrzejewski-Szmek 03e93e
 }
Zbigniew Jędrzejewski-Szmek 03e93e
 
Zbigniew Jędrzejewski-Szmek 03e93e
 _unit_properties() {
Zbigniew Jędrzejewski-Szmek 03e93e
-  if ( [[ ${+_sys_all_properties} -eq 0 ]] || _cache_invalid SYS_ALL_PROPERTIES ) &&
Zbigniew Jędrzejewski-Szmek 03e93e
-    ! _retrieve_cache SYS_ALL_PROPERTIES;
Zbigniew Jędrzejewski-Szmek 03e93e
+  if ( [[ ${+_sys_all_properties} -eq 0 ]] || _cache_invalid SYS_ALL_PROPERTIES$_sys_service_mgr ) ||
Zbigniew Jędrzejewski-Szmek 03e93e
+    ! _retrieve_cache SYS_ALL_PROPERTIES$_sys_service_mgr;
Zbigniew Jędrzejewski-Szmek 03e93e
   then
Zbigniew Jędrzejewski-Szmek 03e93e
     _sys_all_properties=( ${${(M)${(f)"$(__systemctl show --all;
Zbigniew Jędrzejewski-Szmek 03e93e
     @rootlibexecdir@/systemd --dump-configuration-items)"}##[[:alnum:]]##=*}%%=*}
Zbigniew Jędrzejewski-Szmek 03e93e
     )
Zbigniew Jędrzejewski-Szmek 03e93e
-    _store_cache SYS_ALL_PROPRTIES _sys_all_properties
Zbigniew Jędrzejewski-Szmek 03e93e
+    _store_cache SYS_ALL_PROPERTIES$_sys_service_mgr _sys_all_properties
Zbigniew Jędrzejewski-Szmek 03e93e
   fi
Zbigniew Jędrzejewski-Szmek 03e93e
   _values -s , "${_sys_all_properties[@]}"
Zbigniew Jędrzejewski-Szmek 03e93e
 }