aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-07 02:26:35 +0900
committerOphestra <cat@gensokyo.uk>2026-03-07 02:26:35 +0900
commit6228cda7adf30ca757258d9af35c944a52fa13c0 (patch)
tree70a36f61cb4e8614768569438eadcce593448634
parent86c336de88922187cc502c71e29ea05b2e51554f (diff)
cmd/mbf: optionally read report in info
This is a useful frontend for the report files before web server is ready. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--cmd/mbf/main.go61
1 files changed, 48 insertions, 13 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go
index b7d6f61a..121a19ed 100644
--- a/cmd/mbf/main.go
+++ b/cmd/mbf/main.go
@@ -134,15 +134,29 @@ func main() {
{
var (
flagStatus bool
+ flagReport string
)
c.NewCommand(
"info",
"Display out-of-band metadata of an artifact",
- func(args []string) error {
+ func(args []string) (err error) {
if len(args) == 0 {
return errors.New("info requires at least 1 argument")
}
+ var r *rosa.Report
+ if flagReport != "" {
+ if r, err = rosa.OpenReport(flagReport); err != nil {
+ return err
+ }
+ defer func() {
+ if closeErr := r.Close(); err == nil {
+ err = closeErr
+ }
+ }()
+ defer r.HandleAccess(&err)()
+ }
+
for i, name := range args {
if p, ok := rosa.ResolveName(name); !ok {
return fmt.Errorf("unknown artifact %q", name)
@@ -160,22 +174,38 @@ func main() {
strings.TrimSuffix(meta.Website, "/"))
}
+ const statusPrefix = "status : "
if flagStatus {
- const statusPrefix = "status : "
- r, err := cache.OpenStatus(rosa.Std.Load(p))
- if err != nil {
- if errors.Is(err, os.ErrNotExist) {
- fmt.Println(
- statusPrefix + name + " was never cured",
- )
+ if r == nil {
+ var f io.ReadSeekCloser
+ f, err = cache.OpenStatus(rosa.Std.Load(p))
+ if err != nil {
+ if errors.Is(err, os.ErrNotExist) {
+ fmt.Println(
+ statusPrefix + "not yet cured",
+ )
+ } else {
+ return
+ }
} else {
- return err
+ fmt.Print(statusPrefix)
+ _, err = io.Copy(os.Stdout, f)
+ if err = errors.Join(err, f.Close()); err != nil {
+ return
+ }
}
} else {
- fmt.Print(statusPrefix)
- _, err = io.Copy(os.Stdout, r)
- if err = errors.Join(err, r.Close()); err != nil {
- return err
+ status, n := r.ArtifactOf(cache.Ident(rosa.Std.Load(p)))
+ if status == nil {
+ fmt.Println(
+ statusPrefix + "not in report",
+ )
+ } else {
+ fmt.Println("size :", n)
+ fmt.Print(statusPrefix)
+ if _, err = os.Stdout.Write(status); err != nil {
+ return
+ }
}
}
}
@@ -192,6 +222,11 @@ func main() {
&flagStatus,
"status", command.BoolFlag(false),
"Display cure status if available",
+ ).
+ Flag(
+ &flagReport,
+ "report", command.StringFlag(""),
+ "Load cure status from this report file instead of cache",
)
}