cli/command/plugins: use errors.Join instead of custom cli.Errors, and deprecate cli.Errors#5547
Merged
thaJeztah merged 2 commits intodocker:masterfrom Oct 22, 2024
Merged
Conversation
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 <github@gone.nl>
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 <github@gone.nl>
Codecov ReportAll modified and coverable lines are covered by tests ✅
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 |
This was referenced Oct 19, 2024
krissetto
approved these changes
Oct 22, 2024
vvoland
reviewed
Oct 22, 2024
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) |
Collaborator
There was a problem hiding this comment.
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.
Collaborator
There was a problem hiding this comment.
The correct way to use errors.Join in this case is to first collect errors into errs []error and then return errors.Join(errs...)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
After:
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 notsomething 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
- A picture of a cute animal (not mandatory but encouraged)