aboutsummaryrefslogtreecommitdiff
path: root/loose.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 /loose.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 'loose.go')
-rw-r--r--loose.go24
1 files changed, 12 insertions, 12 deletions
diff --git a/loose.go b/loose.go
index ae92ac87..991956a1 100644
--- a/loose.go
+++ b/loose.go
@@ -24,44 +24,44 @@ func (repo *Repository) loosePath(id Hash) (string, error) {
return filepath.Join("objects", hex[:2], hex[2:]), nil
}
-func (repo *Repository) looseRead(id Hash) (ObjectType, *bufpool.Buffer, error) {
+func (repo *Repository) looseRead(id Hash) (ObjectType, bufpool.Buffer, error) {
ty, body, err := repo.looseReadTyped(id)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
return ty, body, nil
}
-func (repo *Repository) looseReadTyped(id Hash) (ObjectType, *bufpool.Buffer, error) {
+func (repo *Repository) looseReadTyped(id Hash) (ObjectType, bufpool.Buffer, error) {
path, err := repo.loosePath(id)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
path = repo.repoPath(path)
f, err := os.Open(path)
if err != nil {
if os.IsNotExist(err) {
- return ObjectTypeInvalid, nil, ErrNotFound
+ return ObjectTypeInvalid, bufpool.Buffer{}, ErrNotFound
}
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
defer func() { _ = f.Close() }()
compressed, err := io.ReadAll(f)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
raw, err := zlibx.Decompress(compressed)
if err != nil {
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
rawBytes := raw.Bytes()
nul := bytes.IndexByte(rawBytes, 0)
if nul < 0 {
raw.Release()
- return ObjectTypeInvalid, nil, ErrInvalidObject
+ return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject
}
header := rawBytes[:nul]
@@ -70,17 +70,17 @@ func (repo *Repository) looseReadTyped(id Hash) (ObjectType, *bufpool.Buffer, er
ty, declaredSize, err := parseLooseHeader(header)
if err != nil {
raw.Release()
- return ObjectTypeInvalid, nil, err
+ return ObjectTypeInvalid, bufpool.Buffer{}, err
}
if declaredSize != int64(len(body)) {
raw.Release()
- return ObjectTypeInvalid, nil, ErrInvalidObject
+ return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject
}
copy(rawBytes, body)
raw.Resize(len(body))
// if !repo.verifyRawObject(raw, id) {
- // return ObjectTypeInvalid, nil, ErrInvalidObject
+ // return ObjectTypeInvalid, bufpool.Buffer{}, ErrInvalidObject
// }
return ty, raw, nil