MCPcopy
hub / github.com/go-git/go-git / decodeDeltaObjectAt

Method decodeDeltaObjectAt

storage/filesystem/object.go:512–549  ·  view source on GitHub ↗
(
	p *packfile.Packfile,
	offset int64,
	hash plumbing.Hash,
)

Source from the content-addressed store, hash-verified

510}
511
512func (s *ObjectStorage) decodeDeltaObjectAt(
513 p *packfile.Packfile,
514 offset int64,
515 hash plumbing.Hash,
516) (plumbing.EncodedObject, error) {
517 scan := p.Scanner()
518 header, err := scan.SeekObjectHeader(offset)
519 if err != nil {
520 return nil, err
521 }
522
523 var base plumbing.Hash
524
525 switch header.Type {
526 case plumbing.REFDeltaObject:
527 base = header.Reference
528 case plumbing.OFSDeltaObject:
529 base, err = p.FindHash(header.OffsetReference)
530 if err != nil {
531 return nil, err
532 }
533 default:
534 return s.decodeObjectAt(p, offset)
535 }
536
537 obj := &plumbing.MemoryObject{}
538 obj.SetType(header.Type)
539 w, err := obj.Writer()
540 if err != nil {
541 return nil, err
542 }
543
544 if _, _, err := scan.NextObject(w); err != nil {
545 return nil, err
546 }
547
548 return newDeltaObject(obj, hash, base, header.Length), nil
549}
550
551func (s *ObjectStorage) findObjectInPackfile(h plumbing.Hash) (plumbing.Hash, plumbing.Hash, int64) {
552 for packfile, index := range s.index {

Callers 1

getFromPackfileMethod · 0.95

Calls 8

decodeObjectAtMethod · 0.95
SetTypeMethod · 0.95
WriterMethod · 0.95
ScannerMethod · 0.80
SeekObjectHeaderMethod · 0.80
NextObjectMethod · 0.80
newDeltaObjectFunction · 0.70
FindHashMethod · 0.65

Tested by

no test coverage detected