aboutsummaryrefslogtreecommitdiff
path: root/objectstore/packed/delta_plan.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-21 18:44:45 +0800
committerGravatar Runxi Yu2026-02-21 18:44:45 +0800
commit42ff39c8d340dabce79c4057a07a3932da295772 (patch)
treef90f6f8ad9401122654409bec61a1f8ccec7bb32 /objectstore/packed/delta_plan.go
parentbufpool: Import (diff)
signatureNo signature
format/delta/apply: Move core delta apply algorithm here
Diffstat (limited to 'objectstore/packed/delta_plan.go')
-rw-r--r--objectstore/packed/delta_plan.go47
1 files changed, 2 insertions, 45 deletions
diff --git a/objectstore/packed/delta_plan.go b/objectstore/packed/delta_plan.go
index 2fca7c0e..58e0fc0c 100644
--- a/objectstore/packed/delta_plan.go
+++ b/objectstore/packed/delta_plan.go
@@ -2,8 +2,8 @@ package packed
import (
"fmt"
- "io"
+ deltaapply "codeberg.org/lindenii/furgit/format/delta/apply"
"codeberg.org/lindenii/furgit/objecttype"
)
@@ -102,52 +102,9 @@ func deltaDeclaredSizeAt(pack *packFile, dataOffset int) (int64, error) {
}
defer func() { _ = reader.Close() }()
- _, size, err := readDeltaHeaderSizes(reader)
+ _, size, err := deltaapply.ReadHeaderSizes(reader)
if err != nil {
return 0, err
}
return int64(size), nil
}
-
-// readDeltaHeaderSizes reads the first two varints in one inflated delta stream.
-func readDeltaHeaderSizes(reader io.Reader) (int, int, error) {
- // Two Git varints are read here. Each can take up to 10 bytes.
- var buf [20]byte
- n := 0
-
- for {
- if n >= len(buf) {
- return 0, 0, fmt.Errorf("objectstore/packed: malformed delta varint")
- }
- if _, err := io.ReadFull(reader, buf[n:n+1]); err != nil {
- return 0, 0, fmt.Errorf("objectstore/packed: malformed delta varint: %w", err)
- }
- n++
- if buf[n-1]&0x80 == 0 {
- break
- }
- }
- pos := 0
- srcSize, err := readDeltaVarint(buf[:n], &pos)
- if err != nil {
- return 0, 0, err
- }
-
- for {
- if n >= len(buf) {
- return 0, 0, fmt.Errorf("objectstore/packed: malformed delta varint")
- }
- if _, err := io.ReadFull(reader, buf[n:n+1]); err != nil {
- return 0, 0, fmt.Errorf("objectstore/packed: malformed delta varint: %w", err)
- }
- n++
- if buf[n-1]&0x80 == 0 {
- break
- }
- }
- dstSize, err := readDeltaVarint(buf[:n], &pos)
- if err != nil {
- return 0, 0, err
- }
- return srcSize, dstSize, nil
-}