mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-25 22:00:58 +02:00
Create template clone for late template execution
Fixing some breaking blogs on Go 1.6 Fixes #1879
This commit is contained in:
@@ -37,12 +37,14 @@ type Template interface {
|
||||
Lookup(name string) *template.Template
|
||||
Templates() []*template.Template
|
||||
New(name string) *template.Template
|
||||
Clone() *template.Template
|
||||
LoadTemplates(absPath string)
|
||||
LoadTemplatesWithPrefix(absPath, prefix string)
|
||||
AddTemplate(name, tpl string) error
|
||||
AddAceTemplate(name, basePath, innerPath string, baseContent, innerContent []byte) error
|
||||
AddInternalTemplate(prefix, name, tpl string) error
|
||||
AddInternalShortcode(name, tpl string) error
|
||||
MarkReady()
|
||||
PrintErrors()
|
||||
}
|
||||
|
||||
@@ -53,6 +55,8 @@ type templateErr struct {
|
||||
|
||||
type GoHTMLTemplate struct {
|
||||
template.Template
|
||||
clone *template.Template
|
||||
ready bool
|
||||
errors []*templateErr
|
||||
}
|
||||
|
||||
@@ -140,6 +144,22 @@ func (t *GoHTMLTemplate) LoadEmbedded() {
|
||||
t.EmbedTemplates()
|
||||
}
|
||||
|
||||
// MarkReady marks the template as "ready for execution". No changes allowed
|
||||
// after this is set.
|
||||
func (t *GoHTMLTemplate) MarkReady() {
|
||||
t.clone = template.Must(t.Template.Clone())
|
||||
t.ready = true
|
||||
}
|
||||
|
||||
// Since Go 1.6, the template cannot change once executed. So we have to create
|
||||
// a clone and work with that in some rare cases.
|
||||
func (t *GoHTMLTemplate) Clone() *template.Template {
|
||||
if !t.ready {
|
||||
panic("template clone called too early")
|
||||
}
|
||||
return template.Must(t.clone.Clone())
|
||||
}
|
||||
|
||||
func (t *GoHTMLTemplate) AddInternalTemplate(prefix, name, tpl string) error {
|
||||
if prefix != "" {
|
||||
return t.AddTemplate("_internal/"+prefix+"/"+name, tpl)
|
||||
|
Reference in New Issue
Block a user