mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 07:18:54 +00:00
commands: Fix --panicOnWarning flag having no effect with module version warnings
The --panicOnWarning flag was not wired into the root command's logger, so warnings emitted during config loading (such as module version incompatibility warnings) would not trigger a panic. Bind the panicOnWarning flag to the rootCommand struct and set the PanicOnWarningHook on the logger created in createLogger. Fixes #14524 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
* Never export symbols that's not needed outside of the package.
|
||||
* Avoid global state at (almost) all cost.
|
||||
* This is a project with a long history; assume that a similiar problem has been solved before, look hard for helper functions before creating new ones.
|
||||
* In tests, use `qt` matchers (e.g. `b.Assert(err, qt.ErrorMatches, ...)`) instead of raw `if`/`t.Fatal` checks.
|
||||
* Use `./check.sh ./somepackage/...` when iterating.
|
||||
* Use `./check.sh` when you're done.
|
||||
|
||||
|
||||
@@ -131,6 +131,7 @@ type rootCommand struct {
|
||||
gc bool
|
||||
poll string
|
||||
forceSyncStatic bool
|
||||
panicOnWarning bool
|
||||
|
||||
// Profile flags (for debugging of performance problems)
|
||||
cpuprofile string
|
||||
@@ -488,12 +489,18 @@ func (r *rootCommand) createLogger(running bool) (loggers.Logger, error) {
|
||||
}
|
||||
}
|
||||
|
||||
var logHookLast func(e *logg.Entry) error
|
||||
if r.panicOnWarning {
|
||||
logHookLast = loggers.PanicOnWarningHook
|
||||
}
|
||||
|
||||
optsLogger := loggers.Options{
|
||||
DistinctLevel: logg.LevelWarn,
|
||||
Level: level,
|
||||
StdOut: r.StdOut,
|
||||
StdErr: r.StdErr,
|
||||
StoreErrors: running,
|
||||
HandlerPost: logHookLast,
|
||||
}
|
||||
|
||||
return loggers.New(optsLogger), nil
|
||||
@@ -591,7 +598,7 @@ func applyLocalFlagsBuild(cmd *cobra.Command, r *rootCommand) {
|
||||
cmd.Flags().BoolVar(&r.gc, "gc", false, "enable to run some cleanup tasks (remove unused cache files) after the build")
|
||||
cmd.Flags().StringVar(&r.poll, "poll", "", "set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes")
|
||||
_ = cmd.RegisterFlagCompletionFunc("poll", cobra.NoFileCompletions)
|
||||
cmd.Flags().Bool("panicOnWarning", false, "panic on first WARNING log")
|
||||
cmd.Flags().BoolVar(&r.panicOnWarning, "panicOnWarning", false, "panic on first WARNING log")
|
||||
cmd.Flags().Bool("templateMetrics", false, "display metrics about template executions")
|
||||
cmd.Flags().Bool("templateMetricsHints", false, "calculate some improvement hints when combined with --templateMetrics")
|
||||
cmd.Flags().BoolVar(&r.forceSyncStatic, "forceSyncStatic", false, "copy all files when static is changed.")
|
||||
|
||||
@@ -879,12 +879,18 @@ func (s *IntegrationTestBuilder) initBuilder() error {
|
||||
w = &s.logBuff
|
||||
}
|
||||
|
||||
var logHookLast func(e *logg.Entry) error
|
||||
if s.Cfg.PanicOnWarning {
|
||||
logHookLast = loggers.PanicOnWarningHook
|
||||
}
|
||||
|
||||
logger := loggers.New(
|
||||
loggers.Options{
|
||||
StdOut: w,
|
||||
StdErr: w,
|
||||
Level: s.Cfg.LogLevel,
|
||||
DistinctLevel: logg.LevelWarn,
|
||||
HandlerPost: logHookLast,
|
||||
},
|
||||
)
|
||||
|
||||
@@ -1143,6 +1149,9 @@ type IntegrationTestConfig struct {
|
||||
// The log level to use.
|
||||
LogLevel logg.Level
|
||||
|
||||
// Whether to panic on warnings.
|
||||
PanicOnWarning bool
|
||||
|
||||
// Whether it needs the real file system (e.g. for js.Build tests).
|
||||
NeedsOsFS bool
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
! hugo --panicOnWarning
|
||||
|
||||
stderr 'is not compatible with this Hugo'
|
||||
|
||||
-- hugo.toml --
|
||||
baseURL="https://example.org"
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
min = "0.148.0"
|
||||
max = "0.148.0"
|
||||
-- layouts/all.html --
|
||||
All.
|
||||
Reference in New Issue
Block a user