diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-13 19:53:55 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-13 19:53:55 +0900 |
| commit | 345cffddc285869d300f4ea5e6da88827e903e50 (patch) | |
| tree | 0a8d5cfec3dc38a5a30a9ad5f079e179e251233c | |
| parent | 49163758c8af57142ba3101befab2b89fb9580ff (diff) | |
cmd/mbf: optionally export output
This is for debugging for now, as no program consumes this format yet.
Signed-off-by: Ophestra <cat@gensokyo.uk>
| -rw-r--r-- | cmd/mbf/main.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 81e2dfc2..2b4f2e10 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -434,7 +434,8 @@ func main() { { var ( - flagDump string + flagDump string + flagExport string ) c.NewCommand( "cure", @@ -447,10 +448,34 @@ func main() { return fmt.Errorf("unknown artifact %q", args[0]) } else if flagDump == "" { pathname, _, err := cache.Cure(rosa.Std.Load(p)) - if err == nil { - log.Println(pathname) + if err != nil { + return err } - return err + log.Println(pathname) + + if flagExport != "" { + msg.Verbosef("exporting %s to %s...", args[0], flagExport) + + var f *os.File + if f, err = os.OpenFile( + flagExport, + os.O_WRONLY|os.O_CREATE|os.O_EXCL, + 0400, + ); err != nil { + return err + } else if _, err = pkg.Flatten( + os.DirFS(pathname.String()), + ".", + f, + ); err != nil { + _ = f.Close() + return err + } else if err = f.Close(); err != nil { + return err + } + } + + return nil } else { f, err := os.OpenFile( flagDump, @@ -474,6 +499,11 @@ func main() { &flagDump, "dump", command.StringFlag(""), "Write IR to specified pathname and terminate", + ). + Flag( + &flagExport, + "export", command.StringFlag(""), + "Export cured artifact to specified pathname", ) } |
