hugolib: Fix cascade in server mode
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 26 Nov 2019 13:20:31 +0000 (14:20 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 26 Nov 2019 16:04:39 +0000 (17:04 +0100)
Fixes #6538

hugolib/cascade_test.go
hugolib/pages_map.go

index d6701cf284eb92d0e0e6e883ee5289d286782c21..6b176ad64d7ee8546663eaea0e740857ba17c444 100644 (file)
@@ -100,6 +100,50 @@ func TestCascade(t *testing.T) {
 
 }
 
+func TestCascadeEdit(t *testing.T) {
+       p1Content := `---
+title: P1
+---
+`
+       b := newTestSitesBuilder(t).Running()
+       b.WithTemplatesAdded("_default/single.html", `Banner: {{ .Params.banner }}|Layout: {{ .Layout }}|Type: {{ .Type }}|Content: {{ .Content }}`)
+       b.WithContent("post/_index.md", `
+---
+title: Post
+cascade:
+  banner: post.jpg
+  layout: postlayout
+  type: posttype
+---
+`)
+
+       b.WithContent("post/dir/_index.md", `
+---
+title: Dir
+---
+`, "post/dir/p1.md", p1Content)
+       b.Build(BuildCfg{})
+
+       assert := func() {
+               b.Helper()
+               b.AssertFileContent("public/post/dir/p1/index.html",
+                       `Banner: post.jpg|`,
+                       `Layout: postlayout`,
+                       `Type: posttype`,
+               )
+       }
+
+       assert()
+
+       b.EditFiles("content/post/dir/p1.md", p1Content+"\ncontent edit")
+       b.Build(BuildCfg{})
+
+       assert()
+       b.AssertFileContent("public/post/dir/p1/index.html",
+               `content edit`,
+       )
+}
+
 func newCascadeTestBuilder(t testing.TB, langs []string) *sitesBuilder {
        p := func(m map[string]interface{}) string {
                var yamlStr string
index bc8589142c6993a460201bc445e870d34a6f7be0..7c53aaf3fdd96a92ecb3dcf4c8046a9d86aeb2da 100644 (file)
@@ -148,7 +148,19 @@ func (m *pagesMap) addBucketFor(key string, p *pageState, meta map[string]interf
 
        disabled := !m.s.isEnabled(p.Kind())
 
-       bucket := &pagesMapBucket{owner: p, view: isView, meta: meta, disabled: disabled}
+       var cascade map[string]interface{}
+       if p.bucket != nil {
+               cascade = p.bucket.cascade
+       }
+
+       bucket := &pagesMapBucket{
+               owner:    p,
+               view:     isView,
+               cascade:  cascade,
+               meta:     meta,
+               disabled: disabled,
+       }
+
        p.bucket = bucket
 
        m.r.Insert(key, bucket)