From b883976531fc4726a1e0260b88a9e21e151dd3b6 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Fri, 16 May 2025 19:36:25 +0200 Subject: [PATCH] cli/context/store: use stdlib errors, remove errdefs uses Signed-off-by: Sebastiaan van Stijn --- cli/context/store/errors.go | 28 ++++++++++++++++++++++++++++ cli/context/store/metadatastore.go | 11 +++++------ cli/context/store/store.go | 18 +++++++++--------- cli/context/store/tlsstore.go | 15 +++++++-------- 4 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 cli/context/store/errors.go diff --git a/cli/context/store/errors.go b/cli/context/store/errors.go new file mode 100644 index 0000000000..e85ce325a9 --- /dev/null +++ b/cli/context/store/errors.go @@ -0,0 +1,28 @@ +package store + +import cerrdefs "github.com/containerd/errdefs" + +func invalidParameter(err error) error { + if err == nil || cerrdefs.IsInvalidArgument(err) { + return err + } + return invalidParameterErr{err} +} + +type invalidParameterErr struct{ error } + +func (invalidParameterErr) InvalidParameter() {} + +func notFound(err error) error { + if err == nil || cerrdefs.IsNotFound(err) { + return err + } + return notFoundErr{err} +} + +type notFoundErr struct{ error } + +func (notFoundErr) NotFound() {} +func (e notFoundErr) Unwrap() error { + return e.error +} diff --git a/cli/context/store/metadatastore.go b/cli/context/store/metadatastore.go index 8f41a9c525..deec5cc9d7 100644 --- a/cli/context/store/metadatastore.go +++ b/cli/context/store/metadatastore.go @@ -5,16 +5,15 @@ package store import ( "encoding/json" + "errors" "fmt" "os" "path/filepath" "reflect" "sort" - "github.com/docker/docker/errdefs" "github.com/fvbommel/sortorder" "github.com/moby/sys/atomicwriter" - "github.com/pkg/errors" ) const ( @@ -64,7 +63,7 @@ func parseTypedOrMap(payload []byte, getter TypeGetter) (any, error) { func (s *metadataStore) get(name string) (Metadata, error) { m, err := s.getByID(contextdirOf(name)) if err != nil { - return m, errors.Wrapf(err, "context %q", name) + return m, fmt.Errorf("context %q: %w", name, err) } return m, nil } @@ -74,7 +73,7 @@ func (s *metadataStore) getByID(id contextdir) (Metadata, error) { bytes, err := os.ReadFile(fileName) if err != nil { if errors.Is(err, os.ErrNotExist) { - return Metadata{}, errdefs.NotFound(errors.Wrap(err, "context not found")) + return Metadata{}, notFound(fmt.Errorf("context not found: %w", err)) } return Metadata{}, err } @@ -99,7 +98,7 @@ func (s *metadataStore) getByID(id contextdir) (Metadata, error) { func (s *metadataStore) remove(name string) error { if err := os.RemoveAll(s.contextDir(contextdirOf(name))); err != nil { - return errors.Wrapf(err, "failed to remove metadata") + return fmt.Errorf("failed to remove metadata: %w", err) } return nil } @@ -119,7 +118,7 @@ func (s *metadataStore) list() ([]Metadata, error) { if errors.Is(err, os.ErrNotExist) { continue } - return nil, errors.Wrap(err, "failed to read metadata") + return nil, fmt.Errorf("failed to read metadata: %w", err) } res = append(res, c) } diff --git a/cli/context/store/store.go b/cli/context/store/store.go index 7020c7dd19..91d9c19c6b 100644 --- a/cli/context/store/store.go +++ b/cli/context/store/store.go @@ -10,6 +10,8 @@ import ( "bytes" _ "crypto/sha256" // ensure ids can be computed "encoding/json" + "errors" + "fmt" "io" "net/http" "path" @@ -17,9 +19,7 @@ import ( "strings" "github.com/docker/cli/internal/lazyregexp" - "github.com/docker/docker/errdefs" "github.com/opencontainers/go-digest" - "github.com/pkg/errors" ) const restrictedNamePattern = "^[a-zA-Z0-9][a-zA-Z0-9_.+-]+$" @@ -146,10 +146,10 @@ func (s *ContextStore) CreateOrUpdate(meta Metadata) error { // Remove deletes the context with the given name, if found. func (s *ContextStore) Remove(name string) error { if err := s.meta.remove(name); err != nil { - return errors.Wrapf(err, "failed to remove context %s", name) + return fmt.Errorf("failed to remove context %s: %w", name, err) } if err := s.tls.remove(name); err != nil { - return errors.Wrapf(err, "failed to remove context %s", name) + return fmt.Errorf("failed to remove context %s: %w", name, err) } return nil } @@ -226,7 +226,7 @@ func ValidateContextName(name string) error { return errors.New(`"default" is a reserved context name`) } if !restrictedNameRegEx.MatchString(name) { - return errors.Errorf("context name %q is invalid, names are validated against regexp %q", name, restrictedNamePattern) + return fmt.Errorf("context name %q is invalid, names are validated against regexp %q", name, restrictedNamePattern) } return nil } @@ -374,7 +374,7 @@ func importTar(name string, s Writer, reader io.Reader) error { continue } if err := isValidFilePath(hdr.Name); err != nil { - return errors.Wrap(err, hdr.Name) + return fmt.Errorf("%s: %w", hdr.Name, err) } if hdr.Name == metaFile { data, err := io.ReadAll(tr) @@ -400,7 +400,7 @@ func importTar(name string, s Writer, reader io.Reader) error { } } if !importedMetaFile { - return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) + return invalidParameter(errors.New("invalid context: no metadata found")) } return s.ResetTLSMaterial(name, &tlsData) } @@ -426,7 +426,7 @@ func importZip(name string, s Writer, reader io.Reader) error { continue } if err := isValidFilePath(zf.Name); err != nil { - return errors.Wrap(err, zf.Name) + return fmt.Errorf("%s: %w", zf.Name, err) } if zf.Name == metaFile { f, err := zf.Open() @@ -464,7 +464,7 @@ func importZip(name string, s Writer, reader io.Reader) error { } } if !importedMetaFile { - return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) + return invalidParameter(errors.New("invalid context: no metadata found")) } return s.ResetTLSMaterial(name, &tlsData) } diff --git a/cli/context/store/tlsstore.go b/cli/context/store/tlsstore.go index 5ce3e23104..c1f5f8caa2 100644 --- a/cli/context/store/tlsstore.go +++ b/cli/context/store/tlsstore.go @@ -1,12 +1,11 @@ package store import ( + "fmt" "os" "path/filepath" - "github.com/docker/docker/errdefs" "github.com/moby/sys/atomicwriter" - "github.com/pkg/errors" ) const tlsDir = "tls" @@ -39,9 +38,9 @@ func (s *tlsStore) getData(name, endpointName, filename string) ([]byte, error) data, err := os.ReadFile(filepath.Join(s.endpointDir(name, endpointName), filename)) if err != nil { if os.IsNotExist(err) { - return nil, errdefs.NotFound(errors.Errorf("TLS data for %s/%s/%s does not exist", name, endpointName, filename)) + return nil, notFound(fmt.Errorf("TLS data for %s/%s/%s does not exist", name, endpointName, filename)) } - return nil, errors.Wrapf(err, "failed to read TLS data for endpoint %s", endpointName) + return nil, fmt.Errorf("failed to read TLS data for endpoint %s: %w", endpointName, err) } return data, nil } @@ -49,14 +48,14 @@ func (s *tlsStore) getData(name, endpointName, filename string) ([]byte, error) // remove deletes all TLS data for the given context. func (s *tlsStore) remove(name string) error { if err := os.RemoveAll(s.contextDir(name)); err != nil { - return errors.Wrapf(err, "failed to remove TLS data") + return fmt.Errorf("failed to remove TLS data: %w", err) } return nil } func (s *tlsStore) removeEndpoint(name, endpointName string) error { if err := os.RemoveAll(s.endpointDir(name, endpointName)); err != nil { - return errors.Wrapf(err, "failed to remove TLS data for endpoint %s", endpointName) + return fmt.Errorf("failed to remove TLS data for endpoint %s: %w", endpointName, err) } return nil } @@ -68,7 +67,7 @@ func (s *tlsStore) listContextData(name string) (map[string]EndpointFiles, error if os.IsNotExist(err) { return map[string]EndpointFiles{}, nil } - return nil, errors.Wrapf(err, "failed to list TLS files for context %s", name) + return nil, fmt.Errorf("failed to list TLS files for context %s: %w", name, err) } r := make(map[string]EndpointFiles) for _, epFS := range epFSs { @@ -78,7 +77,7 @@ func (s *tlsStore) listContextData(name string) (map[string]EndpointFiles, error continue } if err != nil { - return nil, errors.Wrapf(err, "failed to list TLS files for endpoint %s", epFS.Name()) + return nil, fmt.Errorf("failed to list TLS files for endpoint %s: %w", epFS.Name(), err) } var files EndpointFiles for _, fs := range fss {