Add environment as a new filter to _cascade.target

Fixes #9612
This commit is contained in:
Cathrine Paulsen 2022-04-05 07:41:24 +00:00 committed by GitHub
parent ed9aa374dd
commit da00e7714e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 58 additions and 2 deletions

View file

@ -189,6 +189,9 @@ kind
lang lang
: A Glob pattern matching the Page's language, e.g. "{en,sv}". : A Glob pattern matching the Page's language, e.g. "{en,sv}".
environment
: A Glob pattern matching the build environment, e.g. "{production,development}"
Any of the above can be omitted. Any of the above can be omitted.
### Example ### Example

View file

@ -550,6 +550,32 @@ S1|p1:|p2:p2|
`) `)
}) })
c.Run("slice with environment _target", func(c *qt.C) {
b := newBuilder(c)
b.WithContent("_index.md", `+++
title = "Home"
[[cascade]]
p1 = "p1"
[cascade._target]
path="**p1**"
environment="testing"
[[cascade]]
p2 = "p2"
[cascade._target]
kind="section"
environment="production"
+++
`)
b.Build(BuildCfg{})
b.AssertFileContent("public/index.html", `
P1|p1:|p2:|
S1|p1:|p2:p2|
`)
})
c.Run("slice with yaml _target", func(c *qt.C) { c.Run("slice with yaml _target", func(c *qt.C) {
b := newBuilder(c) b := newBuilder(c)

View file

@ -37,6 +37,9 @@ type PageMatcher struct {
// A Glob pattern matching the Page's language, e.g. "{en,sv}". // A Glob pattern matching the Page's language, e.g. "{en,sv}".
Lang string Lang string
// A Glob pattern matching the Page's Environment, e.g. "{production,development}".
Environment string
} }
// Matches returns whether p matches this matcher. // Matches returns whether p matches this matcher.
@ -67,6 +70,13 @@ func (m PageMatcher) Matches(p Page) bool {
} }
} }
if m.Environment != "" {
g, err := glob.GetGlob(m.Environment)
if err == nil && !g.Match(p.Site().Hugo().Environment) {
return false
}
}
return true return true
} }

View file

@ -14,6 +14,7 @@
package page package page
import ( import (
"github.com/gohugoio/hugo/common/hugo"
"path/filepath" "path/filepath"
"testing" "testing"
@ -22,8 +23,13 @@ import (
func TestPageMatcher(t *testing.T) { func TestPageMatcher(t *testing.T) {
c := qt.New(t) c := qt.New(t)
developmentTestSite := testSite{h: hugo.NewInfo("development", nil)}
productionTestSite := testSite{h: hugo.NewInfo("production", nil)}
p1, p2, p3 := &testPage{path: "/p1", kind: "section", lang: "en"}, &testPage{path: "p2", kind: "page", lang: "no"}, &testPage{path: "p3", kind: "page", lang: "en"} p1, p2, p3 :=
&testPage{path: "/p1", kind: "section", lang: "en", site: developmentTestSite},
&testPage{path: "p2", kind: "page", lang: "no", site: productionTestSite},
&testPage{path: "p3", kind: "page", lang: "en"}
c.Run("Matches", func(c *qt.C) { c.Run("Matches", func(c *qt.C) {
m := PageMatcher{Kind: "section"} m := PageMatcher{Kind: "section"}
@ -50,6 +56,16 @@ func TestPageMatcher(t *testing.T) {
c.Assert(m.Matches(p1), qt.Equals, true) c.Assert(m.Matches(p1), qt.Equals, true)
c.Assert(m.Matches(p2), qt.Equals, false) c.Assert(m.Matches(p2), qt.Equals, false)
c.Assert(m.Matches(p3), qt.Equals, true) c.Assert(m.Matches(p3), qt.Equals, true)
m = PageMatcher{Environment: "development"}
c.Assert(m.Matches(p1), qt.Equals, true)
c.Assert(m.Matches(p2), qt.Equals, false)
c.Assert(m.Matches(p3), qt.Equals, false)
m = PageMatcher{Environment: "production"}
c.Assert(m.Matches(p1), qt.Equals, false)
c.Assert(m.Matches(p2), qt.Equals, true)
c.Assert(m.Matches(p3), qt.Equals, false)
}) })
c.Run("Decode", func(c *qt.C) { c.Run("Decode", func(c *qt.C) {

View file

@ -94,6 +94,7 @@ type testPage struct {
linkTitle string linkTitle string
lang string lang string
section string section string
site testSite
content string content string
@ -532,7 +533,7 @@ func (p *testPage) SectionsPath() string {
} }
func (p *testPage) Site() Site { func (p *testPage) Site() Site {
panic("not implemented") return p.site
} }
func (p *testPage) Sites() Sites { func (p *testPage) Sites() Sites {