aboutsummaryrefslogtreecommitdiff
path: root/pack_pack.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-22 08:00:00 +0800
committerGravatar Runxi Yu2025-11-22 08:00:00 +0800
commita504524ca695f04692f5a2cf49952ed039a6a348 (patch)
tree4d0ab8463f1bd9be22aab2af7b7d38f88ef24c77 /pack_pack.go
parentbufpool: Improve perf by using buckets of different size classes (diff)
signatureNo signature
bufpool: Return *Buffer
Diffstat (limited to 'pack_pack.go')
-rw-r--r--pack_pack.go54
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
}