diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-17 13:07:12 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-17 15:56:53 +0900 |
| commit | 30eb0d6a613ad268f6805ccbcdcabf158e7f526f (patch) | |
| tree | 07e55baa52748fd139e183017eeb43f5f64cee59 /cmd/mbf/internal/pkgserver | |
| parent | c2ff9c9fa55ea569a5e70ee90d2eb0b2ee2a0540 (diff) | |
internal/rosa: key metadata by string
For upcoming azalea integration. The API is quite ugly right now to ease migration.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd/mbf/internal/pkgserver')
| -rw-r--r-- | cmd/mbf/internal/pkgserver/api.go | 6 | ||||
| -rw-r--r-- | cmd/mbf/internal/pkgserver/api_test.go | 77 | ||||
| -rw-r--r-- | cmd/mbf/internal/pkgserver/index.go | 22 |
3 files changed, 18 insertions, 87 deletions
diff --git a/cmd/mbf/internal/pkgserver/api.go b/cmd/mbf/internal/pkgserver/api.go index 599ea522..e73b8bbe 100644 --- a/cmd/mbf/internal/pkgserver/api.go +++ b/cmd/mbf/internal/pkgserver/api.go @@ -30,7 +30,7 @@ var ( // handleInfo writes constant system information. func handleInfo(w http.ResponseWriter, _ *http.Request) { infoPayloadOnce.Do(func() { - infoPayload.Count = int(rosa.PresetUnexportedStart) + infoPayload.Count = int(rosa.Native().Count()) infoPayload.HakureiVersion = info.Version() }) // TODO(mae): cache entire response if no additional fields are planned @@ -91,7 +91,7 @@ func (index *packageIndex) handleGet(w http.ResponseWriter, r *http.Request) { if err != nil || i >= len(index.sorts[0]) || i < 0 { http.Error( w, "index must be an integer between 0 and "+ - strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + strconv.Itoa(len(index.sorts[0])-1), http.StatusBadRequest, ) return @@ -125,7 +125,7 @@ func (index *packageIndex) handleSearch(w http.ResponseWriter, r *http.Request) if err != nil || i >= len(index.sorts[0]) || i < 0 { http.Error( w, "index must be an integer between 0 and "+ - strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + strconv.Itoa(len(index.sorts[0])-1), http.StatusBadRequest, ) return diff --git a/cmd/mbf/internal/pkgserver/api_test.go b/cmd/mbf/internal/pkgserver/api_test.go index 8449c234..4c178fb9 100644 --- a/cmd/mbf/internal/pkgserver/api_test.go +++ b/cmd/mbf/internal/pkgserver/api_test.go @@ -3,7 +3,6 @@ package pkgserver import ( "net/http" "net/http/httptest" - "slices" "strconv" "testing" @@ -32,7 +31,7 @@ func TestAPIInfo(t *testing.T) { checkPayload(t, resp, struct { Count int `json:"count"` HakureiVersion string `json:"hakurei_version"` - }{int(rosa.PresetUnexportedStart), info.Version()}) + }{rosa.Native().Count(), info.Version()}) } func TestAPIGet(t *testing.T) { @@ -96,8 +95,8 @@ func TestAPIGet(t *testing.T) { t.Run("index", func(t *testing.T) { t.Parallel() checkValidate( - t, "limit=1&sort=0&index", 0, int(rosa.PresetUnexportedStart-1), - "index must be an integer between 0 and "+strconv.Itoa(int(rosa.PresetUnexportedStart-1)), + t, "limit=1&sort=0&index", 0, rosa.Native().Count()-1, + "index must be an integer between 0 and "+strconv.Itoa(rosa.Native().Count()-1), ) }) @@ -108,74 +107,4 @@ func TestAPIGet(t *testing.T) { "sort must be an integer between 0 and "+strconv.Itoa(int(sortOrderEnd)), ) }) - - checkWithSuffix := func(name, suffix string, want []*metadata) { - t.Run(name, func(t *testing.T) { - t.Parallel() - - w := newRequest(suffix) - resp := w.Result() - checkStatus(t, resp, http.StatusOK) - checkAPIHeader(t, w.Header()) - checkPayloadFunc(t, resp, func(got *struct { - Values []*metadata `json:"values"` - }) bool { - 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=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{ - { - Metadata: rosa.GetMetadata(5), - Version: rosa.Std.Version(5), - }, - { - Metadata: rosa.GetMetadata(6), - Version: rosa.Std.Version(6), - }, - { - Metadata: rosa.GetMetadata(7), - Version: rosa.Std.Version(7), - }, - }) - checkWithSuffix("declarationDescending", "?limit=3&index=0&sort=1", []*metadata{ - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 1), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 1), - }, - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 2), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 2), - }, - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 3), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 3), - }, - }) - checkWithSuffix("declarationDescending offset", "?limit=1&index=37&sort=1", []*metadata{ - { - Metadata: rosa.GetMetadata(rosa.PresetUnexportedStart - 38), - Version: rosa.Std.Version(rosa.PresetUnexportedStart - 38), - }, - }) } diff --git a/cmd/mbf/internal/pkgserver/index.go b/cmd/mbf/internal/pkgserver/index.go index 911183da..5711f810 100644 --- a/cmd/mbf/internal/pkgserver/index.go +++ b/cmd/mbf/internal/pkgserver/index.go @@ -23,7 +23,7 @@ const ( // packageIndex refers to metadata by name and various sort orders. type packageIndex struct { - sorts [sortOrderEnd + 1][rosa.PresetUnexportedStart]*metadata + sorts [sortOrderEnd + 1][]*metadata names map[string]*metadata search searchCache // Taken from [rosa.Report] if available. @@ -32,8 +32,8 @@ type packageIndex struct { // metadata holds [rosa.Metadata] extended with additional information. type metadata struct { - p rosa.PArtifact - *rosa.Metadata + handle rosa.ArtifactH + *rosa.Artifact // Populated via [rosa.Toolchain.Version], [rosa.Unversioned] is equivalent // to the zero value. Otherwise, the zero value is invalid. @@ -56,15 +56,17 @@ func (index *packageIndex) populate(report *rosa.Report) (err error) { index.handleAccess = report.HandleAccess } - var work [rosa.PresetUnexportedStart]*metadata + handles := rosa.Native().Collect() + work := make([]*metadata, len(handles)) index.names = make(map[string]*metadata) ir := pkg.NewIR() - for p := range rosa.PresetUnexportedStart { + for i, handle := range handles { + a, version := rosa.Native().Load(rosa.Std, handle) m := metadata{ - p: p, + handle: handle, - Metadata: rosa.GetMetadata(p), - Version: rosa.Std.Version(p), + Artifact: rosa.Native().MustGet(handle), + Version: version, } if m.Version == "" { return errors.New("invalid version from " + m.Name) @@ -74,13 +76,13 @@ func (index *packageIndex) populate(report *rosa.Report) (err error) { } if report != nil { - id := ir.Ident(rosa.Std.Load(p)) + id := ir.Ident(a) m.ids = pkg.Encode(id.Value()) m.status, m.Size = report.ArtifactOf(id) m.HasReport = m.Size >= 0 } - work[p] = &m + work[i] = &m index.names[m.Name] = &m } |
