diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-07-03 18:02:32 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-07-03 23:31:51 +0200 |
commit | 42e150fbfac736bd49bc7e50cb8cdf9f81386f59 (patch) | |
tree | f29afdf089823d6c6d4513ae67934357b88f2a05 /hugolib | |
parent | 028b356787426dbc190ce9868fbc9a6400c2996e (diff) |
Fix server reload when non-HTML shortcode changes
Fixes #7448
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/hugo_sites.go | 15 | ||||
-rw-r--r-- | hugolib/hugo_sites_rebuild_test.go | 41 | ||||
-rw-r--r-- | hugolib/shortcode.go | 14 |
3 files changed, 57 insertions, 13 deletions
diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index ee0d5c563..d1e3a146d 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -981,14 +981,17 @@ func (h *HugoSites) resetPageStateFromEvents(idset identity.Identities) { } for _, s := range p.shortcodeState.shortcodes { - for id := range idset { - if idm, ok := s.info.(identity.Manager); ok && idm.Search(id) != nil { - for _, po := range p.pageOutputs { - if po.cp != nil { - po.cp.Reset() + for _, templ := range s.templs { + sid := templ.(identity.Manager) + for id := range idset { + if sid.Search(id) != nil { + for _, po := range p.pageOutputs { + if po.cp != nil { + po.cp.Reset() + } } + return false } - return false } } } diff --git a/hugolib/hugo_sites_rebuild_test.go b/hugolib/hugo_sites_rebuild_test.go index 1f0b1b5d9..f0c9f8f09 100644 --- a/hugolib/hugo_sites_rebuild_test.go +++ b/hugolib/hugo_sites_rebuild_test.go @@ -26,6 +26,7 @@ baseURL = "https://example.com" title = "Rebuild this" contentDir = "content" enableInlineShortcodes = true +timeout = "5s" ` @@ -217,4 +218,44 @@ Render /prender/: Baseof:Single Main: Page 1|Mypartial1: Mypartial1|Mypartial3: }) + t.Run("Edit RSS shortcode", func(t *testing.T) { + b := createSiteBuilder(t) + + b.WithContent("output.md", `--- +title: Output +outputs: ["HTML", "AMP"] +layout: output +--- + +Content for Output. + +{{< output >}} + +`) + + b.WithTemplates( + "layouts/_default/output.html", `Output HTML: {{ .RelPermalink }}|{{ .Content }}`, + "layouts/_default/output.amp.html", `Output AMP: {{ .RelPermalink }}|{{ .Content }}`, + "layouts/shortcodes/output.html", `Output Shortcode HTML`, + "layouts/shortcodes/output.amp.html", `Output Shortcode AMP`) + + b.Build(BuildCfg{}) + + b.AssertFileContent("public/output/index.html", ` +Output Shortcode HTML +`) + b.AssertFileContent("public/amp/output/index.html", ` +Output Shortcode AMP +`) + + b.EditFiles("layouts/shortcodes/output.amp.html", `Output Shortcode AMP Edited`) + + b.Build(BuildCfg{}) + + b.AssertFileContent("public/amp/output/index.html", ` +Output Shortcode AMP Edited +`) + + }) + } diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go index f5413a932..366c9971c 100644 --- a/hugolib/shortcode.go +++ b/hugolib/shortcode.go @@ -176,7 +176,8 @@ type shortcode struct { ordinal int err error - info tpl.Info + info tpl.Info // One of the output formats (arbitrary) + templs []tpl.Template // All output formats // If set, the rendered shortcode is sent as part of the surrounding content // to Blackfriday and similar. @@ -541,15 +542,14 @@ Loop: sc.name = currItem.ValStr() - // Check if the template expects inner content. - // We pick the first template for an arbitrary output format - // if more than one. It is "all inner or no inner". - tmpl, found, _ := s.s.Tmpl().LookupVariant(sc.name, tpl.TemplateVariants{}) - if !found { + // Used to check if the template expects inner content. + templs := s.s.Tmpl().LookupVariants(sc.name) + if templs == nil { return nil, _errors.Errorf("template for shortcode %q not found", sc.name) } - sc.info = tmpl.(tpl.Info) + sc.info = templs[0].(tpl.Info) + sc.templs = templs case currItem.IsInlineShortcodeName(): sc.name = currItem.ValStr() sc.isInline = true |