Stop slowing bash init by caching plugins path slowly

Fixes issue #3889 by only loading docker plugins path when needed: if it is fast enough than it shouldn't be a problem to do this on demand; OTOH if it is slow then we shouldn't do this during *every* bash session initialization, regardless if docker completion will be needed or not.

Signed-off-by: Oded Arbel <oded@geek.co.il>
(cherry picked from commit 1da67be9ca)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Oded Arbel 2023-08-21 19:42:32 +03:00 committed by Sebastiaan van Stijn
parent 724548bc7d
commit dc45bcc993
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
1 changed files with 5 additions and 2 deletions

View File

@ -1142,7 +1142,10 @@ __docker_complete_user_group() {
fi fi
} }
DOCKER_PLUGINS_PATH=$(docker info --format '{{range .ClientInfo.Plugins}}{{.Path}}:{{end}}') __docker_plugins_path() {
local docker_plugins_path=$(docker info --format '{{range .ClientInfo.Plugins}}{{.Path}}:{{end}}')
echo "${docker_plugins_path//:/ }"
}
__docker_complete_plugin() { __docker_complete_plugin() {
local path=$1 local path=$1
@ -5504,7 +5507,7 @@ _docker() {
# Create completion functions for all registered plugins # Create completion functions for all registered plugins
local known_plugin_commands=() local known_plugin_commands=()
local plugin_name="" local plugin_name=""
for plugin_path in ${DOCKER_PLUGINS_PATH//:/ }; do for plugin_path in $(__docker_plugins_path); do
plugin_name=$(basename "$plugin_path" | sed 's/ *$//') plugin_name=$(basename "$plugin_path" | sed 's/ *$//')
plugin_name=${plugin_name#docker-} plugin_name=${plugin_name#docker-}
plugin_name=${plugin_name%%.*} plugin_name=${plugin_name%%.*}