From 1d5ef4c427f73d0cb3e8b05ece9993070cb5ab7e Mon Sep 17 00:00:00 2001 From: Taylor Blau Date: Tue, 6 Jun 2017 10:49:10 -0600 Subject: [PATCH] git/odb: don't close Blob types after decoding --- git/odb/object_db.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/git/odb/object_db.go b/git/odb/object_db.go index d1e65ca2..f95a9a88 100644 --- a/git/odb/object_db.go +++ b/git/odb/object_db.go @@ -237,6 +237,12 @@ func (o *ObjectDatabase) open(sha []byte) (*ObjectReader, error) { // decode decodes an object given by the sha "sha []byte" into the given object // "into", or returns an error if one was encountered. +// +// Ordinarily, it closes the object's underlying io.ReadCloser (if it implements +// the `io.Closer` interface), but skips this if the "into" Object is of type +// BlobObjectType. Blob's don't exhaust the buffer completely (they instead +// maintain a handle on the blob's contents via an io.LimitedReader) and +// therefore cannot be closed until signaled explicitly by git/odb.Blob.Close(). func (o *ObjectDatabase) decode(sha []byte, into Object) error { r, err := o.open(sha) if err != nil { @@ -254,8 +260,10 @@ func (o *ObjectDatabase) decode(sha []byte, into Object) error { return err } - if err = r.Close(); err != nil { - return err + if into.Type() != BlobObjectType { + if err = r.Close(); err != nil { + return err + } } return nil }