shithub: hugo

Download patch

ref: 2618cfbeaa06bd2a4d26b3e3999e3c9ca9a49854
parent: 25bfa7e12fcd044368e9983481dfd4bfc8558a55
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Fri Feb 10 12:26:28 EST 2017

hugolib: Fix error for non-renderable HTML content with shortcodes

This commit re-introduces template lookup order that was accidently removed as
part of the template nonglobal refactoring.

Fixes #3021

--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -436,6 +436,8 @@
 		{Name: filepath.FromSlash("sect/doc6.html"), Content: []byte("<!doctype html><html>{{ template \"head_abs\" }}<body>body5</body></html>")},
 		{Name: filepath.FromSlash("doc7.html"), Content: []byte("<html><body>doc7 content</body></html>")},
 		{Name: filepath.FromSlash("sect/doc8.html"), Content: []byte("---\nmarkup: md\n---\n# title\nsome *content*")},
+		// Issue #3021
+		{Name: filepath.FromSlash("doc9.html"), Content: []byte("<html><body>doc9: {{< myshortcode >}}</body></html>")},
 	}
 
 	viper.Set("defaultExtension", "html")
@@ -454,6 +456,7 @@
 	writeSource(t, fs, filepath.Join("layouts", "_default/single.html"), "{{.Content}}")
 	writeSource(t, fs, filepath.Join("layouts", "head"), "<head><script src=\"script.js\"></script></head>")
 	writeSource(t, fs, filepath.Join("layouts", "head_abs"), "<head><script src=\"/script.js\"></script></head>")
+	writeSource(t, fs, filepath.Join("layouts", "shortcodes", "myshortcode.html"), "SHORT")
 
 	buildSingleSite(t, deps.DepsCfg{Fs: fs}, BuildCfg{})
 
@@ -469,6 +472,7 @@
 		{filepath.FromSlash("public/sect/doc6.html"), "<!doctype html><html><head><script src=\"http://auth/bub/script.js\"></script></head><body>body5</body></html>"},
 		{filepath.FromSlash("public/doc7.html"), "<html><body>doc7 content</body></html>"},
 		{filepath.FromSlash("public/sect/doc8.html"), "\n\n<h1 id=\"title\">title</h1>\n\n<p>some <em>content</em></p>\n"},
+		{filepath.FromSlash("public/doc9.html"), "<html><body>doc9: SHORT</body></html>"},
 	}
 
 	for _, test := range tests {
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -141,7 +141,6 @@
 		// Hacky, but we need to make sure that the func names are in the global map.
 		amber.FuncMap[k] = func() string {
 			panic("should never be invoked")
-			return ""
 		}
 	}
 
@@ -197,6 +196,10 @@
 
 func (t *GoHTMLTemplate) Lookup(name string) *template.Template {
 
+	if templ := t.Template.Lookup(name); templ != nil {
+		return templ
+	}
+
 	if t.overlays != nil {
 		if templ, ok := t.overlays[name]; ok {
 			return templ
@@ -203,6 +206,8 @@
 		}
 	}
 
+	// The clone is used for the non-renderable HTML pages (p.IsRenderable == false) that is parsed
+	// as Go templates late in the build process.
 	if t.clone != nil {
 		if templ := t.clone.Lookup(name); templ != nil {
 			return templ