@@ -293,24 +293,28 @@ func (p *Packfile) getReaderDirect(h *ObjectHeader) (io.ReadCloser, error) {
293
293
case plumbing .CommitObject , plumbing .TreeObject , plumbing .BlobObject , plumbing .TagObject :
294
294
return p .s .ReadObject ()
295
295
case plumbing .REFDeltaObject :
296
- deltaRC , err := p .s .ReadObject ()
296
+ deltaBuf := bufPool .Get ().(* bytes.Buffer )
297
+ defer bufPool .Put (deltaBuf )
298
+ deltaBuf .Reset ()
299
+ _ , _ , err := p .s .NextObject (deltaBuf )
297
300
if err != nil {
298
301
return nil , err
299
302
}
300
- r , err := p .readREFDeltaObjectContent (h , deltaRC )
303
+ r , err := p .readREFDeltaObjectContent (h , deltaBuf )
301
304
if err != nil {
302
- _ = deltaRC .Close ()
303
305
return nil , err
304
306
}
305
307
return r , nil
306
308
case plumbing .OFSDeltaObject :
307
- deltaRC , err := p .s .ReadObject ()
309
+ deltaBuf := bufPool .Get ().(* bytes.Buffer )
310
+ defer bufPool .Put (deltaBuf )
311
+ deltaBuf .Reset ()
312
+ _ , _ , err := p .s .NextObject (deltaBuf )
308
313
if err != nil {
309
314
return nil , err
310
315
}
311
- r , err := p .readOFSDeltaObjectContent (h , deltaRC )
316
+ r , err := p .readOFSDeltaObjectContent (h , deltaBuf )
312
317
if err != nil {
313
- _ = deltaRC .Close ()
314
318
return nil , err
315
319
}
316
320
return r , nil
@@ -371,7 +375,7 @@ func (p *Packfile) fillREFDeltaObjectContent(obj plumbing.EncodedObject, ref plu
371
375
return p .fillREFDeltaObjectContentWithBuffer (obj , ref , buf )
372
376
}
373
377
374
- func (p * Packfile ) readREFDeltaObjectContent (h * ObjectHeader , deltaRC io.ReadCloser ) (io.ReadCloser , error ) {
378
+ func (p * Packfile ) readREFDeltaObjectContent (h * ObjectHeader , deltaRC io.Reader ) (io.ReadCloser , error ) {
375
379
var err error
376
380
377
381
base , ok := p .cacheGet (h .Reference )
@@ -415,7 +419,7 @@ func (p *Packfile) fillOFSDeltaObjectContent(obj plumbing.EncodedObject, offset
415
419
return p .fillOFSDeltaObjectContentWithBuffer (obj , offset , buf )
416
420
}
417
421
418
- func (p * Packfile ) readOFSDeltaObjectContent (h * ObjectHeader , deltaRC io.ReadCloser ) (io.ReadCloser , error ) {
422
+ func (p * Packfile ) readOFSDeltaObjectContent (h * ObjectHeader , deltaRC io.Reader ) (io.ReadCloser , error ) {
419
423
hash , err := p .FindHash (h .OffsetReference )
420
424
if err != nil {
421
425
return nil , err
@@ -426,14 +430,6 @@ func (p *Packfile) readOFSDeltaObjectContent(h *ObjectHeader, deltaRC io.ReadClo
426
430
return nil , err
427
431
}
428
432
429
- base , ok := p .cacheGet (h .Reference )
430
- if ! ok {
431
- base , err = p .Get (h .Reference )
432
- if err != nil {
433
- return nil , err
434
- }
435
- }
436
-
437
433
return ReaderFromDelta (h , base , deltaRC )
438
434
}
439
435
0 commit comments