diff --git a/image/config.go b/image/config.go index 4571199..8f3f0fa 100644 --- a/image/config.go +++ b/image/config.go @@ -20,6 +20,7 @@ import ( "fmt" "io" "io/ioutil" + "os" "path/filepath" "strconv" "strings" @@ -48,11 +49,11 @@ func findConfig(w walker, d *v1.Descriptor) (*v1.Image, error) { return err } - return errEOW + return nil }); err { - case nil: + case os.ErrNotExist: return nil, fmt.Errorf("%s: config not found", cpath) - case errEOW: + case nil: return &c, nil default: return nil, err diff --git a/image/manifest.go b/image/manifest.go index 83bce0f..9c29212 100644 --- a/image/manifest.go +++ b/image/manifest.go @@ -53,11 +53,11 @@ func findManifest(w walker, d *v1.Descriptor) (*v1.Manifest, error) { return err } - return errEOW + return nil }); err { - case nil: + case os.ErrNotExist: return nil, fmt.Errorf("%s: manifest not found", mpath) - case errEOW: + case nil: return &m, nil default: return nil, err @@ -110,11 +110,10 @@ func unpackManifest(m *v1.Manifest, w walker, dest string) (retErr error) { return errors.Wrap(err, "unpack: error extracting layer") } - return errEOW + return nil }); err { - case nil: + case os.ErrNotExist: return fmt.Errorf("%s: layer not found", dest) - case errEOW: default: return err } diff --git a/image/walker.go b/image/walker.go index 88b01df..9ec634b 100644 --- a/image/walker.go +++ b/image/walker.go @@ -126,28 +126,24 @@ func (w *tarWalker) get(desc v1.Descriptor, dst io.Writer) (int64, error) { } func (w *tarWalker) find(path string, ff findFunc) error { - done := false - f := func(relpath string, info os.FileInfo, rdr io.Reader) error { var err error - if done { - return nil - } if filepath.Clean(relpath) == path && !info.IsDir() { if err = ff(relpath, rdr); err != nil { return err } - done = true + return errEOW } return nil } - if err := w.walk(f); err != nil { - return errors.Wrapf(err, "find failed: unable to walk") - } - if !done { + switch err := w.walk(f); err { + case nil: return os.ErrNotExist + case errEOW: + default: + return errors.Wrapf(err, "find failed: unable to walk") } return nil @@ -305,28 +301,24 @@ func (w *zipWalker) get(desc v1.Descriptor, dst io.Writer) (int64, error) { } func (w *zipWalker) find(path string, ff findFunc) error { - done := false - f := func(relpath string, info os.FileInfo, rdr io.Reader) error { var err error - if done { - return nil - } if filepath.Clean(relpath) == path && !info.IsDir() { if err = ff(relpath, rdr); err != nil { return err } - done = true + return errEOW } return nil } - if err := w.walk(f); err != nil { - return errors.Wrapf(err, "find failed: unable to walk") - } - if !done { + switch err := w.walk(f); err { + case nil: return os.ErrNotExist + case errEOW: + default: + return errors.Wrapf(err, "find failed: unable to walk") } return nil