Reload all templates on change to preserve load order

main
Elnu 2 years ago
parent e70916c6c1
commit df8e0f8903

@ -13,7 +13,7 @@ import (
type TemplateSet struct { type TemplateSet struct {
templates *template.Template templates *template.Template
paths []string paths []string
modTimes map[string]time.Time loadTimes map[string]time.Time
} }
func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet { func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet {
@ -33,7 +33,7 @@ func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet {
return TemplateSet{ return TemplateSet{
templates: templates, templates: templates,
paths: allPaths, paths: allPaths,
modTimes: modTimes, loadTimes: modTimes,
} }
} }
@ -49,19 +49,21 @@ func (templateSet *TemplateSet) ExecuteTemplate(wr io.Writer, name string, data
return templateSet.templates.ExecuteTemplate(wr, name, data) return templateSet.templates.ExecuteTemplate(wr, name, data)
} }
func (templateSet *TemplateSet) reloadTemplateIfModified(path string) { func (templateSet *TemplateSet) reloadTemplatesIfModified() {
for path, loadTime := range templateSet.loadTimes {
fileInfo, _ := os.Stat(path) fileInfo, _ := os.Stat(path)
modTime := fileInfo.ModTime() modTime := fileInfo.ModTime()
if modTime.After(templateSet.modTimes[path]) { if modTime.After(loadTime) {
fmt.Printf("Reloading template %s...\n", path) fmt.Printf("%s updated: reloading templates...\n", path)
templateSet.templates.ParseFiles(path) goto update
templateSet.modTimes[path] = modTime
} }
} }
return
func (templateSet *TemplateSet) reloadTemplatesIfModified() { update:
now := time.Now()
for _, path := range templateSet.paths { for _, path := range templateSet.paths {
templateSet.reloadTemplateIfModified(path) templateSet.templates.ParseFiles(path)
templateSet.loadTimes[path] = now
} }
} }