aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--loose.go2
-rw-r--r--pack_pack.go67
2 files changed, 14 insertions, 55 deletions
diff --git a/loose.go b/loose.go
index c1cd5645..207a5abe 100644
--- a/loose.go
+++ b/loose.go
@@ -104,7 +104,7 @@ func (repo *Repository) looseTypeSize(id Hash) (ObjectType, int64, error) {
}
defer func() { _ = f.Close() }()
- zr, err := zlib.NewReader(f)
+ zr, err := stdzlib.NewReader(f)
if err != nil {
return ObjectTypeInvalid, 0, err
}
diff --git a/pack_pack.go b/pack_pack.go
index a850e696..5d0f13ac 100644
--- a/pack_pack.go
+++ b/pack_pack.go
@@ -96,17 +96,6 @@ func (repo *Repository) packTypeSizeAtLocation(loc packlocation, seen map[packKe
return repo.packTypeSizeWithin(pf, loc.Offset, seen)
}
-func (repo *Repository) packTypeSizeByID(id Hash, seen map[packKey]struct{}) (ObjectType, int64, error) {
- loc, err := repo.packIndexFind(id)
- if err == nil {
- return repo.packTypeSizeAtLocation(loc, seen)
- }
- if !errors.Is(err, ErrNotFound) {
- return ObjectTypeInvalid, 0, err
- }
- return repo.looseTypeSize(id)
-}
-
func packHeaderRead(r io.Reader) (ObjectType, int, error) {
var b [1]byte
_, err := io.ReadFull(r, b[:])
@@ -130,53 +119,23 @@ func packHeaderRead(r io.Reader) (ObjectType, int, error) {
return ty, size, nil
}
-func packSectionInflate(pf *packFile, objectOfs uint64, r io.Reader, sizeHint int) (bufpool.Buffer, error) {
- if pf != nil {
- if br, ok := r.(*bytes.Reader); ok {
- total := br.Size()
- remaining := int64(br.Len())
- consumed := total - remaining
- start := objectOfs + uint64(consumed)
- if int64(consumed) < 0 || start > uint64(len(pf.data)) {
- return bufpool.Buffer{}, ErrInvalidObject
- }
- body, err := zlib.Decompress(pf.data[start:])
- if err != nil {
- return bufpool.Buffer{}, err
- }
- if sizeHint > 0 && len(body.Bytes()) != sizeHint {
- body.Release()
- return bufpool.Buffer{}, ErrInvalidObject
- }
- return body, nil
- }
+func packSectionInflate(pf *packFile, objectOfs uint64, r *bytes.Reader, sizeHint int) (bufpool.Buffer, error) {
+ total := r.Size()
+ remaining := int64(r.Len())
+ consumed := total - remaining
+ start := objectOfs + uint64(consumed)
+ if int64(consumed) < 0 || start > uint64(len(pf.data)) {
+ return bufpool.Buffer{}, ErrInvalidObject
}
-
- zr, err := zlib.NewReader(r)
+ body, err := zlib.Decompress(pf.data[start:])
if err != nil {
return bufpool.Buffer{}, err
}
- defer func() { _ = zr.Close() }()
-
- body := bufpool.Borrow(bufpool.DefaultBufferCap)
- var scratch [32 * 1024]byte
- for {
- n, err := zr.Read(scratch[:])
- if n > 0 {
- body.Append(scratch[:n])
- }
- if err == io.EOF {
- if sizeHint > 0 && len(body.Bytes()) != sizeHint {
- body.Release()
- return bufpool.Buffer{}, ErrInvalidObject
- }
- return body, nil
- }
- if err != nil {
- body.Release()
- return bufpool.Buffer{}, err
- }
+ if sizeHint > 0 && len(body.Bytes()) != sizeHint {
+ body.Release()
+ return bufpool.Buffer{}, ErrInvalidObject
}
+ return body, nil
}
func packDeltaReadOfsDistance(r io.Reader) (uint64, error) {
@@ -617,7 +576,7 @@ func (pf *packFile) Close() error {
return closeErr
}
-func (pf *packFile) cursor(ofs uint64) (io.Reader, error) {
+func (pf *packFile) cursor(ofs uint64) (*bytes.Reader, error) {
if pf == nil {
return nil, ErrInvalidObject
}