diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2020-05-24 19:25:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-24 19:25:08 +0200 |
commit | 8019144b6534ff58ad234a355e5b143f1c99b45e (patch) | |
tree | 5a67682c34bb20a826ebf430f11181d6892fc0e7 /plumbing/format/packfile/parser.go | |
parent | e7f544844d6d736acfd9d75ee0d4a9d37f450103 (diff) | |
parent | 10199949b9e5a71f72241c4bb23f3d733287065c (diff) | |
download | go-git-8019144b6534ff58ad234a355e5b143f1c99b45e.tar.gz |
Merge pull request #73 from WKBae/close_objectv5.1.0
Close Reader & Writer of EncodedObject after use
Diffstat (limited to 'plumbing/format/packfile/parser.go')
-rw-r--r-- | plumbing/format/packfile/parser.go | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/plumbing/format/packfile/parser.go b/plumbing/format/packfile/parser.go index d411c5b..4b5a570 100644 --- a/plumbing/format/packfile/parser.go +++ b/plumbing/format/packfile/parser.go @@ -4,11 +4,12 @@ import ( "bytes" "errors" "io" - "io/ioutil" + stdioutil "io/ioutil" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/cache" "github.com/go-git/go-git/v5/plumbing/storer" + "github.com/go-git/go-git/v5/utils/ioutil" ) var ( @@ -283,7 +284,7 @@ func (p *Parser) resolveDeltas() error { if !obj.IsDelta() && len(obj.Children) > 0 { for _, child := range obj.Children { - if err := p.resolveObject(ioutil.Discard, child, content); err != nil { + if err := p.resolveObject(stdioutil.Discard, child, content); err != nil { return err } } @@ -298,7 +299,7 @@ func (p *Parser) resolveDeltas() error { return nil } -func (p *Parser) get(o *objectInfo, buf *bytes.Buffer) error { +func (p *Parser) get(o *objectInfo, buf *bytes.Buffer) (err error) { if !o.ExternalRef { // skip cache check for placeholder parents b, ok := p.cache.Get(o.Offset) if ok { @@ -310,17 +311,21 @@ func (p *Parser) get(o *objectInfo, buf *bytes.Buffer) error { // If it's not on the cache and is not a delta we can try to find it in the // storage, if there's one. External refs must enter here. if p.storage != nil && !o.Type.IsDelta() { - e, err := p.storage.EncodedObject(plumbing.AnyObject, o.SHA1) + var e plumbing.EncodedObject + e, err = p.storage.EncodedObject(plumbing.AnyObject, o.SHA1) if err != nil { return err } o.Type = e.Type() - r, err := e.Reader() + var r io.ReadCloser + r, err = e.Reader() if err != nil { return err } + defer ioutil.CheckClose(r, &err) + _, err = buf.ReadFrom(io.LimitReader(r, e.Size())) return err } |