diff --git a/docs/content/en/functions/errorf.md b/docs/content/en/functions/errorf.md index 73c13da09d3..edc8e5755ac 100644 --- a/docs/content/en/functions/errorf.md +++ b/docs/content/en/functions/errorf.md @@ -1,7 +1,6 @@ --- -title: errorf -linktitle: errorf -description: Log ERROR and fail the build from the templates. +title: errorf and warnf +description: Log ERROR or WARNING from the templates. date: 2017-09-30 publishdate: 2017-09-30 lastmod: 2017-09-30 @@ -18,12 +17,18 @@ deprecated: false aliases: [] --- -`errorf` will evaluate a format string, then output the result to the ERROR log (and only once per error message to avoid flooding the log). +`errorf` or `warnf` will evaluate a format string, then output the result to the ERROR or WARNING log (and only once per error message to avoid flooding the log). -This will also cause the build to fail (the `hugo` command will `exit -1`). +Any ERROR will also cause the build to fail (the `hugo` command will `exit -1`). + +Note that the WARNING will only be printed to the console. ``` {{ errorf "Failed to handle page %q" .Path }} ``` -Note that `errorf` supports all the formatting verbs of the [fmt](https://golang.org/pkg/fmt/) package. +``` +{{ warnf "You should update the shortcodes in %q" .Path }} +``` + +Note that `errorf` and `warnf` support all the formatting verbs of the [fmt](https://golang.org/pkg/fmt/) package. diff --git a/docs/data/docs.json b/docs/data/docs.json index a4c79ab1634..7cdf8a405b1 100644 --- a/docs/data/docs.json +++ b/docs/data/docs.json @@ -3053,6 +3053,22 @@ "works!\n" ] ] + }, + "Warnf": { + "Description": "Warnf formats according to a format specifier and logs a WARNING.\nIt returns an empty string.", + "Args": [ + "format", + "a" + ], + "Aliases": [ + "warnf" + ], + "Examples": [ + [ + "{{ warnf \"%s.\" \"warning\" }}", + "" + ] + ] } }, "hugo": { diff --git a/tpl/fmt/fmt.go b/tpl/fmt/fmt.go index 8b24648cbbd..7e0258650b0 100644 --- a/tpl/fmt/fmt.go +++ b/tpl/fmt/fmt.go @@ -23,12 +23,16 @@ import ( // New returns a new instance of the fmt-namespaced template functions. func New(d *deps.Deps) *Namespace { - return &Namespace{helpers.NewDistinctLogger(d.Log.ERROR)} + return &Namespace{ + errorLogger: helpers.NewDistinctLogger(d.Log.ERROR), + warnLogger: helpers.NewDistinctLogger(d.Log.WARN), + } } // Namespace provides template functions for the "fmt" namespace. type Namespace struct { errorLogger *helpers.DistinctLogger + warnLogger *helpers.DistinctLogger } // Print returns string representation of the passed arguments. @@ -53,3 +57,10 @@ func (ns *Namespace) Errorf(format string, a ...interface{}) string { ns.errorLogger.Printf(format, a...) return _fmt.Sprintf(format, a...) } + +// Warnf formats according to a format specifier and logs a WARNING. +// It returns an empty string. +func (ns *Namespace) Warnf(format string, a ...interface{}) string { + ns.warnLogger.Printf(format, a...) + return "" +} diff --git a/tpl/fmt/init.go b/tpl/fmt/init.go index 1170558010b..14568b45ab9 100644 --- a/tpl/fmt/init.go +++ b/tpl/fmt/init.go @@ -57,6 +57,12 @@ func init() { }, ) + ns.AddMethodMapping(ctx.Warnf, + []string{"warnf"}, + [][2]string{ + {`{{ warnf "%s." "warning" }}`, ``}, + }, + ) return ns }