hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 4fc67fe44a3c65fc7faaed21d5fa5bb5f87edf2c
parent 47fdfd5196cd24a23b30afe1d88969ffb413ab59
Author: Brendan Roy <br3ndanr@gmail.com>
Date:   Sat, 30 Sep 2017 20:00:19 +1000

tpl: Add errorf template function

Add template function that will build a string from the given format
string and arguments, then log it to ERROR. This has an intended
side-effect of causing the build to fail, when executed.

Resolves #3817

Diffstat:
Adocs/content/functions/errorf.md | 26++++++++++++++++++++++++++
Mtpl/fmt/fmt.go | 9++++++++-
Mtpl/fmt/init.go | 8+++++++-
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/docs/content/functions/errorf.md b/docs/content/functions/errorf.md
@@ -0,0 +1,26 @@
+---
+title: errorf
+linktitle: errorf
+description: Evaluates a format string and logs it to ERROR.
+date: 2017-09-30
+publishdate: 2017-09-30
+lastmod: 2017-09-30
+categories: [functions]
+menu:
+  docs:
+    parent: "functions"
+keywords: [strings, log, error]
+signature: ["errorf FORMAT INPUT"]
+workson: []
+hugoversion:
+relatedfuncs: [printf]
+deprecated: false
+aliases: []
+---
+
+`errorf` will evaluate a format string, then output the result to the ERROR log.
+This will also cause the build to fail.
+
+```
+{{ errorf "Something went horribly wrong! %s" err }}
+```
diff --git a/tpl/fmt/fmt.go b/tpl/fmt/fmt.go
@@ -15,15 +15,17 @@ package fmt
 
 import (
 	_fmt "fmt"
+	"github.com/gohugoio/hugo/helpers"
 )
 
 // New returns a new instance of the fmt-namespaced template functions.
 func New() *Namespace {
-	return &Namespace{}
+	return &Namespace{helpers.NewDistinctErrorLogger()}
 }
 
 // Namespace provides template functions for the "fmt" namespace.
 type Namespace struct {
+	errorLogger *helpers.DistinctLogger
 }
 
 // Print returns string representation of the passed arguments.
@@ -41,3 +43,8 @@ func (ns *Namespace) Printf(format string, a ...interface{}) string {
 func (ns *Namespace) Println(a ...interface{}) string {
 	return _fmt.Sprintln(a...)
 }
+
+func (ns *Namespace) Errorf(format string, a ...interface{}) string {
+	ns.errorLogger.Printf(format, a...)
+	return _fmt.Sprintf(format, a...)
+}
diff --git a/tpl/fmt/init.go b/tpl/fmt/init.go
@@ -50,8 +50,14 @@ func init() {
 			},
 		)
 
-		return ns
+		ns.AddMethodMapping(ctx.Errorf,
+			[]string{"errorf"},
+			[][2]string{
+				{`{{ errorf "%s." "failed" }}`, `failed.`},
+			},
+		)
 
+		return ns
 	}
 
 	internal.AddTemplateFuncsNamespace(f)