fetch: Use data from descriptor when available.
OCI added support for a `data` field in a descriptor. This field is expected to contain the content being pointed to by the descriptor. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
parent
97480afdac
commit
13652e081e
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user