From 1464091ad639aa8d3a3793515a9661eaf801cfcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 30 May 2024 14:58:05 +0200 Subject: [PATCH] content adapter: Fix server crash on partial edit Fixes #12538 --- hugolib/content_map.go | 6 ------ hugolib/hugo_sites_build.go | 13 ++++++++----- .../pagesfromgotmpl_integration_test.go | 5 +++++ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/hugolib/content_map.go b/hugolib/content_map.go index 452bf8efa..6ab945209 100644 --- a/hugolib/content_map.go +++ b/hugolib/content_map.go @@ -335,12 +335,6 @@ func (m *pageMap) addPagesFromGoTmplFi(fi hugofs.FileMetaInfo, buildConfig *Buil f := source.NewFileInfo(fi) h := s.h - // Make sure the layouts are initialized. - if _, err := h.init.layouts.Do(context.Background()); err != nil { - addErr = err - return - } - contentAdapter := s.pageMap.treePagesFromTemplateAdapters.Get(pi.Base()) var rebuild bool if contentAdapter != nil { diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index 4bea93039..8a4966055 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -239,6 +239,10 @@ func (h *HugoSites) process(ctx context.Context, l logg.LevelLogger, config *Bui l = l.WithField("step", "process") defer loggers.TimeTrackf(l, time.Now(), nil, "") + if _, err := h.init.layouts.Do(ctx); err != nil { + return err + } + if len(events) > 0 { // This is a rebuild return h.processPartial(ctx, l, config, init, events) @@ -324,10 +328,6 @@ func (h *HugoSites) render(l logg.LevelLogger, config *BuildCfg) error { loggers.TimeTrackf(l, start, h.buildCounters.loggFields(), "") }() - if _, err := h.init.layouts.Do(context.Background()); err != nil { - return err - } - siteRenderContext := &siteRenderContext{cfg: config, multihost: h.Configs.IsMultihost} i := 0 @@ -918,7 +918,6 @@ func (h *HugoSites) processPartial(ctx context.Context, l logg.LevelLogger, conf if tmplChanged || i18nChanged { // TODO(bep) we should split this, but currently the loading of i18n and layout files are tied together. See #12048. h.init.layouts.Reset() - if err := loggers.TimeTrackfn(func() (logg.LevelLogger, error) { // TODO(bep) this could probably be optimized to somehow // only load the changed templates and its dependencies, but that is non-trivial. @@ -991,6 +990,10 @@ func (s *Site) handleContentAdapterChanges(bi pagesfromdata.BuildInfo, buildConf } func (h *HugoSites) processContentAdaptersOnRebuild(ctx context.Context, buildConfig *BuildCfg) error { + // Make sure the layouts are initialized. + if _, err := h.init.layouts.Do(context.Background()); err != nil { + return err + } g := rungroup.Run[*pagesfromdata.PagesFromTemplate](ctx, rungroup.Config[*pagesfromdata.PagesFromTemplate]{ NumWorkers: h.numWorkers, Handle: func(ctx context.Context, p *pagesfromdata.PagesFromTemplate) error { diff --git a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go index 3a37c233b..cbb2da75c 100644 --- a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go +++ b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go @@ -38,7 +38,11 @@ draft: false -- layouts/partials/get-value.html -- {{ $val := "p1" }} {{ return $val }} +-- layouts/_default/baseof.html -- +Baseof: +{{ block "main" . }}{{ end }} -- layouts/_default/single.html -- +{{ define "main" }} Single: {{ .Title }}|{{ .Content }}|Params: {{ .Params.param1 }}|Path: {{ .Path }}| Dates: Date: {{ .Date.Format "2006-01-02" }}|Lastmod: {{ .Lastmod.Format "2006-01-02" }}|PublishDate: {{ .PublishDate.Format "2006-01-02" }}|ExpiryDate: {{ .ExpiryDate.Format "2006-01-02" }}| Len Resources: {{ .Resources | len }} @@ -49,6 +53,7 @@ Featured Image: {{ .RelPermalink }}|{{ .Name }}| Resized Featured Image: {{ .RelPermalink }}|{{ .Width }}| {{ end}} {{ end }} +{{ end }} -- layouts/_default/list.html -- List: {{ .Title }}|{{ .Content }}| RegularPagesRecursive: {{ range .RegularPagesRecursive }}{{ .Title }}:{{ .Path }}|{{ end }}$