diff options
| author | 2026-02-21 18:44:45 +0800 | |
|---|---|---|
| committer | 2026-02-21 18:44:45 +0800 | |
| commit | 42ff39c8d340dabce79c4057a07a3932da295772 (patch) | |
| tree | f90f6f8ad9401122654409bec61a1f8ccec7bb32 /objectstore/packed/delta_plan.go | |
| parent | bufpool: Import (diff) | |
| signature | No 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.go | 47 |
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 -} |
