mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-21 18:03:41 +03:00
zsh: reintroduce pattern argument to uncached verbs
The systemctl completion previously made use of PREFIX as a pattern argument to list-unit-files and list-units. This had the problem of erroneously filtering the results that were stored in the cache, and erroneously filtering results that might have been requested according to the users configuration (e.g. _correct completer, certain matcher-lists or tag-orders, etc.). Unfortunately, the runtime of list-unit-files increases when no pattern argument is provided, and systemctl show, used to filter those units, can become unacceptably slow when provided with too many units to describe. Let's re-introduce the pattern argument to list-unit-files and list-units where necessary in order to alleviate these bottlenecks without poisining the cache. A 'use-pattern' style is introduced that may be used to disable this behavior if it is undesired. We can still expect that certain completions, like `systemctl start <TAB>` will be slow, like before. To fix this we will need systemd to learn a more efficient way of filtering the units than parsing systemctl show. (cherry picked from commit 2cbda74862049be2003496c7d432341d53a0fdf9) (cherry picked from commit dfc0445cb86e500732125da9f758092641a4c5a2) (cherry picked from commit 7ca3cae97bfb9ba163cb298150816b591ad2e0c7)
This commit is contained in:
parent
af20c4f05c
commit
80be287dba
@ -202,23 +202,37 @@ __systemctl()
|
||||
_systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files)"}##*@.[^[:space:]]##}%%@.*}\@ }
|
||||
|
||||
(( $+functions[_systemctl_active_units] )) ||
|
||||
_systemctl_active_units() {_sys_active_units=( ${${(f)"$(__systemctl list-units)"}%% *} )}
|
||||
_systemctl_active_units() {
|
||||
local pattern
|
||||
if zstyle -T ":completion:$curcontext" use-pattern; then
|
||||
pattern="$PREFIX*$SUFFIX"
|
||||
fi
|
||||
_sys_active_units=( ${${(f)"$(__systemctl list-units $pattern)"}%% *} )
|
||||
}
|
||||
|
||||
(( $+functions[_systemctl_startable_units] )) ||
|
||||
_systemctl_startable_units(){
|
||||
local pattern
|
||||
if zstyle -T ":completion:$curcontext" use-pattern; then
|
||||
pattern="$PREFIX*$SUFFIX"
|
||||
fi
|
||||
_sys_startable_units=( $( _filter_units_by_property ActiveState inactive $(
|
||||
_filter_units_by_property CanStart yes ${${${(f)"$(
|
||||
__systemctl list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient
|
||||
__systemctl list-units --state inactive,failed
|
||||
__systemctl list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient $pattern
|
||||
__systemctl list-units --state inactive,failed $pattern
|
||||
)"}:#*@.*}%%[[:space:]]*}
|
||||
)) )
|
||||
}
|
||||
|
||||
(( $+functions[_systemctl_restartable_units] )) ||
|
||||
_systemctl_restartable_units(){
|
||||
local pattern
|
||||
if zstyle -T ":completion:$curcontext" use-pattern; then
|
||||
pattern="$PREFIX*$SUFFIX"
|
||||
fi
|
||||
_sys_restartable_units=( $( _filter_units_by_property CanStart yes ${${${(f)"$(
|
||||
__systemctl list-unit-files --state enabled,disabled,static
|
||||
__systemctl list-units
|
||||
__systemctl list-unit-files --state enabled,disabled,static $pattern
|
||||
__systemctl list-units $pattern
|
||||
)"}:#*@.*}%%[[:space:]]*} ) )
|
||||
}
|
||||
|
||||
@ -228,8 +242,12 @@ __systemctl()
|
||||
(( $+functions[_systemctl_unit_state] )) ||
|
||||
_systemctl_unit_state() {
|
||||
setopt localoptions extendedglob
|
||||
local pattern
|
||||
if zstyle -T ":completion:$curcontext" use-pattern; then
|
||||
pattern="$PREFIX*$SUFFIX"
|
||||
fi
|
||||
typeset -gA _sys_unit_state
|
||||
_sys_unit_state=( ${=${${(f)"$(__systemctl list-unit-files)"}%%[[:space:]]#}% *} )
|
||||
_sys_unit_state=( ${=${${(f)"$(__systemctl list-unit-files $pattern)"}%%[[:space:]]#}% *} )
|
||||
}
|
||||
|
||||
local fun
|
||||
|
Loading…
x
Reference in New Issue
Block a user