Skip to content

Conversation

@thaJeztah
Copy link
Member

cli/command/plugins: use errors.Join instead of custom cli.Errors

This command was using a custom "multi-error" implementation, but it
had some limitations, and the formatting wasn't great.

This patch replaces it with Go's errors.Join.

Before:

docker plugin remove one two three
Error response from daemon: plugin "one" not found, Error response from daemon: plugin "two" not found, Error response from daemon: plugin "three" not found

After:

docker plugin remove one two three
Error response from daemon: plugin "one" not found
Error response from daemon: plugin "two" not found
Error response from daemon: plugin "three" not found

cli: deprecate Errors type

The Errors type is no longer used by the CLI itself, and this custom
"multi-error" implementation had both limitations (empty list not being
nil), as well as formatting not being great. All of this making it not
something to recommend, and better handled with Go's stdlib.

As far as I could find, there's no external consumers of this, but let's
deprecate first, and remove in the next release.

- Description for the changelog

- improve formatting of errors during `docker plugin remove` 
- go-sdk: deprecate cli.Errors type in favour of Go's errors.Join

- A picture of a cute animal (not mandatory but encouraged)

This command was using a custom "multi-error" implementation, but it
had some limitations, and the formatting wasn't great.

This patch replaces it with Go's errors.Join.

Before:

    docker plugin remove one two three
    Error response from daemon: plugin "one" not found, Error response from daemon: plugin "two" not found, Error response from daemon: plugin "three" not found

After:

    docker plugin remove one two three
    Error response from daemon: plugin "one" not found
    Error response from daemon: plugin "two" not found
    Error response from daemon: plugin "three" not found

Signed-off-by: Sebastiaan van Stijn <[email protected]>
The Errors type is no longer used by the CLI itself, and this custom
"multi-error" implementation had both limitations (empty list not being
`nil`), as well as formatting not being great. All of this making it not
something to recommend, and better handled with Go's stdlib.

As far as I could find, there's no external consumers of this, but let's
deprecate first, and remove in the next release.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
@thaJeztah thaJeztah added impact/deprecation kind/enhancement status/2-code-review area/plugins area/go-sdk Changes affecting the Go SDK impact/go-sdk Noteworthy (compatibility changes) in the Go SDK labels Oct 19, 2024
@thaJeztah thaJeztah added this to the 28.0.0 milestone Oct 19, 2024
@thaJeztah thaJeztah self-assigned this Oct 19, 2024
@codecov-commenter
Copy link

codecov-commenter commented Oct 19, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 59.57%. Comparing base (8a7c5ae) to head (d3bafa5).
Report is 25 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5547      +/-   ##
==========================================
- Coverage   59.57%   59.57%   -0.01%     
==========================================
  Files         345      345              
  Lines       29088    29085       -3     
==========================================
- Hits        17330    17327       -3     
  Misses      10788    10788              
  Partials      970      970              

@thaJeztah thaJeztah merged commit 1aab64d into docker:master Oct 22, 2024
@thaJeztah thaJeztah deleted the plugin_better_error branch October 22, 2024 08:42
Comment on lines +40 to +43
var errs error
for _, name := range opts.plugins {
if err := dockerCli.Client().PluginRemove(ctx, name, types.PluginRemoveOptions{Force: opts.force}); err != nil {
errs = append(errs, err)
errs = errors.Join(errs, err)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not the same as the previous one, as it always produce *joinError with []error of length 2. The first error is of type *errors.joinError which combines all of the previous errors.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The correct way to use errors.Join in this case is to first collect errors into errs []error and then return errors.Join(errs...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants