Files
pkgstash/internal/repomaint/repomaint.go
T

58 lines
965 B
Go

package repomaint
import (
"log/slog"
"os"
"github.com/ewpt3ch/pkgstash/internal/cache"
)
const (
repoArch = "os/x86_64"
dbSuffix = ".db.tar.gz"
pkgSuffix = "-x86_64.pkg.tar.zst"
)
type CacheClient interface {
FetchDB() error
Fetch(relpath string) (*cache.CacheFile, error)
}
type RepoSync struct {
c CacheClient
root *os.Root
repos []string
}
func NewRepoSync(c CacheClient, path string, repos []string) (*RepoSync, error) {
root, err := os.OpenRoot(path)
if err != nil {
return nil, err
}
rs := RepoSync{
c: c,
root: root,
repos: repos,
}
return &rs, nil
}
func (r *RepoSync) Sync() error {
for _, repo := range r.repos {
// create map of pkgname to filenames from current db
cachedPkgs, err := r.buildMap(repo)
slog.Warn("failed to read current db", "err", err)
// call cache db fetch
if err := r.c.FetchDB(); err != nil {
return err
}
}
// compare and fetch
// call cache cleanup
return nil
}