Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions image/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strconv"
"strings"
Expand Down Expand Up @@ -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
Expand Down
11 changes: 5 additions & 6 deletions image/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down
32 changes: 12 additions & 20 deletions image/walker.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down