Permalink
Browse files

tpl: Handle truncated identifiers in Go template errors

Long identifiers will give errors on the format:

```bash
 _default/single.html:5:14: executing "main" at <.ThisIsAVeryLongTitl...>: can't evaluate field ThisIsAVeryLongTitle
```

Hugo use this value to match the "base template or not", so we need to strip the "...".

Fixes #5346
  • Loading branch information...
bep committed Oct 24, 2018
1 parent deff9e1 commit 2d7709d15584e4c11138cd7fe92717a2a58e4585
Showing with 18 additions and 1 deletion.
  1. +15 −0 hugolib/hugo_sites_build_errors_test.go
  2. +3 −1 tpl/template.go
@@ -107,6 +107,21 @@ func TestSiteBuildErrors(t *testing.T) {
},
},
{
name: "Single template execute failed, long keyword",
fileType: single,
fileFixer: func(content string) string {
return strings.Replace(content, ".Title", ".ThisIsAVeryLongTitle", 1)
},
assertBuildError: func(a testSiteBuildErrorAsserter, err error) {
fe := a.getFileError(err)
assert.Equal(5, fe.LineNumber)
assert.Equal(14, fe.ColumnNumber)
assert.Equal("go-html-template", fe.ChromaLexer)
a.assertErrorMessage("\"layouts/_default/single.html:5:14\": execute of template failed", fe.Error())
},
},
{
name: "Shortcode parse failed",
fileType: shortcode,
@@ -133,7 +133,9 @@ func (t *TemplateAdapter) Execute(w io.Writer, data interface{}) (execErr error)
return
}
var identifiersRe = regexp.MustCompile("at \\<(.*?)\\>:")
// The identifiers may be truncated in the log, e.g.
// "executing "main" at <$scaled.SRelPermalin...>: can't evaluate field SRelPermalink in type *resource.Image"
var identifiersRe = regexp.MustCompile("at \\<(.*?)(\\.{3})?\\>:")
func (t *TemplateAdapter) extractIdentifiers(line string) []string {
m := identifiersRe.FindAllStringSubmatch(line, -1)

0 comments on commit 2d7709d

Please sign in to comment.