diff options
author | Brendan Roy <[email protected]> | 2017-09-30 20:00:19 +1000 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2017-10-03 07:59:51 +0200 |
commit | 4fc67fe44a3c65fc7faaed21d5fa5bb5f87edf2c (patch) | |
tree | 5b9562852eb01c76f31ca4651561785573a50b37 | |
parent | 47fdfd5196cd24a23b30afe1d88969ffb413ab59 (diff) | |
download | hugo-4fc67fe44a3c65fc7faaed21d5fa5bb5f87edf2c.tar.gz hugo-4fc67fe44a3c65fc7faaed21d5fa5bb5f87edf2c.zip |
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
-rw-r--r-- | docs/content/functions/errorf.md | 26 | ||||
-rw-r--r-- | tpl/fmt/fmt.go | 9 | ||||
-rw-r--r-- | tpl/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 new file mode 100644 index 000000000..9105ff840 --- /dev/null +++ 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 index 96695442e..96113a598 100644 --- 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 index a3398b862..76c68957a 100644 --- 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) |