Created attachment 116224 [details] Patch From 9fb925859b1a004d2a45227a22eabf3cf3406341 Mon Sep 17 00:00:00 2001 From: Daniel Hahler <git@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
Could you please resubmit this patch as a pull request here? https://github.com/systemd/systemd/pulls Thanks!
Sure, done: https://github.com/systemd/systemd/pull/84.
Let's close this here, given this has long been process on github.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.