From 3d3fa5c3fe5ee0c9df59d682ee0acaba71a06ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 3 Mar 2020 08:32:02 +0100 Subject: Add build.UseResourceCacheWhen Fixes #6993 --- config/commonConfig.go | 90 +++++++++++++++++++++++++++++++++++++++++++++ config/commonConfig_test.go | 60 ++++++++++++++++++++++++++++++ config/sitemap.go | 44 ---------------------- 3 files changed, 150 insertions(+), 44 deletions(-) create mode 100644 config/commonConfig.go create mode 100644 config/commonConfig_test.go delete mode 100644 config/sitemap.go (limited to 'config') diff --git a/config/commonConfig.go b/config/commonConfig.go new file mode 100644 index 000000000..ab2cfe80b --- /dev/null +++ b/config/commonConfig.go @@ -0,0 +1,90 @@ +// Copyright 2019 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 ( + "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 + Priority float64 + Filename string +} + +func DecodeSitemap(prototype Sitemap, input map[string]interface{}) Sitemap { + + for key, value := range input { + switch key { + case "changefreq": + prototype.ChangeFreq = cast.ToString(value) + case "priority": + prototype.Priority = cast.ToFloat64(value) + case "filename": + prototype.Filename = cast.ToString(value) + default: + jww.WARN.Printf("Unknown Sitemap field: %s\n", key) + } + } + + return prototype +} 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) + +} diff --git a/config/sitemap.go b/config/sitemap.go deleted file mode 100644 index 4031b7ec1..000000000 --- a/config/sitemap.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2019 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 ( - "github.com/spf13/cast" - jww "github.com/spf13/jwalterweatherman" -) - -// Sitemap configures the sitemap to be generated. -type Sitemap struct { - ChangeFreq string - Priority float64 - Filename string -} - -func DecodeSitemap(prototype Sitemap, input map[string]interface{}) Sitemap { - - for key, value := range input { - switch key { - case "changefreq": - prototype.ChangeFreq = cast.ToString(value) - case "priority": - prototype.Priority = cast.ToFloat64(value) - case "filename": - prototype.Filename = cast.ToString(value) - default: - jww.WARN.Printf("Unknown Sitemap field: %s\n", key) - } - } - - return prototype -} -- cgit v1.2.3