aboutsummaryrefslogtreecommitdiff
path: root/object/storer/packed/idx_open.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-27 09:08:40 +0000
committerGravatar Runxi Yu2026-03-27 09:08:40 +0000
commitd7e90798170265b37ea5f980f94ca310cfda3180 (patch)
tree89921ca5cb6dd5aaefa3c0ae72352381261cb1e6 /object/storer/packed/idx_open.go
parentCONTRIBUTING: Fix submitting changes deadlines (diff)
signatureNo signature
object/store: Rename from object/storer
Diffstat (limited to 'object/storer/packed/idx_open.go')
-rw-r--r--object/storer/packed/idx_open.go98
1 files changed, 0 insertions, 98 deletions
diff --git a/object/storer/packed/idx_open.go b/object/storer/packed/idx_open.go
deleted file mode 100644
index 3e1d7d74..00000000
--- a/object/storer/packed/idx_open.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package packed
-
-import (
- "fmt"
- "os"
- "syscall"
-
- "codeberg.org/lindenii/furgit/internal/intconv"
- objectid "codeberg.org/lindenii/furgit/object/id"
-)
-
-// openIndex returns one opened and parsed index, caching it by pack basename.
-func (store *Store) openIndex(candidate packCandidate) (*idxFile, error) {
- store.idxMu.RLock()
-
- index, ok := store.idxByPack[candidate.packName]
- if ok {
- store.idxMu.RUnlock()
-
- return index, nil
- }
-
- store.idxMu.RUnlock()
-
- index, err := openIdxFile(store.root, candidate.idxName, candidate.packName, store.algo)
- if err != nil {
- return nil, err
- }
-
- store.idxMu.Lock()
-
- existing, ok := store.idxByPack[candidate.packName]
- if ok {
- store.idxMu.Unlock()
-
- _ = index.close()
-
- return existing, nil
- }
-
- store.idxByPack[candidate.packName] = index
- store.idxMu.Unlock()
-
- return index, nil
-}
-
-// openIdxFile maps and validates one idx v2 file.
-func openIdxFile(root *os.Root, idxName, packName string, algo objectid.Algorithm) (*idxFile, error) {
- file, err := root.Open(idxName)
- if err != nil {
- return nil, err
- }
-
- info, err := file.Stat()
- if err != nil {
- _ = file.Close()
-
- return nil, err
- }
-
- size := info.Size()
- if size < 0 || size > int64(int(^uint(0)>>1)) {
- _ = file.Close()
-
- return nil, fmt.Errorf("objectstorer/packed: idx %q has unsupported size", idxName)
- }
-
- fd, err := intconv.UintptrToInt(file.Fd())
- if err != nil {
- _ = file.Close()
-
- return nil, err
- }
-
- data, err := syscall.Mmap(fd, 0, int(size), syscall.PROT_READ, syscall.MAP_PRIVATE)
- if err != nil {
- _ = file.Close()
-
- return nil, err
- }
-
- index := &idxFile{
- idxName: idxName,
- packName: packName,
- algo: algo,
- file: file,
- data: data,
- }
-
- err = index.parse()
- if err != nil {
- _ = index.close()
-
- return nil, err
- }
-
- return index, nil
-}