( p *packfile.Packfile, offset int64, hash plumbing.Hash, )
| 510 | } |
| 511 | |
| 512 | func (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 | |
| 551 | func (s *ObjectStorage) findObjectInPackfile(h plumbing.Hash) (plumbing.Hash, plumbing.Hash, int64) { |
| 552 | for packfile, index := range s.index { |
no test coverage detected