Blob Blame History Raw
From f6441eaf050267c05ef8df8d5614bb598528942f Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Thu, 27 Jul 2017 20:22:54 +0900
Subject: [PATCH] bash-completion: use the first argument instead of the global
 variable (#6457)

Without this fix:

$ systemctl start <tab>
Display all 135 possibilities? (y or n)
$ __get_startable_units --system | wc -l
224

the number of the suggestions are quite different, as __get_startable_units --system does
not filter already started units. With this fix,

$ systemctl start <tab>
Display all 135 possibilities? (y or n)
$ __get_startable_units --system | wc -l
123
$ __get_template_names --system | wc -l
12

the number of the suggestions matches one the function returns.
For consistency with the other internal functions, it should use the first argument
instead of the global variable $mode.

[zj: add commit message to make it sound like we know what we're doing]

(cherry picked from commit 6bda23dd6aaba50cf8e3e6024248cf736cc443ca)
---
 shell-completion/bash/systemctl.in | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in
index 0398d09d18..bde28efc3e 100644
--- a/shell-completion/bash/systemctl.in
+++ b/shell-completion/bash/systemctl.in
@@ -68,7 +68,7 @@ __filter_units_by_properties () {
         done
         for ((i=0; i < ${#units[*]}; i++)); do
                 for ((j=0; j < ${#conditions[*]}; j++)); do
-                        if [[ "${props[ i * ${#conditions[*]} + j]}" != "${conditions[j]}" ]]; then
+                        if [[ "${props[i * ${#conditions[*]} + j]}" != "${conditions[j]}" ]]; then
                                 break
                         fi
                 done
@@ -87,19 +87,19 @@ __get_active_units   () { __systemctl $1 list-units       \
         | { while read -r a b; do echo " $a"; done; }; }
 __get_startable_units () {
         # find startable inactive units
-        __filter_units_by_properties $mode ActiveState,CanStart inactive,yes $(
-            { __systemctl $mode list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient | \
+        __filter_units_by_properties $1 ActiveState,CanStart inactive,yes $(
+            { __systemctl $1 list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient | \
                       { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }
-              __systemctl $mode list-units --state inactive,failed | \
+              __systemctl $1 list-units --state inactive,failed | \
                       { while read -r a b c; do [[ $b == "loaded" ]] && echo " $a"; done; }
             } | sort -u )
 }
 __get_restartable_units () {
         # filter out masked and not-found
-        __filter_units_by_property $mode CanStart yes $(
-            __systemctl $mode list-unit-files --state enabled,disabled,static | \
+        __filter_units_by_property $1 CanStart yes $(
+            __systemctl $1 list-unit-files --state enabled,disabled,static | \
                     { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }
-            __systemctl $mode list-units | \
+            __systemctl $1 list-units | \
                     { while read -r a b; do echo " $a"; done; } )
 }
 __get_failed_units   () { __systemctl $1 list-units       \