Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-17 09:24:45 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-17 09:25:57 +0300
commit0fe4ff18751156fa072e1f83077e49a8597e7dcd (patch)
treec24fa1895dcb57c0beb230298ac9ab14db5360f8 /tpl/template.go
parent1f42e47e475c0cd684426dd230de411d4c385a3c (diff)
tpl: Improve the Execute panic error message
See #5327
Diffstat (limited to 'tpl/template.go')
-rw-r--r--tpl/template.go17
1 files changed, 12 insertions, 5 deletions
diff --git a/tpl/template.go b/tpl/template.go
index 02b2d4a9b..68673a1fc 100644
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -115,8 +115,9 @@ func extractBaseOf(err string) string {
func (t *TemplateAdapter) Execute(w io.Writer, data interface{}) (execErr error) {
defer func() {
// Panics in templates are a little bit too common (nil pointers etc.)
+ // See https://github.com/gohugoio/hugo/issues/5327
if r := recover(); r != nil {
- execErr = t.addFileContext(t.Name(), fmt.Errorf("panic in Execute: %s", r))
+ execErr = t.addFileContext(t.Name(), fmt.Errorf(`panic in Execute: %s. See "https://github.com/gohugoio/hugo/issues/5327" for the reason why we cannot provide a better error message for this.`, r))
}
}()
@@ -152,7 +153,7 @@ func (t *TemplateAdapter) addFileContext(name string, inerr error) error {
master, hasMaster := t.NameBaseTemplateName[name]
- ferr := errors.Wrapf(inerr, "execute of template %q failed", realFilename)
+ ferr1 := errors.Wrapf(inerr, "execute of template %q failed", realFilename)
// Since this can be a composite of multiple template files (single.html + baseof.html etc.)
// we potentially need to look in both -- and cannot rely on line number alone.
@@ -175,7 +176,7 @@ func (t *TemplateAdapter) addFileContext(name string, inerr error) error {
}
// TODO(bep) 2errors text vs HTML
- fe, ok := herrors.WithFileContext(ferr, f, "go-html-template", lineMatcher)
+ fe, ok := herrors.WithFileContext(ferr1, f, "go-html-template", lineMatcher)
if ok || !hasMaster {
return fe
}
@@ -187,8 +188,14 @@ func (t *TemplateAdapter) addFileContext(name string, inerr error) error {
}
defer f.Close()
- ferr = errors.Wrapf(inerr, "execute of template %q failed", realFilename)
- fe, _ = herrors.WithFileContext(ferr, f, "go-html-template", lineMatcher)
+ ferr2 := errors.Wrapf(inerr, "execute of template %q failed", realFilename)
+ fe, ok = herrors.WithFileContext(ferr2, f, "go-html-template", lineMatcher)
+
+ if !ok {
+ // Return the most specific.
+ return ferr1
+
+ }
return fe
}