From deaa60118972c749b93c21b67b7cbde953b88c4b Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 3 Feb 2025 19:02:34 +0100 Subject: [PATCH 1/3] cli/command/config: minor cleanups - use apiClient instead of client for the API client to prevent shadowing imports. - use dockerCLI with Go's standard camelCase casing. Signed-off-by: Sebastiaan van Stijn --- cli/command/config/create.go | 10 +++++----- cli/command/config/inspect.go | 8 ++++---- cli/command/config/ls.go | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cli/command/config/create.go b/cli/command/config/create.go index 965d2ddc74d8..ed72e432ba30 100644 --- a/cli/command/config/create.go +++ b/cli/command/config/create.go @@ -48,10 +48,10 @@ func newConfigCreateCommand(dockerCli command.Cli) *cobra.Command { } // RunConfigCreate creates a config with the given options. -func RunConfigCreate(ctx context.Context, dockerCli command.Cli, options CreateOptions) error { - client := dockerCli.Client() +func RunConfigCreate(ctx context.Context, dockerCLI command.Cli, options CreateOptions) error { + apiClient := dockerCLI.Client() - var in io.Reader = dockerCli.In() + var in io.Reader = dockerCLI.In() if options.File != "-" { file, err := sequential.Open(options.File) if err != nil { @@ -78,11 +78,11 @@ func RunConfigCreate(ctx context.Context, dockerCli command.Cli, options CreateO Name: options.TemplateDriver, } } - r, err := client.ConfigCreate(ctx, spec) + r, err := apiClient.ConfigCreate(ctx, spec) if err != nil { return err } - fmt.Fprintln(dockerCli.Out(), r.ID) + fmt.Fprintln(dockerCLI.Out(), r.ID) return nil } diff --git a/cli/command/config/inspect.go b/cli/command/config/inspect.go index 7ae4a4c40435..41e9a4763cde 100644 --- a/cli/command/config/inspect.go +++ b/cli/command/config/inspect.go @@ -43,15 +43,15 @@ func newConfigInspectCommand(dockerCli command.Cli) *cobra.Command { } // RunConfigInspect inspects the given Swarm config. -func RunConfigInspect(ctx context.Context, dockerCli command.Cli, opts InspectOptions) error { - client := dockerCli.Client() +func RunConfigInspect(ctx context.Context, dockerCLI command.Cli, opts InspectOptions) error { + apiClient := dockerCLI.Client() if opts.Pretty { opts.Format = "pretty" } getRef := func(id string) (any, []byte, error) { - return client.ConfigInspectWithRaw(ctx, id) + return apiClient.ConfigInspectWithRaw(ctx, id) } f := opts.Format @@ -62,7 +62,7 @@ func RunConfigInspect(ctx context.Context, dockerCli command.Cli, opts InspectOp } configCtx := formatter.Context{ - Output: dockerCli.Out(), + Output: dockerCLI.Out(), Format: NewFormat(f, false), } diff --git a/cli/command/config/ls.go b/cli/command/config/ls.go index 5498506780d9..8ffaab4455fe 100644 --- a/cli/command/config/ls.go +++ b/cli/command/config/ls.go @@ -45,18 +45,18 @@ func newConfigListCommand(dockerCli command.Cli) *cobra.Command { } // RunConfigList lists Swarm configs. -func RunConfigList(ctx context.Context, dockerCli command.Cli, options ListOptions) error { - client := dockerCli.Client() +func RunConfigList(ctx context.Context, dockerCLI command.Cli, options ListOptions) error { + apiClient := dockerCLI.Client() - configs, err := client.ConfigList(ctx, types.ConfigListOptions{Filters: options.Filter.Value()}) + configs, err := apiClient.ConfigList(ctx, types.ConfigListOptions{Filters: options.Filter.Value()}) if err != nil { return err } format := options.Format if len(format) == 0 { - if len(dockerCli.ConfigFile().ConfigFormat) > 0 && !options.Quiet { - format = dockerCli.ConfigFile().ConfigFormat + if len(dockerCLI.ConfigFile().ConfigFormat) > 0 && !options.Quiet { + format = dockerCLI.ConfigFile().ConfigFormat } else { format = formatter.TableFormatKey } @@ -67,7 +67,7 @@ func RunConfigList(ctx context.Context, dockerCli command.Cli, options ListOptio }) configCtx := formatter.Context{ - Output: dockerCli.Out(), + Output: dockerCLI.Out(), Format: NewFormat(format, options.Quiet), } return FormatWrite(configCtx, configs) From e81d76ffe1f8e698e863f9a5b5aad2804a309d75 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 3 Feb 2025 19:03:33 +0100 Subject: [PATCH 2/3] cli/command/container: minor cleanups - use apiClient instead of client for the API client to prevent shadowing imports. - use dockerCLI with Go's standard camelCase casing. - suppress some errors to make my IDE and linters happier Signed-off-by: Sebastiaan van Stijn --- cli/command/container/cp.go | 31 ++++++++++++++++--------------- cli/command/container/exec.go | 12 ++++++------ cli/command/container/inspect.go | 12 +++++------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/cli/command/container/cp.go b/cli/command/container/cp.go index 3e975a81b62d..5eb3d7113c78 100644 --- a/cli/command/container/cp.go +++ b/cli/command/container/cp.go @@ -208,7 +208,7 @@ func resolveLocalPath(localPath string) (absPath string, err error) { return archive.PreserveTrailingDotOrSeparator(absPath, localPath), nil } -func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpConfig) (err error) { +func copyFromContainer(ctx context.Context, dockerCLI command.Cli, copyConfig cpConfig) (err error) { dstPath := copyConfig.destPath srcPath := copyConfig.sourcePath @@ -224,11 +224,11 @@ func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cp return err } - client := dockerCli.Client() + apiClient := dockerCLI.Client() // if client requests to follow symbol link, then must decide target file to be copied var rebaseName string if copyConfig.followLink { - srcStat, err := client.ContainerStatPath(ctx, copyConfig.container, srcPath) + srcStat, err := apiClient.ContainerStatPath(ctx, copyConfig.container, srcPath) // If the destination is a symbolic link, we should follow it. if err == nil && srcStat.Mode&os.ModeSymlink != 0 { @@ -247,14 +247,14 @@ func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cp ctx, cancel := signal.NotifyContext(ctx, os.Interrupt) defer cancel() - content, stat, err := client.CopyFromContainer(ctx, copyConfig.container, srcPath) + content, stat, err := apiClient.CopyFromContainer(ctx, copyConfig.container, srcPath) if err != nil { return err } defer content.Close() if dstPath == "-" { - _, err = io.Copy(dockerCli.Out(), content) + _, err = io.Copy(dockerCLI.Out(), content) return err } @@ -283,12 +283,12 @@ func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cp return archive.CopyTo(preArchive, srcInfo, dstPath) } - restore, done := copyProgress(ctx, dockerCli.Err(), copyFromContainerHeader, &copiedSize) + restore, done := copyProgress(ctx, dockerCLI.Err(), copyFromContainerHeader, &copiedSize) res := archive.CopyTo(preArchive, srcInfo, dstPath) cancel() <-done restore() - fmt.Fprintln(dockerCli.Err(), "Successfully copied", progressHumanSize(copiedSize), "to", dstPath) + _, _ = fmt.Fprintln(dockerCLI.Err(), "Successfully copied", progressHumanSize(copiedSize), "to", dstPath) return res } @@ -297,7 +297,7 @@ func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cp // about both the source and destination. The API is a simple tar // archive/extract API but we can use the stat info header about the // destination to be more informed about exactly what the destination is. -func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpConfig) (err error) { +func copyToContainer(ctx context.Context, dockerCLI command.Cli, copyConfig cpConfig) (err error) { srcPath := copyConfig.sourcePath dstPath := copyConfig.destPath @@ -309,10 +309,10 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo } } - client := dockerCli.Client() + apiClient := dockerCLI.Client() // Prepare destination copy info by stat-ing the container path. dstInfo := archive.CopyInfo{Path: dstPath} - dstStat, err := client.ContainerStatPath(ctx, copyConfig.container, dstPath) + dstStat, err := apiClient.ContainerStatPath(ctx, copyConfig.container, dstPath) // If the destination is a symbolic link, we should evaluate it. if err == nil && dstStat.Mode&os.ModeSymlink != 0 { @@ -324,7 +324,8 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo } dstInfo.Path = linkTarget - dstStat, err = client.ContainerStatPath(ctx, copyConfig.container, linkTarget) + dstStat, err = apiClient.ContainerStatPath(ctx, copyConfig.container, linkTarget) + // FIXME(thaJeztah): unhandled error (should this return?) } // Validate the destination path @@ -401,16 +402,16 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo } if copyConfig.quiet { - return client.CopyToContainer(ctx, copyConfig.container, resolvedDstPath, content, options) + return apiClient.CopyToContainer(ctx, copyConfig.container, resolvedDstPath, content, options) } ctx, cancel := signal.NotifyContext(ctx, os.Interrupt) - restore, done := copyProgress(ctx, dockerCli.Err(), copyToContainerHeader, &copiedSize) - res := client.CopyToContainer(ctx, copyConfig.container, resolvedDstPath, content, options) + restore, done := copyProgress(ctx, dockerCLI.Err(), copyToContainerHeader, &copiedSize) + res := apiClient.CopyToContainer(ctx, copyConfig.container, resolvedDstPath, content, options) cancel() <-done restore() - fmt.Fprintln(dockerCli.Err(), "Successfully copied", progressHumanSize(copiedSize), "to", copyConfig.container+":"+dstInfo.Path) + fmt.Fprintln(dockerCLI.Err(), "Successfully copied", progressHumanSize(copiedSize), "to", copyConfig.container+":"+dstInfo.Path) return res } diff --git a/cli/command/container/exec.go b/cli/command/container/exec.go index c2a1d447998b..2d5eca230de3 100644 --- a/cli/command/container/exec.go +++ b/cli/command/container/exec.go @@ -84,13 +84,13 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command { } // RunExec executes an `exec` command -func RunExec(ctx context.Context, dockerCli command.Cli, containerIDorName string, options ExecOptions) error { - execOptions, err := parseExec(options, dockerCli.ConfigFile()) +func RunExec(ctx context.Context, dockerCLI command.Cli, containerIDorName string, options ExecOptions) error { + execOptions, err := parseExec(options, dockerCLI.ConfigFile()) if err != nil { return err } - apiClient := dockerCli.Client() + apiClient := dockerCLI.Client() // We need to check the tty _before_ we do the ContainerExecCreate, because // otherwise if we error out we will leak execIDs on the server (and @@ -100,12 +100,12 @@ func RunExec(ctx context.Context, dockerCli command.Cli, containerIDorName strin return err } if !execOptions.Detach { - if err := dockerCli.In().CheckTty(execOptions.AttachStdin, execOptions.Tty); err != nil { + if err := dockerCLI.In().CheckTty(execOptions.AttachStdin, execOptions.Tty); err != nil { return err } } - fillConsoleSize(execOptions, dockerCli) + fillConsoleSize(execOptions, dockerCLI) response, err := apiClient.ContainerExecCreate(ctx, containerIDorName, *execOptions) if err != nil { @@ -124,7 +124,7 @@ func RunExec(ctx context.Context, dockerCli command.Cli, containerIDorName strin ConsoleSize: execOptions.ConsoleSize, }) } - return interactiveExec(ctx, dockerCli, execOptions, execID) + return interactiveExec(ctx, dockerCLI, execOptions, execID) } func fillConsoleSize(execOptions *container.ExecOptions, dockerCli command.Cli) { diff --git a/cli/command/container/inspect.go b/cli/command/container/inspect.go index 23b33b59fda2..2fc40c2eb832 100644 --- a/cli/command/container/inspect.go +++ b/cli/command/container/inspect.go @@ -42,11 +42,9 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { return cmd } -func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) error { - client := dockerCli.Client() - - getRefFunc := func(ref string) (any, []byte, error) { - return client.ContainerInspectWithRaw(ctx, ref, opts.size) - } - return inspect.Inspect(dockerCli.Out(), opts.refs, opts.format, getRefFunc) +func runInspect(ctx context.Context, dockerCLI command.Cli, opts inspectOptions) error { + apiClient := dockerCLI.Client() + return inspect.Inspect(dockerCLI.Out(), opts.refs, opts.format, func(ref string) (any, []byte, error) { + return apiClient.ContainerInspectWithRaw(ctx, ref, opts.size) + }) } From 632f179e8f3976bbbdd4f8612592263cc156463a Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 3 Feb 2025 19:04:54 +0100 Subject: [PATCH 3/3] cli/command/image: minor cleanups - use apiClient instead of client for the API client to prevent shadowing imports. - use dockerCLI with Go's standard camelCase casing. Signed-off-by: Sebastiaan van Stijn --- cli/command/image/inspect.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/cli/command/image/inspect.go b/cli/command/image/inspect.go index b0e4fba52735..a57dacbc6034 100644 --- a/cli/command/image/inspect.go +++ b/cli/command/image/inspect.go @@ -39,10 +39,9 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { return cmd } -func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) error { - client := dockerCli.Client() - getRefFunc := func(ref string) (any, []byte, error) { - return client.ImageInspectWithRaw(ctx, ref) - } - return inspect.Inspect(dockerCli.Out(), opts.refs, opts.format, getRefFunc) +func runInspect(ctx context.Context, dockerCLI command.Cli, opts inspectOptions) error { + apiClient := dockerCLI.Client() + return inspect.Inspect(dockerCLI.Out(), opts.refs, opts.format, func(ref string) (any, []byte, error) { + return apiClient.ImageInspectWithRaw(ctx, ref) + }) }