Skip to content

Commit

Permalink
hugolib: Improve render error handling
Browse files Browse the repository at this point in the history
Catch and return the "template not found" error earlier.
  • Loading branch information
bep committed Apr 4, 2017
1 parent 8fcddb9 commit d9afa2e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 45 deletions.
48 changes: 8 additions & 40 deletions hugolib/site.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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()
Expand Down Expand Up @@ -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 {
Expand Down
11 changes: 6 additions & 5 deletions hugolib/site_render.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (
"sync"
"time"

"github.com/spf13/hugo/helpers"

"github.com/spf13/hugo/output"

bp "github.com/spf13/hugo/bufferpool"
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit d9afa2e

Please sign in to comment.