refactor for using repomaint

This commit is contained in:
2026-05-21 22:33:57 -06:00
parent d71a8eb946
commit 80fa7f8392
4 changed files with 23 additions and 6 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ func (s *Server) handlerRefresh(w http.ResponseWriter, req *http.Request) {
return return
} }
if err := s.c.Refresh(); err != nil { if err := s.rs.Sync(); err != nil {
slog.Error("refresh failed", "err", err) slog.Error("refresh failed", "err", err)
http.Error(w, "refresh failed", http.StatusInternalServerError) http.Error(w, "refresh failed", http.StatusInternalServerError)
return return
+10 -1
View File
@@ -11,6 +11,7 @@ import (
"testing" "testing"
"github.com/ewpt3ch/pkgstash/internal/cache" "github.com/ewpt3ch/pkgstash/internal/cache"
"github.com/ewpt3ch/pkgstash/internal/repomaint"
) )
var ( var (
@@ -36,7 +37,10 @@ func newTestServer(t *testing.T, mirrorHandler http.HandlerFunc) (*httptest.Serv
mirror := httptest.NewServer(mirrorHandler) mirror := httptest.NewServer(mirrorHandler)
t.Cleanup(func() { mirror.Close() }) t.Cleanup(func() { mirror.Close() })
c, err := cache.NewCache(t.TempDir(), []string{mirror.URL + "/"}, []string{"core"}) croot := t.TempDir()
mrepos := []string{"core"}
c, err := cache.NewCache(croot, []string{mirror.URL + "/"}, mrepos)
if err != nil { if err != nil {
t.Fatalf("failed to create cache: %v", err) t.Fatalf("failed to create cache: %v", err)
} }
@@ -44,10 +48,15 @@ func newTestServer(t *testing.T, mirrorHandler http.HandlerFunc) (*httptest.Serv
Port: "0", Port: "0",
Token: "testtoken", Token: "testtoken",
} }
rs, err := repomaint.NewRepoSync(c, croot, mrepos)
if err != nil {
t.Fatalf("failed to create repomain: %v", err)
}
logLevel := new(slog.LevelVar) logLevel := new(slog.LevelVar)
srv := &Server{ srv := &Server{
cfg: cfg, cfg: cfg,
c: c, c: c,
rs: rs,
logLevel: logLevel, logLevel: logLevel,
} }
+9 -1
View File
@@ -12,11 +12,13 @@ import (
"time" "time"
"github.com/ewpt3ch/pkgstash/internal/cache" "github.com/ewpt3ch/pkgstash/internal/cache"
"github.com/ewpt3ch/pkgstash/internal/repomaint"
) )
type Server struct { type Server struct {
cfg *Config cfg *Config
c *cache.Cache c *cache.Cache
rs *repomaint.RepoSync
logLevel *slog.LevelVar logLevel *slog.LevelVar
} }
@@ -58,9 +60,15 @@ func main() {
} }
defer c.Close() //nolint:errcheck // best effort cleanup on exit defer c.Close() //nolint:errcheck // best effort cleanup on exit
rs, err := repomaint.NewRepoSync(c, cfg.CacheRoot, cfg.MirroredRepos)
if err != nil {
slog.Error("failed to create repomaint", "err", err)
}
srv := &Server{ srv := &Server{
cfg: cfg, cfg: cfg,
c: c, c: c,
rs: rs,
logLevel: logLevel, logLevel: logLevel,
} }
@@ -69,7 +77,7 @@ func main() {
mux.HandleFunc("POST /api/refresh", srv.handlerRefresh) mux.HandleFunc("POST /api/refresh", srv.handlerRefresh)
mux.HandleFunc("POST /api/loglevel", srv.handlerLogLevel) mux.HandleFunc("POST /api/loglevel", srv.handlerLogLevel)
if err := srv.c.Refresh(); err != nil { if err := srv.c.FetchDB(); err != nil {
slog.Error("failed to refesh db files", "err", err) slog.Error("failed to refesh db files", "err", err)
//nolint:errcheck //already exiting //nolint:errcheck //already exiting
_ = c.Close() // best effort cleanup on exit _ = c.Close() // best effort cleanup on exit
+3 -3
View File
@@ -2,21 +2,21 @@ package cache
import "path/filepath" import "path/filepath"
func (c *Cache) Refresh() error { func (c *Cache) FetchDB() error {
if !c.refreshMu.TryLock() { if !c.refreshMu.TryLock() {
return nil return nil
} }
defer c.refreshMu.Unlock() defer c.refreshMu.Unlock()
for _, repo := range c.cfg.mirroredRepos { for _, repo := range c.cfg.mirroredRepos {
if err := c.refreshDB(repo); err != nil { if err := c.fetchDB(repo); err != nil {
return err return err
} }
} }
return nil return nil
} }
func (c *Cache) refreshDB(repo string) error { func (c *Cache) fetchDB(repo string) error {
dbFile := repo + ".db.tar.gz" dbFile := repo + ".db.tar.gz"
dbPath := filepath.Join(repo, "os/x86_64", dbFile) dbPath := filepath.Join(repo, "os/x86_64", dbFile)
_, _, err := c.getStream(dbPath) _, _, err := c.getStream(dbPath)