mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
hugolib: Improve render error handling
Catch and return the "template not found" error earlier.
This commit is contained in:
parent
04d80e6e87
commit
868f89d5c6
2 changed files with 14 additions and 45 deletions
|
@ -1845,10 +1845,9 @@ func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layout
|
|||
defer bp.PutBuffer(renderBuffer)
|
||||
renderBuffer.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n")
|
||||
|
||||
err := s.renderForLayouts(name, d, renderBuffer, layouts...)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
if err := s.renderForLayouts(name, d, renderBuffer, layouts...); err != nil {
|
||||
helpers.DistinctWarnLog.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
outBuffer := bp.GetBuffer()
|
||||
|
@ -1875,10 +1874,9 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou
|
|||
renderBuffer := bp.GetBuffer()
|
||||
defer bp.PutBuffer(renderBuffer)
|
||||
|
||||
err := s.renderForLayouts(p.Kind, p, renderBuffer, layouts...)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
if err := s.renderForLayouts(p.Kind, p, renderBuffer, layouts...); err != nil {
|
||||
helpers.DistinctWarnLog.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
outBuffer := bp.GetBuffer()
|
||||
|
@ -1916,46 +1914,16 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou
|
|||
transformer := transform.NewChain(transformLinks...)
|
||||
transformer.Apply(outBuffer, renderBuffer, path)
|
||||
|
||||
if outBuffer.Len() == 0 {
|
||||
|
||||
s.Log.WARN.Printf("%s is rendered empty\n", dest)
|
||||
if dest == "/" {
|
||||
debugAddend := ""
|
||||
if !s.Cfg.GetBool("verbose") {
|
||||
debugAddend = "* For more debugging information, run \"hugo -v\""
|
||||
}
|
||||
helpers.DistinctFeedbackLog.Printf(`=============================================================
|
||||
Your rendered home page is blank: /index.html is zero-length
|
||||
* Did you specify a theme on the command-line or in your
|
||||
%q file? (Current theme: %q)
|
||||
%s
|
||||
=============================================================`,
|
||||
filepath.Base(viper.ConfigFileUsed()),
|
||||
s.Cfg.GetString("theme"),
|
||||
debugAddend)
|
||||
}
|
||||
|
||||
// Avoid writing empty files to disk.
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
if err = s.publish(dest, outBuffer); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return s.publish(dest, outBuffer)
|
||||
}
|
||||
|
||||
func (s *Site) renderForLayouts(name string, d interface{}, w io.Writer, layouts ...string) error {
|
||||
templ := s.findFirstTemplate(layouts...)
|
||||
if templ == nil {
|
||||
helpers.DistinctWarnLog.Printf("[%s] Unable to locate layout for %s: %s\n", s.Language.Lang, name, layouts)
|
||||
return nil
|
||||
return fmt.Errorf("[%s] Unable to locate layout for %q: %s\n", s.Language.Lang, name, layouts)
|
||||
}
|
||||
|
||||
if err := templ.Execute(w, d); err != nil {
|
||||
|
||||
// Behavior here should be dependent on if running in server or watch mode.
|
||||
helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err)
|
||||
if !s.running() && !testMode {
|
||||
|
|
|
@ -19,6 +19,8 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/hugo/helpers"
|
||||
|
||||
"github.com/spf13/hugo/output"
|
||||
|
||||
bp "github.com/spf13/hugo/bufferpool"
|
||||
|
@ -333,13 +335,12 @@ func (s *Site) renderRobotsTXT() error {
|
|||
rLayouts := []string{"robots.txt", "_default/robots.txt", "_internal/_default/robots.txt"}
|
||||
outBuffer := bp.GetBuffer()
|
||||
defer bp.PutBuffer(outBuffer)
|
||||
err := s.renderForLayouts("robots", n, outBuffer, s.appendThemeTemplates(rLayouts)...)
|
||||
|
||||
if err == nil {
|
||||
err = s.publish("robots.txt", outBuffer)
|
||||
if err := s.renderForLayouts("robots", n, outBuffer, s.appendThemeTemplates(rLayouts)...); err != nil {
|
||||
helpers.DistinctWarnLog.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
return s.publish("robots.txt", outBuffer)
|
||||
}
|
||||
|
||||
// renderAliases renders shell pages that simply have a redirect in the header.
|
||||
|
|
Loading…
Reference in a new issue