diff options
| author | 2026-03-04 08:26:56 +0800 | |
|---|---|---|
| committer | 2026-03-04 08:59:53 +0800 | |
| commit | ab7501be34032fb9e5c48726a68ae90a917af9eb (patch) | |
| tree | 20d005647569befea8133e953c3270e8fd2a2a5b /objectstore/packed/delta_plan.go | |
| parent | *: gofumpt (diff) | |
*: Lint
Diffstat (limited to 'objectstore/packed/delta_plan.go')
| -rw-r--r-- | objectstore/packed/delta_plan.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/objectstore/packed/delta_plan.go b/objectstore/packed/delta_plan.go index 5f2ae959..b0b0324c 100644 --- a/objectstore/packed/delta_plan.go +++ b/objectstore/packed/delta_plan.go @@ -38,6 +38,7 @@ func (store *Store) deltaBuildChain(start location) (deltaChain, error) { if _, ok := visited[current]; ok { return deltaChain{}, fmt.Errorf("objectstore/packed: delta cycle while resolving object") } + visited[current] = struct{}{} _, meta, err := store.entryMetaAt(current) @@ -48,6 +49,7 @@ func (store *Store) deltaBuildChain(start location) (deltaChain, error) { if packfmt.IsBaseObjectType(meta.ty) { chain.baseLoc = current chain.baseType = meta.ty + return chain, nil } @@ -57,10 +59,12 @@ func (store *Store) deltaBuildChain(start location) (deltaChain, error) { loc: current, dataOffset: meta.dataOffset, }) + next, err := store.lookup(meta.baseRefID) if err != nil { return deltaChain{}, err } + current = next case objecttype.TypeOfsDelta: chain.deltas = append(chain.deltas, deltaNode{ @@ -88,12 +92,15 @@ func deltaDeclaredSizeAt(pack *packFile, dataOffset int) (int64, error) { if err != nil { return 0, err } + defer func() { _ = reader.Close() }() br := bufio.NewReaderSize(reader, 32) + _, size, err := deltaapply.ReadHeaderSizes(br) if err != nil { return 0, err } + return int64(size), nil } |
