From dd027e1e5379019bfeffc48ff1274b5e05581ff3 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 8 Mar 2026 15:33:36 +0800 Subject: objectstore: Refresh * Add manual Refresh for various objectstore's * RefreshPolicy option * Refreshable MRU and atomic snapshotting --- objectstore/packed/new.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'objectstore/packed/new.go') diff --git a/objectstore/packed/new.go b/objectstore/packed/new.go index 407bc1d0..c8e7338e 100644 --- a/objectstore/packed/new.go +++ b/objectstore/packed/new.go @@ -1,24 +1,31 @@ package packed import ( + "fmt" "os" "codeberg.org/lindenii/furgit/objectid" ) // New creates a packed-object store rooted at an objects/pack directory. -func New(root *os.Root, algo objectid.Algorithm) (*Store, error) { +func New(root *os.Root, algo objectid.Algorithm, opts Options) (*Store, error) { if algo.Size() == 0 { return nil, objectid.ErrInvalidAlgorithm } + switch opts.RefreshPolicy { + case RefreshPolicyOnMissing, RefreshPolicyNever: + default: + return nil, fmt.Errorf("objectstore/packed: invalid refresh policy %d", opts.RefreshPolicy) + } + return &Store{ - root: root, - algo: algo, - candidateByPack: make(map[string]packCandidate), - candidateNodeByPack: make(map[string]*packCandidateNode), - idxByPack: make(map[string]*idxFile), - packs: make(map[string]*packFile), - deltaCache: newDeltaCache(defaultDeltaCacheMaxBytes), + root: root, + algo: algo, + refreshPolicy: opts.RefreshPolicy, + mruNodeByPack: make(map[string]*packCandidateNode), + idxByPack: make(map[string]*idxFile), + packs: make(map[string]*packFile), + deltaCache: newDeltaCache(defaultDeltaCacheMaxBytes), }, nil } -- cgit v1.3.1-10-gc9f91