diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2020-07-10 06:16:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-10 06:16:33 +0200 |
commit | 58ac8636795fa45f6dbb3dcd6f3c3ebb01da8627 (patch) | |
tree | e6115028814e950d7c9cbe86cd997c390c47b3ca /plumbing/memory.go | |
parent | ee580ee459d4eac1c434203cc264523acfae724a (diff) | |
parent | d0d47c3781674db571b18df0544f66d93decf342 (diff) | |
download | go-git-58ac8636795fa45f6dbb3dcd6f3c3ebb01da8627.tar.gz |
Merge pull request #121 from riking/cache-seek
plumbing: memoryobject, make blob reader seekable
Diffstat (limited to 'plumbing/memory.go')
-rw-r--r-- | plumbing/memory.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/plumbing/memory.go b/plumbing/memory.go index b8e1e1b..21337cc 100644 --- a/plumbing/memory.go +++ b/plumbing/memory.go @@ -3,7 +3,6 @@ package plumbing import ( "bytes" "io" - "io/ioutil" ) // MemoryObject on memory Object implementation @@ -39,9 +38,11 @@ func (o *MemoryObject) Size() int64 { return o.sz } // afterwards func (o *MemoryObject) SetSize(s int64) { o.sz = s } -// Reader returns a ObjectReader used to read the object's content. +// Reader returns an io.ReadCloser used to read the object's content. +// +// For a MemoryObject, this reader is seekable. func (o *MemoryObject) Reader() (io.ReadCloser, error) { - return ioutil.NopCloser(bytes.NewBuffer(o.cont)), nil + return nopCloser{bytes.NewReader(o.cont)}, nil } // Writer returns a ObjectWriter used to write the object's content. @@ -59,3 +60,13 @@ func (o *MemoryObject) Write(p []byte) (n int, err error) { // Close releases any resources consumed by the object when it is acting as a // ObjectWriter. func (o *MemoryObject) Close() error { return nil } + +// nopCloser exposes the extra methods of bytes.Reader while nopping Close(). +// +// This allows clients to attempt seeking in a cached Blob's Reader. +type nopCloser struct { + *bytes.Reader +} + +// Close does nothing. +func (nc nopCloser) Close() error { return nil } |