shithub: hugo

Download patch

ref: 868f89d5c69c1f028b4d8900ccddd671a8d1922c
parent: 04d80e6e8725dd9d1ee76d7615ae312f995cd7bc
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Tue Apr 4 09:32:29 EDT 2017

hugolib: Improve render error handling

Catch and return the "template not found" error earlier.

--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1845,10 +1845,9 @@
 	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 @@
 	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 @@
 	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 {
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -19,6 +19,8 @@
 	"sync"
 	"time"
 
+	"github.com/spf13/hugo/helpers"
+
 	"github.com/spf13/hugo/output"
 
 	bp "github.com/spf13/hugo/bufferpool"
@@ -333,13 +335,12 @@
 	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.
--