aboutsummaryrefslogtreecommitdiff
path: root/obj.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-22 08:00:00 +0800
committerGravatar Runxi Yu2025-11-22 08:00:00 +0800
commit8aa544539d452f310b6a88348f2a50bda017e317 (patch)
tree6dd059c709853c4296ea8fd837857a8a92bcb497 /obj.go
parentpack: Allocate the header on the stack instead (diff)
signatureNo signature
obj: call parseObjectBody in ReadObject instead of loose/pack readers
Diffstat (limited to 'obj.go')
-rw-r--r--obj.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/obj.go b/obj.go
index b82e0403..4156c36c 100644
--- a/obj.go
+++ b/obj.go
@@ -95,18 +95,25 @@ func parseObjectBody(ty ObjectType, id Hash, body []byte, repo *Repository) (Sto
// ReadObject resolves an ID.
func (repo *Repository) ReadObject(id Hash) (StoredObject, error) {
- obj, err := repo.looseRead(id)
+ ty, body, err := repo.looseRead(id)
if err == nil {
- return obj, nil
+ obj, parseErr := parseObjectBody(ty, id, body.Bytes(), repo)
+ body.Release()
+ return obj, parseErr
}
if !errors.Is(err, ErrNotFound) {
return nil, err
}
- obj, err = repo.packRead(id)
+ ty, body, err = repo.packRead(id)
if errors.Is(err, ErrNotFound) {
return nil, ErrInvalidObject
}
- return obj, err
+ if err != nil {
+ return nil, err
+ }
+ obj, parseErr := parseObjectBody(ty, id, body.Bytes(), repo)
+ body.Release()
+ return obj, parseErr
}
// ReadObjectTypeSize reports the object type and size.