Merge pull request #8076 from cpuguy83/use_data_in_descriptor

fetch: Use data from descriptor when available.
This commit is contained in:
Fu Wei 2023-02-10 15:50:17 +08:00 committed by GitHub
commit 218b1a335e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 0 deletions

View File

@ -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

View File

@ -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