MCPcopy Create free account
hub / github.com/go-git/go-git / resolveObject

Method resolveObject

plumbing/format/packfile/parser.go:513–568  ·  view source on GitHub ↗

resolveObject resolves an object from base, using information provided by o. This call has the side-effect of changing field values from the object info o: - Type: OFSDeltaObject may become the target type (e.g. Blob). - Size: The size may be update with the target size. - Hash: Zero hashes will be

(
	w io.Writer,
	o *objectInfo,
	base io.ReaderAt,
)

Source from the content-addressed store, hash-verified

511// delta object may lead to going backs and forths within base,
512// which is not supported by io.Reader.
513func (p *Parser) resolveObject(
514 w io.Writer,
515 o *objectInfo,
516 base io.ReaderAt,
517) error {
518 if !o.DiskType.IsDelta() {
519 return nil
520 }
521 buf := sync.GetBytesBuffer()
522 defer sync.PutBytesBuffer(buf)
523 err := p.readData(buf, o)
524 if err != nil {
525 return err
526 }
527
528 writers := []io.Writer{w}
529 var obj *plumbing.MemoryObject
530 var lwh objectHeaderWriter
531
532 if p.storage != nil {
533 if low, ok := p.storage.(lazyObjectWriter); ok {
534 ow, wh, err := low.LazyWriter()
535 if err != nil {
536 return err
537 }
538 lwh = wh
539
540 defer ow.Close()
541 writers = append(writers, ow)
542 } else {
543 obj = new(plumbing.MemoryObject)
544 ow, err := obj.Writer()
545 if err != nil {
546 return err
547 }
548
549 writers = append(writers, ow)
550 }
551 }
552
553 mw := io.MultiWriter(writers...)
554
555 err = applyPatchBase(o, base, buf, mw, lwh)
556 if err != nil {
557 return err
558 }
559
560 if obj != nil {
561 obj.SetType(o.Type)
562 obj.SetSize(o.Size()) // Size here is correct as it was populated by applyPatchBase.
563 if _, err := p.storage.SetEncodedObject(obj); err != nil {
564 return err
565 }
566 }
567 return err
568}
569
570func (p *Parser) readData(w io.Writer, o *objectInfo) error {

Callers 2

resolveDeltasMethod · 0.95
getMethod · 0.95

Calls 12

readDataMethod · 0.95
WriterMethod · 0.95
SetTypeMethod · 0.95
SetSizeMethod · 0.95
GetBytesBufferFunction · 0.92
PutBytesBufferFunction · 0.92
applyPatchBaseFunction · 0.85
LazyWriterMethod · 0.65
CloseMethod · 0.65
SizeMethod · 0.65
SetEncodedObjectMethod · 0.65
IsDeltaMethod · 0.45

Tested by

no test coverage detected