aboutsummaryrefslogtreecommitdiff
path: root/pack_pack.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-23 08:00:00 +0800
committerGravatar Runxi Yu2025-11-23 08:00:00 +0800
commit7eaa8614c897a97d241335982f4c04f1f27b0715 (patch)
treeab39c63adecab22464b3fa50be7073647bb817d4 /pack_pack.go
parentobj: Add ReadObjectTypeRaw (diff)
signatureNo signature
bufpool: Return bytes.Buffer, rather than a pointer to it
It's silly to allocate a bytes.Buffer struct, however small it is, every time Borrow is called, since the entire purpose is to reduce allocations.
Diffstat (limited to 'pack_pack.go')
-rw-r--r--pack_pack.go64
1 files changed, 32 insertions, 32 deletions
diff --git a/pack_pack.go b/pack_pack.go
index c7910462..6addf4fe 100644
--- a/pack_pack.go
+++ b/pack_pack.go
@@ -22,10 +22,10 @@ type packlocation struct {
Offset uint64
}
-func (repo *Repository) packRead(id Hash) (ObjectType, *bufpool.Buffer, error) {
+func (repo *Repository) packRead(id Hash) (ObjectType, bufpool.Buffer, error) {
loc, err := repo.packIndexFind(id)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
return repo.packReadAt(loc, id)
}
@@ -48,22 +48,22 @@ func (repo *Repository) packIndexFind(id Hash) (packlocation, error) {
return packlocation{}, ErrNotFound
}
-func (repo *Repository) packReadAt(loc packlocation, want Hash) (ObjectType, *bufpool.Buffer, error) {
+func (repo *Repository) packReadAt(loc packlocation, want Hash) (ObjectType, bufpool.Buffer, error) {
ty, body, err := repo.packBodyResolveAtLocation(loc)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
// if !repo.verifyTypedObject(ty, body.Bytes(), want) {
// body.Release()
- // return ObjectTypeInvalid, nil, ErrInvalidObject
+ // return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject
// }
return ty, body, nil
}
-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, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
return repo.packBodyResolveWithin(pf, loc.Offset)
}
@@ -97,17 +97,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 nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
body, err := zlibx.DecompressSized(pf.data[start:], sizeHint)
if err != nil {
- return nil, err
+ return bufpool.Buffer{}, err
}
if sizeHint > 0 && len(body.Bytes()) != sizeHint {
body.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
return body, nil
}
@@ -225,13 +225,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, nil, ErrInvalidObject
+ return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject
}
type deltaFrame struct {
- delta *bufpool.Buffer
+ delta bufpool.Buffer
}
var frames []deltaFrame
defer func() {
@@ -241,16 +241,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, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
resolved := false
@@ -348,20 +348,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 nil, err
+ return bufpool.Buffer{}, err
}
dstSize, err := packVarintRead(deltaBytes, &pos)
if err != nil {
- return nil, err
+ return bufpool.Buffer{}, err
}
if srcSize != len(baseBytes) {
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
out := bufpool.Borrow(dstSize)
out.Resize(dstSize)
@@ -378,7 +378,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x01 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
off |= int(deltaBytes[pos])
pos++
@@ -386,7 +386,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x02 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
off |= int(deltaBytes[pos]) << 8
pos++
@@ -394,7 +394,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x04 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
off |= int(deltaBytes[pos]) << 16
pos++
@@ -402,7 +402,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x08 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
off |= int(deltaBytes[pos]) << 24
pos++
@@ -410,7 +410,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x10 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
n |= int(deltaBytes[pos])
pos++
@@ -418,7 +418,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x20 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
n |= int(deltaBytes[pos]) << 8
pos++
@@ -426,7 +426,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
if op&0x40 != 0 {
if pos >= len(deltaBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
n |= int(deltaBytes[pos]) << 16
pos++
@@ -436,7 +436,7 @@ func packDeltaApply(base, delta *bufpool.Buffer) (*bufpool.Buffer, error) {
}
if off+n > len(baseBytes) || outPos+n > len(outBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
copy(outBytes[outPos:], baseBytes[off:off+n])
outPos += n
@@ -444,20 +444,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 nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
copy(outBytes[outPos:], deltaBytes[pos:pos+n])
pos += n
outPos += n
default:
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
}
if outPos != len(outBytes) {
out.Release()
- return nil, ErrInvalidObject
+ return bufpool.Buffer{}, ErrInvalidObject
}
return out, nil
}