mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-28 22:50:35 +03: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)
|
defer bp.PutBuffer(renderBuffer)
|
||||||
renderBuffer.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n")
|
renderBuffer.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n")
|
||||||
|
|
||||||
err := s.renderForLayouts(name, d, renderBuffer, layouts...)
|
if err := s.renderForLayouts(name, d, renderBuffer, layouts...); err != nil {
|
||||||
|
helpers.DistinctWarnLog.Println(err)
|
||||||
if err != nil {
|
return nil
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
outBuffer := bp.GetBuffer()
|
outBuffer := bp.GetBuffer()
|
||||||
|
@ -1875,10 +1874,9 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou
|
||||||
renderBuffer := bp.GetBuffer()
|
renderBuffer := bp.GetBuffer()
|
||||||
defer bp.PutBuffer(renderBuffer)
|
defer bp.PutBuffer(renderBuffer)
|
||||||
|
|
||||||
err := s.renderForLayouts(p.Kind, p, renderBuffer, layouts...)
|
if err := s.renderForLayouts(p.Kind, p, renderBuffer, layouts...); err != nil {
|
||||||
|
helpers.DistinctWarnLog.Println(err)
|
||||||
if err != nil {
|
return nil
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
outBuffer := bp.GetBuffer()
|
outBuffer := bp.GetBuffer()
|
||||||
|
@ -1916,46 +1914,16 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou
|
||||||
transformer := transform.NewChain(transformLinks...)
|
transformer := transform.NewChain(transformLinks...)
|
||||||
transformer.Apply(outBuffer, renderBuffer, path)
|
transformer.Apply(outBuffer, renderBuffer, path)
|
||||||
|
|
||||||
if outBuffer.Len() == 0 {
|
return s.publish(dest, outBuffer)
|
||||||
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Site) renderForLayouts(name string, d interface{}, w io.Writer, layouts ...string) error {
|
func (s *Site) renderForLayouts(name string, d interface{}, w io.Writer, layouts ...string) error {
|
||||||
templ := s.findFirstTemplate(layouts...)
|
templ := s.findFirstTemplate(layouts...)
|
||||||
if templ == nil {
|
if templ == nil {
|
||||||
helpers.DistinctWarnLog.Printf("[%s] Unable to locate layout for %s: %s\n", s.Language.Lang, name, layouts)
|
return fmt.Errorf("[%s] Unable to locate layout for %q: %s\n", s.Language.Lang, name, layouts)
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := templ.Execute(w, d); err != nil {
|
if err := templ.Execute(w, d); err != nil {
|
||||||
|
|
||||||
// Behavior here should be dependent on if running in server or watch mode.
|
// Behavior here should be dependent on if running in server or watch mode.
|
||||||
helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err)
|
helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err)
|
||||||
if !s.running() && !testMode {
|
if !s.running() && !testMode {
|
||||||
|
|
|
@ -19,6 +19,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/spf13/hugo/helpers"
|
||||||
|
|
||||||
"github.com/spf13/hugo/output"
|
"github.com/spf13/hugo/output"
|
||||||
|
|
||||||
bp "github.com/spf13/hugo/bufferpool"
|
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"}
|
rLayouts := []string{"robots.txt", "_default/robots.txt", "_internal/_default/robots.txt"}
|
||||||
outBuffer := bp.GetBuffer()
|
outBuffer := bp.GetBuffer()
|
||||||
defer bp.PutBuffer(outBuffer)
|
defer bp.PutBuffer(outBuffer)
|
||||||
err := s.renderForLayouts("robots", n, outBuffer, s.appendThemeTemplates(rLayouts)...)
|
if err := s.renderForLayouts("robots", n, outBuffer, s.appendThemeTemplates(rLayouts)...); err != nil {
|
||||||
|
helpers.DistinctWarnLog.Println(err)
|
||||||
if err == nil {
|
return nil
|
||||||
err = s.publish("robots.txt", outBuffer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return s.publish("robots.txt", outBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// renderAliases renders shell pages that simply have a redirect in the header.
|
// renderAliases renders shell pages that simply have a redirect in the header.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue