hugolib: Prepare child page resources before the page itself
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 19 Apr 2018 14:35:21 +0000 (16:35 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 19 Apr 2018 14:35:21 +0000 (16:35 +0200)
To make sure that the child resources' content is ready before any shortcode is processed in their owner.

See #4632

hugolib/page.go

index d0951bff76c09fc3c542c9c8fe034d892e0a4b8a..4b7c35d76003809580a10039df7a19bb895e9a32 100644 (file)
@@ -1069,6 +1069,16 @@ func (p *Page) prepareForRender(cfg *BuildCfg) error {
        // or a template or similar has changed so wee need to do a rerendering
        // of the shortcodes etc.
 
+       // Handle bundled pages first, so the content is available in the
+       // owners' shortcodes.
+       for _, r := range p.Resources.ByType(pageResourceType) {
+               p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Pages)
+               bp := r.(*Page)
+               if err := bp.prepareForRender(cfg); err != nil {
+                       s.Log.ERROR.Printf("Failed to prepare bundled page %q for render: %s", bp.BaseFileName(), err)
+               }
+       }
+
        // If in watch mode or if we have multiple output formats,
        // we need to keep the original so we can
        // potentially repeat this process on rebuild.
@@ -1119,15 +1129,6 @@ func (p *Page) prepareForRender(cfg *BuildCfg) error {
        //analyze for raw stats
        p.analyzePage()
 
-       // Handle bundled pages.
-       for _, r := range p.Resources.ByType(pageResourceType) {
-               p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Pages)
-               bp := r.(*Page)
-               if err := bp.prepareForRender(cfg); err != nil {
-                       s.Log.ERROR.Printf("Failed to prepare bundled page %q for render: %s", bp.BaseFileName(), err)
-               }
-       }
-
        return nil
 }