From a2d78071c1d80eb3c488a24e974c2892d7a60663 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 5 Mar 2025 11:29:56 +0100 Subject: [PATCH 1/2] cmd/docker: small performance optimizations for running hooks Order conditions to check for lightweight ones first; - checck if the command is not nil - dockerCli.Out().IsTerminal() is a lightweight getter - dockerCli.HooksEnabled() checks for env-vars, parses booleans, and reading the CLI config-file Signed-off-by: Sebastiaan van Stijn --- cmd/docker/docker.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/docker/docker.go b/cmd/docker/docker.go index 5183d455f9..05d1a59481 100644 --- a/cmd/docker/docker.go +++ b/cmd/docker/docker.go @@ -446,7 +446,7 @@ func runDocker(ctx context.Context, dockerCli *command.DockerCli) error { if err != nil || pluginmanager.IsPluginCommand(ccmd) { err := tryPluginRun(ctx, dockerCli, cmd, args[0], envs) if err == nil { - if dockerCli.HooksEnabled() && dockerCli.Out().IsTerminal() && ccmd != nil { + if ccmd != nil && dockerCli.Out().IsTerminal() && dockerCli.HooksEnabled() { pluginmanager.RunPluginHooks(ctx, dockerCli, cmd, ccmd, args) } return nil @@ -471,7 +471,7 @@ func runDocker(ctx context.Context, dockerCli *command.DockerCli) error { // If the command is being executed in an interactive terminal // and hook are enabled, run the plugin hooks. - if dockerCli.HooksEnabled() && dockerCli.Out().IsTerminal() && subCommand != nil { + if subCommand != nil && dockerCli.Out().IsTerminal() && dockerCli.HooksEnabled() { var errMessage string if err != nil { errMessage = err.Error() From 6d551e0a5a2a9f07d6946c38ee197aa923a40fb7 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 5 Mar 2025 11:36:55 +0100 Subject: [PATCH 2/2] cli/command: DockerCli.HooksEnabled check current before legacy The DOCKER_CLI_HINTS env-var is replaced by DOCKER_CLI_HOOKS; check the new env-var first, and only fall back to checking the legacy env-var if it's not set. Signed-off-by: Sebastiaan van Stijn --- cli/command/cli.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cli/command/cli.go b/cli/command/cli.go index 3cf576b112..1b5eca5963 100644 --- a/cli/command/cli.go +++ b/cli/command/cli.go @@ -194,16 +194,16 @@ func (cli *DockerCli) BuildKitEnabled() (bool, error) { // HooksEnabled returns whether plugin hooks are enabled. func (cli *DockerCli) HooksEnabled() bool { - // legacy support DOCKER_CLI_HINTS env var - if v := os.Getenv("DOCKER_CLI_HINTS"); v != "" { + // use DOCKER_CLI_HOOKS env var value if set and not empty + if v := os.Getenv("DOCKER_CLI_HOOKS"); v != "" { enabled, err := strconv.ParseBool(v) if err != nil { return false } return enabled } - // use DOCKER_CLI_HOOKS env var value if set and not empty - if v := os.Getenv("DOCKER_CLI_HOOKS"); v != "" { + // legacy support DOCKER_CLI_HINTS env var + if v := os.Getenv("DOCKER_CLI_HINTS"); v != "" { enabled, err := strconv.ParseBool(v) if err != nil { return false