diff --git a/cache/httpcache/httpcache.go b/cache/httpcache/httpcache.go index 98f7fedd4..7fa76e5c3 100644 --- a/cache/httpcache/httpcache.go +++ b/cache/httpcache/httpcache.go @@ -122,6 +122,10 @@ type GlobMatcher struct { Includes []string } +func (gm GlobMatcher) IsZero() bool { + return len(gm.Includes) == 0 && len(gm.Excludes) == 0 +} + type ConfigCompiled struct { For predicate.P[string] PollConfigs []PollConfigCompiled @@ -155,6 +159,9 @@ func (p PollConfigCompiled) IsZero() bool { } func (gm *GlobMatcher) CompilePredicate() (func(string) bool, error) { + if gm.IsZero() { + panic("no includes or excludes") + } var p predicate.P[string] for _, include := range gm.Includes { g, err := glob.Compile(include, '/') @@ -203,5 +210,9 @@ func DecodeConfig(bcfg config.BaseConfig, m map[string]any) (Config, error) { return c, err } + if c.Cache.For.IsZero() { + c.Cache.For = DefaultConfig.Cache.For + } + return c, nil } diff --git a/cache/httpcache/httpcache_integration_test.go b/cache/httpcache/httpcache_integration_test.go index d3337c023..4d6a5f718 100644 --- a/cache/httpcache/httpcache_integration_test.go +++ b/cache/httpcache/httpcache_integration_test.go @@ -22,6 +22,8 @@ import ( ) func TestConfigCustom(t *testing.T) { + t.Parallel() + files := ` -- hugo.toml -- [httpcache] @@ -51,6 +53,8 @@ includes = ["**gohugo.io**"] } func TestConfigDefault(t *testing.T) { + t.Parallel() + files := ` -- hugo.toml -- ` @@ -62,3 +66,30 @@ func TestConfigDefault(t *testing.T) { b.Assert(compiled.For("https://gohugo.io/foo.jpg"), qt.IsFalse) b.Assert(compiled.PollConfigFor("https://gohugo.io/foo.jpg").Config.Disable, qt.IsTrue) } + +func TestConfigPollsOnly(t *testing.T) { + t.Parallel() + files := ` +-- hugo.toml -- +[httpcache] +[[httpcache.polls]] +low = "5s" +high = "32s" +[httpcache.polls.for] +includes = ["**gohugo.io**"] + + +` + + b := hugolib.Test(t, files) + + compiled := b.H.Configs.Base.C.HTTPCache + + b.Assert(compiled.For("https://gohugo.io/posts.json"), qt.IsFalse) + b.Assert(compiled.For("https://gohugo.io/foo.jpg"), qt.IsFalse) + + pc := compiled.PollConfigFor("https://gohugo.io/foo.jpg") + b.Assert(pc.Config.Low, qt.Equals, 5*time.Second) + b.Assert(pc.Config.High, qt.Equals, 32*time.Second) + b.Assert(compiled.PollConfigFor("https://example.com/foo.jpg").IsZero(), qt.IsTrue) +}