shithub: hugo

Download patch

ref: 1773d71d5b40f5a6a14edca417d2818607a499f1
parent: 8a58ebb311fd079f65068e7e37725e4d43f17ab5
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Fri Dec 20 15:46:17 EST 2019

tpl: Add a warnf template func

Fixes #6628

--- 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 @@
 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.
--- 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": {
--- a/tpl/fmt/fmt.go
+++ b/tpl/fmt/fmt.go
@@ -23,12 +23,16 @@
 
 // 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.
@@ -52,4 +56,11 @@
 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 ""
 }
--- a/tpl/fmt/init.go
+++ b/tpl/fmt/init.go
@@ -57,6 +57,12 @@
 			},
 		)
 
+		ns.AddMethodMapping(ctx.Warnf,
+			[]string{"warnf"},
+			[][2]string{
+				{`{{ warnf "%s." "warning" }}`, ``},
+			},
+		)
 		return ns
 	}