From dc45bcc993d9546654ecdcbb4a78e48fdc7748af Mon Sep 17 00:00:00 2001 From: Oded Arbel Date: Mon, 21 Aug 2023 19:42:32 +0300 Subject: [PATCH] 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 (cherry picked from commit 1da67be9caf37a4f0b297cfd41da3ab41c2bd2c7) Signed-off-by: Sebastiaan van Stijn --- contrib/completion/bash/docker | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/contrib/completion/bash/docker b/contrib/completion/bash/docker index e564d538dc..c302f95d36 100644 --- a/contrib/completion/bash/docker +++ b/contrib/completion/bash/docker @@ -1142,7 +1142,10 @@ __docker_complete_user_group() { 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() { local path=$1 @@ -5504,7 +5507,7 @@ _docker() { # Create completion functions for all registered plugins local known_plugin_commands=() 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=${plugin_name#docker-} plugin_name=${plugin_name%%.*}