aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--loose.go8
-rw-r--r--obj.go15
-rw-r--r--pack_pack.go17
3 files changed, 21 insertions, 19 deletions
diff --git a/loose.go b/loose.go
index adfa8f05..ae92ac87 100644
--- a/loose.go
+++ b/loose.go
@@ -24,14 +24,12 @@ func (repo *Repository) loosePath(id Hash) (string, error) {
return filepath.Join("objects", hex[:2], hex[2:]), nil
}
-func (repo *Repository) looseRead(id Hash) (StoredObject, error) {
+func (repo *Repository) looseRead(id Hash) (ObjectType, *bufpool.Buffer, error) {
ty, body, err := repo.looseReadTyped(id)
if err != nil {
- return nil, err
+ return ObjectTypeInvalid, nil, err
}
- obj, err := parseObjectBody(ty, id, body.Bytes(), repo)
- body.Release()
- return obj, err
+ return ty, body, nil
}
func (repo *Repository) looseReadTyped(id Hash) (ObjectType, *bufpool.Buffer, error) {
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.
diff --git a/pack_pack.go b/pack_pack.go
index 1b98bcca..c7910462 100644
--- a/pack_pack.go
+++ b/pack_pack.go
@@ -22,10 +22,10 @@ type packlocation struct {
Offset uint64
}
-func (repo *Repository) packRead(id Hash) (StoredObject, error) {
+func (repo *Repository) packRead(id Hash) (ObjectType, *bufpool.Buffer, error) {
loc, err := repo.packIndexFind(id)
if err != nil {
- return nil, err
+ return ObjectTypeInvalid, nil, err
}
return repo.packReadAt(loc, id)
}
@@ -48,19 +48,16 @@ func (repo *Repository) packIndexFind(id Hash) (packlocation, error) {
return packlocation{}, ErrNotFound
}
-func (repo *Repository) packReadAt(loc packlocation, want Hash) (StoredObject, error) {
+func (repo *Repository) packReadAt(loc packlocation, want Hash) (ObjectType, *bufpool.Buffer, error) {
ty, body, err := repo.packBodyResolveAtLocation(loc)
if err != nil {
- return nil, err
+ return ObjectTypeInvalid, nil, err
}
- data := body.Bytes()
- // if !repo.verifyTypedObject(ty, data, want) {
+ // if !repo.verifyTypedObject(ty, body.Bytes(), want) {
// body.Release()
- // return nil, ErrInvalidObject
+ // return ObjectTypeInvalid, nil, ErrInvalidObject
// }
- obj, err := parseObjectBody(ty, want, data, repo)
- body.Release()
- return obj, err
+ return ty, body, nil
}
func (repo *Repository) packBodyResolveAtLocation(loc packlocation) (ObjectType, *bufpool.Buffer, error) {