diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/commonConfig.go (renamed from config/sitemap.go) | 46 | ||||
-rw-r--r-- | config/commonConfig_test.go | 60 |
2 files changed, 106 insertions, 0 deletions
diff --git a/config/sitemap.go b/config/commonConfig.go index 4031b7ec1..ab2cfe80b 100644 --- a/config/sitemap.go +++ b/config/commonConfig.go @@ -14,10 +14,56 @@ package config import ( + "strings" + + "github.com/gohugoio/hugo/common/herrors" + "github.com/mitchellh/mapstructure" "github.com/spf13/cast" jww "github.com/spf13/jwalterweatherman" ) +var DefaultBuild = Build{ + UseResourceCacheWhen: "fallback", +} + +// Build holds some build related condfiguration. +type Build struct { + UseResourceCacheWhen string // never, fallback, always. Default is fallback +} + +func (b Build) UseResourceCache(err error) bool { + if b.UseResourceCacheWhen == "never" { + return false + } + + if b.UseResourceCacheWhen == "fallback" { + return err == herrors.ErrFeatureNotAvailable + } + + return true +} + +func DecodeBuild(cfg Provider) Build { + m := cfg.GetStringMap("build") + b := DefaultBuild + if m == nil { + return b + } + + err := mapstructure.WeakDecode(m, &b) + if err != nil { + return DefaultBuild + } + + b.UseResourceCacheWhen = strings.ToLower(b.UseResourceCacheWhen) + when := b.UseResourceCacheWhen + if when != "never" && when != "always" && when != "fallback" { + b.UseResourceCacheWhen = "fallback" + } + + return b +} + // Sitemap configures the sitemap to be generated. type Sitemap struct { ChangeFreq string diff --git a/config/commonConfig_test.go b/config/commonConfig_test.go new file mode 100644 index 000000000..281d2b0b6 --- /dev/null +++ b/config/commonConfig_test.go @@ -0,0 +1,60 @@ +// Copyright 2020 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package config + +import ( + "errors" + "testing" + + "github.com/gohugoio/hugo/common/herrors" + + qt "github.com/frankban/quicktest" + + "github.com/spf13/viper" +) + +func TestBuild(t *testing.T) { + c := qt.New(t) + + v := viper.New() + v.Set("build", map[string]interface{}{ + "useResourceCacheWhen": "always", + }) + + b := DecodeBuild(v) + + c.Assert(b.UseResourceCacheWhen, qt.Equals, "always") + + v.Set("build", map[string]interface{}{ + "useResourceCacheWhen": "foo", + }) + + b = DecodeBuild(v) + + c.Assert(b.UseResourceCacheWhen, qt.Equals, "fallback") + + c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, true) + c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, false) + + b.UseResourceCacheWhen = "always" + c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, true) + c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, true) + c.Assert(b.UseResourceCache(nil), qt.Equals, true) + + b.UseResourceCacheWhen = "never" + c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, false) + c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, false) + c.Assert(b.UseResourceCache(nil), qt.Equals, false) + +} |