Repository: gohugoio/hugo (language: go)

Issue:
The CLI help text is printed on some system errors
Which makes it a little hard to spot the error.


Discussion / hints:

Fix patch:
diff --git a/commands/commands.go b/commands/commands.go
index b6e8dd469d1..7a9f9fc9ebb 100644
--- a/commands/commands.go
+++ b/commands/commands.go
@@ -299,7 +299,7 @@ func (cc *hugoBuilderCommon) handleFlags(cmd *cobra.Command) {
 	cmd.Flags().Bool("enableGitInfo", false, "add Git revision, date and author info to the pages")
 	cmd.Flags().BoolVar(&cc.gc, "gc", false, "enable to run some cleanup tasks (remove unused cache files) after the build")
 	cmd.Flags().StringVar(&cc.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.Flags().BoolVar(&loggers.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().BoolP("forceSyncStatic", "", false, "copy all files when static is changed.")
diff --git a/commands/helpers.go b/commands/helpers.go
index 1386e425fe6..8bd7b18a3c1 100644
--- a/commands/helpers.go
+++ b/commands/helpers.go
@@ -68,7 +68,7 @@ func newSystemErrorF(format string, a ...interface{}) commandError {
 // Catch some of the obvious user errors from Cobra.
 // We don't want to show the usage message for every error.
 // The below may be to generic. Time will show.
-var userErrorRegexp = regexp.MustCompile("argument|flag|shorthand")
+var userErrorRegexp = regexp.MustCompile("unknown flag")
 
 func isUserError(err error) bool {
 	if cErr, ok := err.(commandError); ok && cErr.isUserError() {
diff --git a/common/loggers/loggers.go b/common/loggers/loggers.go
index 4ed1880164e..3beb2595692 100644
--- a/common/loggers/loggers.go
+++ b/common/loggers/loggers.go
@@ -29,8 +29,11 @@ import (
 	jww "github.com/spf13/jwalterweatherman"
 )
 
-// Counts ERROR logs to the global jww logger.
-var GlobalErrorCounter *jww.Counter
+var (
+	// Counts ERROR logs to the global jww logger.
+	GlobalErrorCounter *jww.Counter
+	PanicOnWarning     bool
+)
 
 func init() {
 	GlobalErrorCounter = &jww.Counter{}
@@ -130,12 +133,20 @@ func (l *logger) Info() *log.Logger {
 	return l.INFO
 }
 
+const panicOnWarningMessage = "Warning trapped. Remvove the --panicOnWarning flag to continue."
+
 func (l *logger) Warnf(format string, v ...interface{}) {
 	l.WARN.Printf(format, v...)
+	if PanicOnWarning {
+		panic(panicOnWarningMessage)
+	}
 }
 
 func (l *logger) Warnln(v ...interface{}) {
 	l.WARN.Println(v...)
+	if PanicOnWarning {
+		panic(panicOnWarningMessage)
+	}
 }
 
 func (l *logger) Warn() *log.Logger {
diff --git a/helpers/general.go b/helpers/general.go
index 74053123fa3..73b7aff6604 100644
--- a/helpers/general.go
+++ b/helpers/general.go
@@ -331,12 +331,14 @@ func (l *DistinctLogger) Warnf(format string, v ...interface{}) {
 		l.Logger.Warnf(format, v...)
 	})
 }
+
 func (l *DistinctLogger) Warnln(v ...interface{}) {
 	logStatement := fmt.Sprint(v...)
 	l.printIfNotPrinted("warnln", logStatement, func() {
 		l.Logger.Warnln(v...)
 	})
 }
+
 func (l *DistinctLogger) Errorf(format string, v ...interface{}) {
 	logStatement := fmt.Sprint(v...)
 	l.printIfNotPrinted("errorf", logStatement, func() {
@@ -396,7 +398,6 @@ var (
 func InitLoggers() {
 	DistinctErrorLog.Reset()
 	DistinctWarnLog.Reset()
-
 }
 
 // Deprecated informs about a deprecation, but only once for a given set of arguments' values.
@@ -408,7 +409,11 @@ func Deprecated(item, alternative string, err bool) {
 	if err {
 		DistinctErrorLog.Errorf("%s is deprecated and will be removed in Hugo %s. %s", item, hugo.CurrentVersion.Next().ReleaseVersion(), alternative)
 	} else {
-		DistinctWarnLog.Warnf("%s is deprecated and will be removed in a future release. %s", item, alternative)
+		var warnPanicMessage string
+		if !loggers.PanicOnWarning {
+			warnPanicMessage = "\n\nRe-run Hugo with the flag --panicOnWarning to get a better error message."
+		}
+		DistinctWarnLog.Warnf("%s is deprecated and will be removed in a future release. %s%s", item, alternative, warnPanicMessage)
 	}
 }
 


Test patch: