diff options
| author | 2025-11-22 08:00:00 +0800 | |
|---|---|---|
| committer | 2025-11-22 08:00:00 +0800 | |
| commit | a504524ca695f04692f5a2cf49952ed039a6a348 (patch) | |
| tree | 4d0ab8463f1bd9be22aab2af7b7d38f88ef24c77 /pack_pack.go | |
| parent | bufpool: Improve perf by using buckets of different size classes (diff) | |
| signature | No signature | |
bufpool: Return *Buffer
Diffstat (limited to 'pack_pack.go')
| -rw-r--r-- | pack_pack.go | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/pack_pack.go b/pack_pack.go index 6dcfb5d9..99f885a1 100644 --- a/pack_pack.go +++ b/pack_pack.go @@ -63,10 +63,10 @@ func (repo *Repository) packReadAt(loc packlocation, want Hash) (StoredObject, e return obj, err } -func (repo *Repository) packBodyResolveAtLocation(loc packlocation) (ObjectType, bufpool.Buffer, error) { +func (repo *Repository) packBodyResolveAtLocation(loc packlocation) (ObjectType, *bufpool.Buffer, error) { pf, err := repo.packFile(loc.PackPath) if err != nil { - return ObjectTypeInvalid, bufpool.Buffer{}, err + return ObjectTypeInvalid, nil, err } return repo.packBodyResolveWithin(pf, loc.Offset) } @@ -100,17 +100,17 @@ func packHeaderParse(data []byte) (ObjectType, int, int, error) { return ty, size, consumed, nil } -func packSectionInflate(pf *packFile, start uint64, sizeHint int) (bufpool.Buffer, error) { +func packSectionInflate(pf *packFile, start uint64, sizeHint int) (*bufpool.Buffer, error) { if start > uint64(len(pf.data)) { - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } body, err := zlibx.DecompressSized(pf.data[start:], sizeHint) if err != nil { - return bufpool.Buffer{}, err + return nil, err } if sizeHint > 0 && len(body.Bytes()) != sizeHint { body.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } return body, nil } @@ -228,13 +228,13 @@ func (repo *Repository) packTypeSizeWithin(pf *packFile, ofs uint64, seen map[pa } } -func (repo *Repository) packBodyResolveWithin(pf *packFile, ofs uint64) (ObjectType, bufpool.Buffer, error) { +func (repo *Repository) packBodyResolveWithin(pf *packFile, ofs uint64) (ObjectType, *bufpool.Buffer, error) { if pf == nil { - return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject + return ObjectTypeInvalid, nil, ErrInvalidObject } type deltaFrame struct { - delta bufpool.Buffer + delta *bufpool.Buffer } var frames []deltaFrame defer func() { @@ -244,16 +244,16 @@ func (repo *Repository) packBodyResolveWithin(pf *packFile, ofs uint64) (ObjectT }() var ( - body bufpool.Buffer + body *bufpool.Buffer bodyReady bool resultTy ObjectType ) - fail := func(err error) (ObjectType, bufpool.Buffer, error) { + fail := func(err error) (ObjectType, *bufpool.Buffer, error) { if bodyReady { body.Release() bodyReady = false } - return ObjectTypeInvalid, bufpool.Buffer{}, err + return ObjectTypeInvalid, nil, err } resolved := false @@ -351,20 +351,20 @@ func (repo *Repository) packBodyResolveWithin(pf *packFile, ofs uint64) (ObjectT return resultTy, body, nil } -func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { +func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) { pos := 0 baseBytes := base.Bytes() deltaBytes := delta.Bytes() srcSize, err := packVarintRead(deltaBytes, &pos) if err != nil { - return bufpool.Buffer{}, err + return nil, err } dstSize, err := packVarintRead(deltaBytes, &pos) if err != nil { - return bufpool.Buffer{}, err + return nil, err } if srcSize != len(baseBytes) { - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } out := bufpool.Borrow(dstSize) out.Resize(dstSize) @@ -381,7 +381,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x01 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } off |= int(deltaBytes[pos]) pos++ @@ -389,7 +389,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x02 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } off |= int(deltaBytes[pos]) << 8 pos++ @@ -397,7 +397,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x04 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } off |= int(deltaBytes[pos]) << 16 pos++ @@ -405,7 +405,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x08 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } off |= int(deltaBytes[pos]) << 24 pos++ @@ -413,7 +413,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x10 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } n |= int(deltaBytes[pos]) pos++ @@ -421,7 +421,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x20 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } n |= int(deltaBytes[pos]) << 8 pos++ @@ -429,7 +429,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { if op&0x40 != 0 { if pos >= len(deltaBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } n |= int(deltaBytes[pos]) << 16 pos++ @@ -439,7 +439,7 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { } if off+n > len(baseBytes) || outPos+n > len(outBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } copy(outBytes[outPos:], baseBytes[off:off+n]) outPos += n @@ -447,20 +447,20 @@ func packDeltaApply(base, delta bufpool.Buffer) (bufpool.Buffer, error) { n := int(op) if pos+n > len(deltaBytes) || outPos+n > len(outBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } copy(outBytes[outPos:], deltaBytes[pos:pos+n]) pos += n outPos += n default: out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } } if outPos != len(outBytes) { out.Release() - return bufpool.Buffer{}, ErrInvalidObject + return nil, ErrInvalidObject } return out, nil } |
