diff --git a/cmd/pkgserver/api_test.go b/cmd/pkgserver/api_test.go index 2337c92a..2f58af28 100644 --- a/cmd/pkgserver/api_test.go +++ b/cmd/pkgserver/api_test.go @@ -118,33 +118,31 @@ func TestAPIGet(t *testing.T) { checkStatus(t, resp, http.StatusOK) checkAPIHeader(t, w.Header()) checkPayloadFunc(t, resp, func(got *struct { - Count int `json:"count"` Values []*metadata `json:"values"` }) bool { - return got.Count == len(want) && - slices.EqualFunc(got.Values, want, func(a, b *metadata) bool { - return (a.Version == b.Version || - a.Version == rosa.Unversioned || - b.Version == rosa.Unversioned) && - a.HasReport == b.HasReport && - a.Name == b.Name && - a.Description == b.Description && - a.Website == b.Website - }) + return slices.EqualFunc(got.Values, want, func(a, b *metadata) bool { + return (a.Version == b.Version || + a.Version == rosa.Unversioned || + b.Version == rosa.Unversioned) && + a.HasReport == b.HasReport && + a.Name == b.Name && + a.Description == b.Description && + a.Website == b.Website + }) }) }) } - checkWithSuffix("declarationAscending", "?limit=2&index=0&sort=0", []*metadata{ - { - Metadata: rosa.GetMetadata(0), - Version: rosa.Std.Version(0), - }, + checkWithSuffix("declarationAscending", "?limit=2&index=1&sort=0", []*metadata{ { Metadata: rosa.GetMetadata(1), Version: rosa.Std.Version(1), }, + { + Metadata: rosa.GetMetadata(2), + Version: rosa.Std.Version(2), + }, }) checkWithSuffix("declarationAscending offset", "?limit=3&index=5&sort=0", []*metadata{ { diff --git a/cmd/pkgserver/index.go b/cmd/pkgserver/index.go index 1dcdd27f..536fd83a 100644 --- a/cmd/pkgserver/index.go +++ b/cmd/pkgserver/index.go @@ -50,7 +50,7 @@ type metadata struct { } // populate deterministically populates packageIndex, optionally with a report. -func (index *packageIndex) populate(cache *pkg.Cache, report *rosa.Report) (err error) { +func (index *packageIndex) populate(report *rosa.Report) (err error) { if report != nil { defer report.HandleAccess(&err)() index.handleAccess = report.HandleAccess @@ -58,6 +58,7 @@ func (index *packageIndex) populate(cache *pkg.Cache, report *rosa.Report) (err var work [rosa.PresetUnexportedStart]*metadata index.names = make(map[string]*metadata) + ir := pkg.NewIR() for p := range rosa.PresetUnexportedStart { m := metadata{ p: p, @@ -72,8 +73,8 @@ func (index *packageIndex) populate(cache *pkg.Cache, report *rosa.Report) (err m.Version = "" } - if cache != nil && report != nil { - id := cache.Ident(rosa.Std.Load(p)) + if report != nil { + id := ir.Ident(rosa.Std.Load(p)) m.ids = pkg.Encode(id.Value()) m.status, m.Size = report.ArtifactOf(id) m.HasReport = m.Size >= 0 diff --git a/cmd/pkgserver/index_test.go b/cmd/pkgserver/index_test.go new file mode 100644 index 00000000..1e4e1048 --- /dev/null +++ b/cmd/pkgserver/index_test.go @@ -0,0 +1,14 @@ +package main + +import "testing" + +// newIndex returns the address of a newly populated packageIndex. +func newIndex(t *testing.T) *packageIndex { + t.Helper() + + var index packageIndex + if err := index.populate(nil); err != nil { + t.Fatalf("populate: error = %v", err) + } + return &index +} diff --git a/cmd/pkgserver/main.go b/cmd/pkgserver/main.go index 6889dfe1..c1ca4c94 100644 --- a/cmd/pkgserver/main.go +++ b/cmd/pkgserver/main.go @@ -10,12 +10,9 @@ import ( "syscall" "time" - "hakurei.app/check" "hakurei.app/cmd/pkgserver/internal/ui" "hakurei.app/command" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" - "hakurei.app/message" ) const shutdownTimeout = 15 * time.Second @@ -25,17 +22,14 @@ func main() { log.SetPrefix("pkgserver: ") var ( - flagBaseDir string - flagAddr string + flagAddr string ) ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) defer stop() - msg := message.New(log.Default()) c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error { var ( - cache *pkg.Cache report *rosa.Report ) switch len(args) { @@ -43,17 +37,8 @@ func main() { break case 1: - baseDir, err := check.NewAbs(flagBaseDir) - if err != nil { - return err - } - - cache, err = pkg.Open(ctx, msg, 0, 0, 0, baseDir) - if err != nil { - return err - } - defer cache.Close() - + var err error + rosa.DropCaches(rosa.OptLLVMNoLTO) report, err = rosa.OpenReport(args[0]) if err != nil { return err @@ -61,12 +46,11 @@ func main() { default: return errors.New("pkgserver requires 1 argument") - } var index packageIndex index.search = make(searchCache) - if err := index.populate(cache, report); err != nil { + if err := index.populate(report); err != nil { return err } ticker := time.NewTicker(1 * time.Minute) @@ -98,10 +82,6 @@ func main() { }() return server.ListenAndServe() }).Flag( - &flagBaseDir, - "b", command.StringFlag(""), - "base directory for cache", - ).Flag( &flagAddr, "addr", command.StringFlag(":8067"), "TCP network address to listen on", diff --git a/cmd/pkgserver/main_test.go b/cmd/pkgserver/main_test.go index 6acaa8f6..c2a8e71b 100644 --- a/cmd/pkgserver/main_test.go +++ b/cmd/pkgserver/main_test.go @@ -10,17 +10,6 @@ import ( "testing" ) -// newIndex returns the address of a newly populated packageIndex. -func newIndex(t *testing.T) *packageIndex { - t.Helper() - - var index packageIndex - if err := index.populate(nil, nil); err != nil { - t.Fatalf("populate: error = %v", err) - } - return &index -} - // checkStatus checks response status code. func checkStatus(t *testing.T, resp *http.Response, want int) { t.Helper()