cmd/pkgserver: make report argument optional

This allows serving metadata only without a populated report. This also removes the out-of-bounds read on args when no arguments are passed.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-03-11 01:47:49 +09:00
parent 887edcbe48
commit 534cac83fb

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
@@ -31,31 +32,43 @@ func main() {
msg := message.New(log.Default()) msg := message.New(log.Default())
c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error { c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error {
reportPath := args[0] var (
cache *pkg.Cache
report *rosa.Report
)
switch len(args) {
case 0:
break
case 1:
baseDir, err := check.NewAbs(flagBaseDir) baseDir, err := check.NewAbs(flagBaseDir)
if err != nil { if err != nil {
return err return err
} }
cache, err := pkg.Open(ctx, msg, 0, baseDir)
cache, err = pkg.Open(ctx, msg, 0, baseDir)
if err != nil { if err != nil {
return err return err
} }
defer cache.Close() defer cache.Close()
report, err := rosa.OpenReport(reportPath)
report, err = rosa.OpenReport(args[0])
if err != nil { if err != nil {
return err return err
} }
default:
return errors.New("pkgserver requires 1 argument")
}
var index packageIndex var index packageIndex
if err = index.populate(cache, report); err != nil { if err := index.populate(cache, report); err != nil {
return err return err
} }
uiRoutes(http.DefaultServeMux) uiRoutes(http.DefaultServeMux)
apiRoutes(http.DefaultServeMux, &index) apiRoutes(http.DefaultServeMux, &index)
err = http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil) return http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil)
if err != nil {
return err
}
return nil
}).Flag( }).Flag(
&flagBaseDir, &flagBaseDir,
"b", command.StringFlag(""), "b", command.StringFlag(""),