package internal import ( "fmt" "hash/fnv" "os" "path/filepath" "sort" "strconv" "strings" ) func Hash(key []byte) uint64 { h := fnv.New64a() h.Write(key) return h.Sum64() } func Exists(path string) bool { _, err := os.Stat(path) return err == nil } func DirSize(path string) (int64, error) { var size int64 err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { if err != nil { return err } if !info.IsDir() { size += info.Size() } return err }) return size, err } func GetDatafiles(path string) ([]string, error) { fns, err := filepath.Glob(fmt.Sprintf("%s/*.data", path)) if err != nil { return nil, err } sort.Strings(fns) return fns, nil } func ParseIds(fns []string) ([]int, error) { var ids []int for _, fn := range fns { fn = filepath.Base(fn) ext := filepath.Ext(fn) if ext != ".data" { continue } id, err := strconv.ParseInt(strings.TrimSuffix(fn, ext), 10, 32) if err != nil { return nil, err } ids = append(ids, int(id)) } sort.Ints(ids) return ids, nil }