diff --git a/internal/app/app.go b/internal/app/app.go index 996ac0c..a448a57 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -27,10 +27,11 @@ type command struct { } type context struct { - stdout io.Writer - stderr io.Writer - cwd string - args []string + stdout io.Writer + stderr io.Writer + cwd string + args []string + logLevel logLevel } type spinner struct { @@ -230,9 +231,12 @@ func Run(args []string) (int, error) { printUsage(ctx.stdout) return 0, nil default: + cmdArgs, level := parseGlobalFlags(args[1:]) + ctx.logLevel = level + ctx.args = append([]string{args[0]}, cmdArgs...) for _, cmd := range commands { if cmd.name == args[0] { - spin.configure(ctx.stderr, isInteractiveTTY(ctx.stderr) && strings.TrimSpace(os.Getenv("CI")) == "") + spin.configure(ctx.stderr, isInteractiveTTY(ctx.stderr) && strings.TrimSpace(os.Getenv("CI")) == "" && ctx.logLevel == logLevelNormal) spin.start("running " + cmd.name) if err := cmd.run(ctx); err != nil { spin.stop() @@ -247,6 +251,24 @@ func Run(args []string) (int, error) { return 1, fmt.Errorf("unknown command %q", args[0]) } +func parseGlobalFlags(args []string) ([]string, logLevel) { + level := logLevelNormal + var filtered []string + for _, arg := range args { + switch arg { + case "--quiet": + level = logLevelQuiet + case "--verbose": + level = logLevelVerbose + case "--debug": + level = logLevelDebug + default: + filtered = append(filtered, arg) + } + } + return filtered, level +} + func newContext() (context, error) { cwd, err := os.Getwd() if err != nil { @@ -294,6 +316,9 @@ func runBuildModule(ctx context) error { } result, err := pipeline.BuildModuleWithProgress(p, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } spin.linebreak() fmt.Fprintf(ctx.stdout, "[build-module] %s\n", message) }) @@ -530,6 +555,9 @@ func runBuildHAKs(ctx context) error { if err != nil { return err } + if ctx.logLevel > opts.logLevel { + opts.logLevel = ctx.logLevel + } p, err = p.CloneWithHAKNames(opts.filteredHAKs) if err != nil { return err @@ -953,6 +981,9 @@ func runBuildTopData(ctx context) error { } result, err := topdata.BuildAndPackageWithOptions(p, opts, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } fmt.Fprintf(ctx.stdout, "[build-topdata] %s\n", message) }) if err != nil { @@ -993,6 +1024,9 @@ func runBuildTopPackage(ctx context) error { } result, err := topdata.BuildPackage(p, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } fmt.Fprintf(ctx.stdout, "[build-top-package] %s\n", message) }) if err != nil { @@ -1041,6 +1075,9 @@ func runCompareTopData(ctx context) error { } result, err := topdata.Compare(p, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } fmt.Fprintf(ctx.stdout, "[compare-topdata] %s\n", message) }) if err != nil { @@ -1077,6 +1114,9 @@ func runBuildWiki(ctx context) error { } result, err := topdata.BuildWikiWithOptions(p, opts, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } fmt.Fprintf(ctx.stdout, "[build-wiki] %s\n", message) }) if err != nil { @@ -1117,6 +1157,9 @@ func runDeployWiki(ctx context) error { } result, err := topdata.DeployWikiWithOptions(p, opts, func(message string) { + if ctx.logLevel == logLevelQuiet { + return + } fmt.Fprintf(ctx.stdout, "[deploy-wiki] %s\n", message) }) if err != nil { @@ -1384,7 +1427,7 @@ func loadProject(ctx context) (*project.Project, error) { if err != nil { return nil, err } - if ctx.stderr != nil { + if ctx.stderr != nil && ctx.logLevel != logLevelQuiet { fmt.Fprintf(ctx.stderr, "Loaded config: %s\n", p.ConfigSource.Name) if p.ConfigSource.Legacy { fmt.Fprintf(ctx.stderr, "Warning: %s is legacy repository configuration; migrate to %s.\n", project.LegacyConfigFile, project.ConfigFile) diff --git a/nwn-tool b/nwn-tool index 6a71ef6..0da5e11 100755 Binary files a/nwn-tool and b/nwn-tool differ