diff options
| author | 2025-11-23 08:00:00 +0800 | |
|---|---|---|
| committer | 2025-11-23 08:00:00 +0800 | |
| commit | 7eaa8614c897a97d241335982f4c04f1f27b0715 (patch) | |
| tree | ab39c63adecab22464b3fa50be7073647bb817d4 /loose.go | |
| parent | obj: Add ReadObjectTypeRaw (diff) | |
| signature | No 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.go | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -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 |
