From 6228cda7adf30ca757258d9af35c944a52fa13c0 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 7 Mar 2026 02:26:35 +0900 Subject: [PATCH] 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 --- cmd/mbf/main.go | 61 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index b7d6f61..121a19e 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", ) }