@@ -40,9 +40,9 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
4040 var m manifest
4141 mpath := filepath .Join ("blobs" , d .normalizeDigest ())
4242
43- if err := w .walk (func (path string , info os.FileInfo , r io.Reader ) error {
43+ switch err := w .walk (func (path string , info os.FileInfo , r io.Reader ) error {
4444 if info .IsDir () || filepath .Clean (path ) != mpath {
45- return fmt . Errorf ( "%s: manifest not found" , mpath )
45+ return nil
4646 }
4747
4848 buf , err := ioutil .ReadAll (r )
@@ -62,12 +62,15 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
6262 return fmt .Errorf ("%s: no layers found" , path )
6363 }
6464
65- return nil
66- }); err != nil {
65+ return errEOW
66+ }); err {
67+ case nil :
68+ return nil , fmt .Errorf ("%s: manifest not found" , mpath )
69+ case errEOW :
70+ return & m , nil
71+ default :
6772 return nil , err
6873 }
69-
70- return & m , nil
7174}
7275
7376func (m * manifest ) validate (w walker ) error {
@@ -90,26 +93,30 @@ func (m *manifest) unpack(w walker, dest string) error {
9093 continue
9194 }
9295
93- if err := w .walk (func (path string , info os.FileInfo , r io.Reader ) error {
96+ switch err := w .walk (func (path string , info os.FileInfo , r io.Reader ) error {
9497 if info .IsDir () {
95- return fmt . Errorf ( "%s: blob digest not found" , d . normalizeDigest ())
98+ return nil
9699 }
97100
98101 dd , err := filepath .Rel ("blobs" , filepath .Clean (path ))
99102 if err != nil || d .normalizeDigest () != dd {
100- return fmt . Errorf ( "%s: blob digest not found" , d . normalizeDigest ())
103+ return nil
101104 }
102105
103106 if err := unpackLayer (dest , r ); err != nil {
104107 return errors .Wrap (err , "error extracting layer" )
105108 }
106109
110+ return errEOW
111+ }); err {
112+ case nil :
113+ return fmt .Errorf ("%s: layer not found" , dest )
114+ case errEOW :
107115 return nil
108- }); err != nil {
116+ default :
109117 return err
110118 }
111119 }
112-
113120 return nil
114121}
115122
0 commit comments