@@ -40,13 +40,9 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
4040 var m manifest
4141 mpath := filepath .Join ("blobs" , d .normalizeDigest ())
4242
43- f := func (path string , info os.FileInfo , r io.Reader ) error {
44- if info .IsDir () {
45- return nil
46- }
47-
48- if filepath .Clean (path ) != mpath {
49- return nil
43+ if err := w .walk (func (path string , info os.FileInfo , r io.Reader ) error {
44+ if info .IsDir () || filepath .Clean (path ) != mpath {
45+ return fmt .Errorf ("%s: manifest not found" , mpath )
5046 }
5147
5248 buf , err := ioutil .ReadAll (r )
@@ -66,15 +62,8 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
6662 return fmt .Errorf ("%s: no layers found" , path )
6763 }
6864
69- return errEOW
70- }
71-
72- switch err := w .walk (f ); err {
73- case nil :
74- return nil , fmt .Errorf ("%s: manifest not found" , mpath )
75- case errEOW :
76- // found, continue below
77- default :
65+ return nil
66+ }); err != nil {
7867 return nil , err
7968 }
8069
@@ -101,25 +90,22 @@ func (m *manifest) unpack(w walker, dest string) error {
10190 continue
10291 }
10392
104- f := func (path string , info os.FileInfo , r io.Reader ) error {
93+ if err := w . walk ( func (path string , info os.FileInfo , r io.Reader ) error {
10594 if info .IsDir () {
106- return nil
95+ return fmt . Errorf ( "%s: blob digest not found" , d . normalizeDigest ())
10796 }
10897
10998 dd , err := filepath .Rel ("blobs" , filepath .Clean (path ))
11099 if err != nil || d .normalizeDigest () != dd {
111- return nil // ignore
100+ return fmt . Errorf ( "%s: blob digest not found" , d . normalizeDigest ())
112101 }
113102
114103 if err := unpackLayer (dest , r ); err != nil {
115104 return errors .Wrap (err , "error extracting layer" )
116105 }
117106
118- return errEOW
119- }
120-
121- err := w .walk (f )
122- if err != nil && err != errEOW {
107+ return nil
108+ }); err != nil {
123109 return err
124110 }
125111 }
0 commit comments