Add reader option to local content reader at
Allows optimized copying from a local content file into another file. Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
parent
e14dca4a40
commit
bc01f8fc05
@ -37,10 +37,16 @@ var bufPool = sync.Pool{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type reader interface {
|
||||||
|
Reader() io.Reader
|
||||||
|
}
|
||||||
|
|
||||||
// NewReader returns a io.Reader from a ReaderAt
|
// NewReader returns a io.Reader from a ReaderAt
|
||||||
func NewReader(ra ReaderAt) io.Reader {
|
func NewReader(ra ReaderAt) io.Reader {
|
||||||
rd := io.NewSectionReader(ra, 0, ra.Size())
|
if rd, ok := ra.(reader); ok {
|
||||||
return rd
|
return rd.Reader()
|
||||||
|
}
|
||||||
|
return io.NewSectionReader(ra, 0, ra.Size())
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadBlob retrieves the entire contents of the blob from the provider.
|
// ReadBlob retrieves the entire contents of the blob from the provider.
|
||||||
|
@ -18,6 +18,7 @@ package local
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
@ -65,3 +66,7 @@ func (ra sizeReaderAt) Size() int64 {
|
|||||||
func (ra sizeReaderAt) Close() error {
|
func (ra sizeReaderAt) Close() error {
|
||||||
return ra.fp.Close()
|
return ra.fp.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ra sizeReaderAt) Reader() io.Reader {
|
||||||
|
return io.LimitReader(ra.fp, ra.size)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user