]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
cache: Apply httpcache defaults for polling config
authorkhayyam <ksaleem@digitalocean.com>
Fri, 14 Mar 2025 13:37:26 +0000 (09:37 -0400)
committerGitHub <noreply@github.com>
Fri, 14 Mar 2025 13:37:26 +0000 (14:37 +0100)
Previously, compiling the config with partial or missing poll configs
would introduce a panic. This ensures that the default poll configs
are applied in such scenarios to ensure config is valid.

Fixes #13471

cache/httpcache/httpcache.go
cache/httpcache/httpcache_test.go

index 2e8d9b8b49e893e2792ee8ad0747ab6c2959cc0e..bd6d4bf7db47edb3e80310d9073b29f2eac87253 100644 (file)
@@ -188,7 +188,7 @@ func (gm *GlobMatcher) CompilePredicate() (func(string) bool, error) {
        return p, nil
 }
 
-func DecodeConfig(bcfg config.BaseConfig, m map[string]any) (Config, error) {
+func DecodeConfig(_ config.BaseConfig, m map[string]any) (Config, error) {
        if len(m) == 0 {
                return DefaultConfig, nil
        }
@@ -214,5 +214,16 @@ func DecodeConfig(bcfg config.BaseConfig, m map[string]any) (Config, error) {
                c.Cache.For = DefaultConfig.Cache.For
        }
 
+       for pci := range c.Polls {
+               if c.Polls[pci].For.IsZero() {
+                       c.Polls[pci].For = DefaultConfig.Cache.For
+                       c.Polls[pci].Disable = true
+               }
+       }
+
+       if len(c.Polls) == 0 {
+               c.Polls = DefaultConfig.Polls
+       }
+
        return c, nil
 }
index e3659f97bcbe0e4a2e15bfcb0a20ebfc4f88f6e4..60c07d056131d575789d28eadefb1a15d491eb23 100644 (file)
@@ -17,6 +17,7 @@ import (
        "testing"
 
        qt "github.com/frankban/quicktest"
+       "github.com/gohugoio/hugo/config"
 )
 
 func TestGlobMatcher(t *testing.T) {
@@ -40,3 +41,33 @@ func TestGlobMatcher(t *testing.T) {
        c.Assert(p("foo/bar/foo.css"), qt.IsFalse)
        c.Assert(p("foo/bar/foo.xml"), qt.IsTrue)
 }
+
+func TestDefaultConfig(t *testing.T) {
+       c := qt.New(t)
+
+       _, err := DefaultConfig.Compile()
+       c.Assert(err, qt.IsNil)
+}
+
+func TestDecodeConfigInjectsDefaultAndCompiles(t *testing.T) {
+       c := qt.New(t)
+
+       cfg, err := DecodeConfig(config.BaseConfig{}, map[string]interface{}{})
+       c.Assert(err, qt.IsNil)
+       c.Assert(cfg, qt.DeepEquals, DefaultConfig)
+
+       _, err = cfg.Compile()
+       c.Assert(err, qt.IsNil)
+
+       cfg, err = DecodeConfig(config.BaseConfig{}, map[string]any{
+               "cache": map[string]any{
+                       "polls": []map[string]any{
+                               {"disable": true},
+                       },
+               },
+       })
+       c.Assert(err, qt.IsNil)
+
+       _, err = cfg.Compile()
+       c.Assert(err, qt.IsNil)
+}