[systemd-bugs] [Bug 90807] New: zsh-completion: optimize _filter_units_by_property

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Mon Jun 1 18:18:18 PDT 2015


https://bugs.freedesktop.org/show_bug.cgi?id=90807

            Bug ID: 90807
           Summary: zsh-completion: optimize _filter_units_by_property
           Product: systemd
           Version: unspecified
          Hardware: Other
                OS: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: general
          Assignee: systemd-bugs at lists.freedesktop.org
          Reporter: freedesktop-bugs at thequod.de
        QA Contact: systemd-bugs at lists.freedesktop.org

Created attachment 116224
  --> https://bugs.freedesktop.org/attachment.cgi?id=116224&action=edit
Patch

>From 9fb925859b1a004d2a45227a22eabf3cf3406341 Mon Sep 17 00:00:00 2001
From: Daniel Hahler <git at thequod.de>
Date: Wed, 27 May 2015 21:26:26 +0200
Subject: [PATCH] zsh-completion: optimize _filter_units_by_property

Optimize _filter_units_by_property by calling `systemctl` only once with
a list of units, and not once per unit.

I could not reproduce the "Unknown unit" error mentioned in a FIXME,
which might have made this necessary previously.
---
 shell-completion/zsh/_systemctl.in | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/shell-completion/zsh/_systemctl.in
b/shell-completion/zsh/_systemctl.in
index 1dc6406..82525de 100644
--- a/shell-completion/zsh/_systemctl.in
+++ b/shell-completion/zsh/_systemctl.in
@@ -129,16 +129,11 @@ _systemctl_really_all_units()
 _filter_units_by_property() {
   local property=$1 value=$2 ; shift ; shift
   local -a units ; units=($*)
-  local prop unit
-  for ((i=1; $i <= ${#units[*]}; i++)); do
-    # FIXME: "Failed to issue method call: Unknown unit" errors are ignored
for
-    # now (related to DBUS_ERROR_UNKNOWN_OBJECT). in the future, we need to
-    # revert to calling 'systemctl show' once for all units, which is way
-    # faster
-    unit=${units[i]}
-    prop=${(f)"$(_call_program units "$service show --no-pager
--property="$property" ${unit} 2>/dev/null")"}
-    if [[ "${prop}" = "$property=$value" ]]; then
-      echo -E - " ${unit}"
+  local props
+  for props in ${(ps:\n\n:)"$(_call_program units "$service show --no-pager
--property="Id,$property" -- ${units} 2>/dev/null")"}; do
+    props=(${(f)props})
+    if [[ "${props[2]}" = "$property=$value" ]]; then
+      echo -E - " ${props[1]#Id=}"
     fi
   done
 }
-- 
2.4.1.dirty

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-bugs/attachments/20150602/4b42ea0d/attachment.html>


More information about the systemd-bugs mailing list