mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	@@ -18,6 +18,7 @@ import (
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/gohugoio/hugo/common/loggers"
 | 
			
		||||
	"github.com/gohugoio/hugo/common/maps"
 | 
			
		||||
	"github.com/gohugoio/hugo/config"
 | 
			
		||||
	"github.com/gohugoio/hugo/hugofs/glob"
 | 
			
		||||
@@ -90,7 +91,14 @@ var disallowedCascadeKeys = map[string]bool{
 | 
			
		||||
	"lang": true,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DecodeCascadeConfig(in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, map[PageMatcher]maps.Params], error) {
 | 
			
		||||
// See issue 11977.
 | 
			
		||||
func isGlobWithExtension(s string) bool {
 | 
			
		||||
	pathParts := strings.Split(s, "/")
 | 
			
		||||
	last := pathParts[len(pathParts)-1]
 | 
			
		||||
	return strings.Count(last, ".") > 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DecodeCascadeConfig(logger loggers.Logger, in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, map[PageMatcher]maps.Params], error) {
 | 
			
		||||
	buildConfig := func(in any) (map[PageMatcher]maps.Params, any, error) {
 | 
			
		||||
		cascade := make(map[PageMatcher]maps.Params)
 | 
			
		||||
		if in == nil {
 | 
			
		||||
@@ -119,6 +127,9 @@ func DecodeCascadeConfig(in any) (*config.ConfigNamespace[[]PageMatcherParamsCon
 | 
			
		||||
 | 
			
		||||
		for _, cfg := range cfgs {
 | 
			
		||||
			m := cfg.Target
 | 
			
		||||
			if isGlobWithExtension(m.Path) {
 | 
			
		||||
				logger.Erroridf("cascade-pattern-with-extension", "cascade target path %q looks like a path with an extension; since Hugo v0.123.0 this will not match anything, see  https://gohugo.io/methods/page/path/", m.Path)
 | 
			
		||||
			}
 | 
			
		||||
			c, found := cascade[m]
 | 
			
		||||
			if found {
 | 
			
		||||
				// Merge
 | 
			
		||||
@@ -139,8 +150,8 @@ func DecodeCascadeConfig(in any) (*config.ConfigNamespace[[]PageMatcherParamsCon
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DecodeCascade decodes in which could be either a map or a slice of maps.
 | 
			
		||||
func DecodeCascade(in any) (map[PageMatcher]maps.Params, error) {
 | 
			
		||||
	conf, err := DecodeCascadeConfig(in)
 | 
			
		||||
func DecodeCascade(logger loggers.Logger, in any) (map[PageMatcher]maps.Params, error) {
 | 
			
		||||
	conf, err := DecodeCascadeConfig(logger, in)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/gohugoio/hugo/common/hugo"
 | 
			
		||||
	"github.com/gohugoio/hugo/common/loggers"
 | 
			
		||||
	"github.com/gohugoio/hugo/common/maps"
 | 
			
		||||
 | 
			
		||||
	qt "github.com/frankban/quicktest"
 | 
			
		||||
@@ -128,7 +129,7 @@ func TestDecodeCascadeConfig(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	got, err := DecodeCascadeConfig(in)
 | 
			
		||||
	got, err := DecodeCascadeConfig(loggers.NewDefault(), in)
 | 
			
		||||
 | 
			
		||||
	c.Assert(err, qt.IsNil)
 | 
			
		||||
	c.Assert(got, qt.IsNotNil)
 | 
			
		||||
@@ -150,7 +151,7 @@ func TestDecodeCascadeConfig(t *testing.T) {
 | 
			
		||||
		{Params: maps.Params{"b": string("bv")}, Target: PageMatcher{Kind: "page"}},
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	got, err = DecodeCascadeConfig(nil)
 | 
			
		||||
	got, err = DecodeCascadeConfig(loggers.NewDefault(), nil)
 | 
			
		||||
	c.Assert(err, qt.IsNil)
 | 
			
		||||
	c.Assert(got, qt.IsNotNil)
 | 
			
		||||
}
 | 
			
		||||
@@ -172,3 +173,17 @@ func (c testConfig) Running() bool {
 | 
			
		||||
func (c testConfig) WorkingDir() string {
 | 
			
		||||
	return c.workingDir
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestIsGlobWithExtension(t *testing.T) {
 | 
			
		||||
	c := qt.New(t)
 | 
			
		||||
 | 
			
		||||
	c.Assert(isGlobWithExtension("index.md"), qt.Equals, true)
 | 
			
		||||
	c.Assert(isGlobWithExtension("foo/index.html"), qt.Equals, true)
 | 
			
		||||
	c.Assert(isGlobWithExtension("posts/page"), qt.Equals, false)
 | 
			
		||||
	c.Assert(isGlobWithExtension("pa.th/foo"), qt.Equals, false)
 | 
			
		||||
	c.Assert(isGlobWithExtension(""), qt.Equals, false)
 | 
			
		||||
	c.Assert(isGlobWithExtension("*.md?"), qt.Equals, true)
 | 
			
		||||
	c.Assert(isGlobWithExtension("*.md*"), qt.Equals, true)
 | 
			
		||||
	c.Assert(isGlobWithExtension("posts/*"), qt.Equals, false)
 | 
			
		||||
	c.Assert(isGlobWithExtension("*.md"), qt.Equals, true)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user