Merge pull request #8076 from cpuguy83/use_data_in_descriptor
fetch: Use data from descriptor when available.
This commit is contained in:
		@@ -59,6 +59,10 @@ func NewReader(ra ReaderAt) io.Reader {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// Avoid using this for large blobs, such as layers.
 | 
					// Avoid using this for large blobs, such as layers.
 | 
				
			||||||
func ReadBlob(ctx context.Context, provider Provider, desc ocispec.Descriptor) ([]byte, error) {
 | 
					func ReadBlob(ctx context.Context, provider Provider, desc ocispec.Descriptor) ([]byte, error) {
 | 
				
			||||||
 | 
						if int64(len(desc.Data)) == desc.Size && digest.FromBytes(desc.Data) == desc.Digest {
 | 
				
			||||||
 | 
							return desc.Data, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ra, err := provider.ReaderAt(ctx, desc)
 | 
						ra, err := provider.ReaderAt(ctx, desc)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@
 | 
				
			|||||||
package remotes
 | 
					package remotes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@@ -139,6 +140,10 @@ func Fetch(ctx context.Context, ingester content.Ingester, fetcher Fetcher, desc
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if desc.Size == int64(len(desc.Data)) {
 | 
				
			||||||
 | 
							return content.Copy(ctx, cw, bytes.NewReader(desc.Data), desc.Size, desc.Digest)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc, err := fetcher.Fetch(ctx, desc)
 | 
						rc, err := fetcher.Fetch(ctx, desc)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user