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