From 634938908ec8f393b9a05d26b4cfe19ca7abb0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 6 Oct 2020 11:19:31 +0200 Subject: pagemeta: Make BuildConfig.Render an enum Allowing links on pages without rendering them. Fixes #7783 --- resources/page/pagemeta/pagemeta.go | 21 ++++++++++-- resources/page/pagemeta/pagemeta_test.go | 58 +++++++++++++++++++++++--------- 2 files changed, 61 insertions(+), 18 deletions(-) (limited to 'resources') diff --git a/resources/page/pagemeta/pagemeta.go b/resources/page/pagemeta/pagemeta.go index 4e09b5ed7..19a0a7ae9 100644 --- a/resources/page/pagemeta/pagemeta.go +++ b/resources/page/pagemeta/pagemeta.go @@ -28,11 +28,12 @@ const ( Never = "never" Always = "always" ListLocally = "local" + Link = "link" ) var defaultBuildConfig = BuildConfig{ List: Always, - Render: true, + Render: Always, PublishResources: true, set: true, } @@ -49,7 +50,10 @@ type BuildConfig struct { List string // Whether to render it. - Render bool + // Valid values: never, always, link. + // The value link means it will not be rendered, but it will get a RelPermalink/Permalink. + // Note that before 0.76.0 this was a bool, so we accept those too. + Render string // Whether to publish its resources. These will still be published on demand, // but enabling this can be useful if the originals (e.g. images) are @@ -62,7 +66,7 @@ type BuildConfig struct { // Disable sets all options to their off value. func (b *BuildConfig) Disable() { b.List = Never - b.Render = false + b.Render = Never b.PublishResources = false b.set = true } @@ -91,5 +95,16 @@ func DecodeBuildConfig(m interface{}) (BuildConfig, error) { b.List = Always } + // In 0.76.0 we changed the Render from bool to a string. + switch b.Render { + case "0": + b.Render = Never + case "1": + b.Render = Always + case Always, Never, Link: + default: + b.Render = Always + } + return b, err } diff --git a/resources/page/pagemeta/pagemeta_test.go b/resources/page/pagemeta/pagemeta_test.go index a66a1f432..c251e7dab 100644 --- a/resources/page/pagemeta/pagemeta_test.go +++ b/resources/page/pagemeta/pagemeta_test.go @@ -31,33 +31,61 @@ func TestDecodeBuildConfig(t *testing.T) { configTempl := ` [_build] -render = true +render = %s list = %s publishResources = true` for _, test := range []struct { - list interface{} - expect string + args []interface{} + expect BuildConfig }{ - {"true", Always}, - {"false", Never}, - {`"always"`, Always}, - {`"local"`, ListLocally}, - {`"asdfadf"`, Always}, + { + []interface{}{"true", "true"}, + BuildConfig{ + Render: Always, + List: Always, + PublishResources: true, + set: true, + }}, + {[]interface{}{"true", "false"}, BuildConfig{ + Render: Always, + List: Never, + PublishResources: true, + set: true, + }}, + {[]interface{}{`"always"`, `"always"`}, BuildConfig{ + Render: Always, + List: Always, + PublishResources: true, + set: true, + }}, + {[]interface{}{`"never"`, `"never"`}, BuildConfig{ + Render: Never, + List: Never, + PublishResources: true, + set: true, + }}, + {[]interface{}{`"link"`, `"local"`}, BuildConfig{ + Render: Link, + List: ListLocally, + PublishResources: true, + set: true, + }}, + {[]interface{}{`"always"`, `"asdfadf"`}, BuildConfig{ + Render: Always, + List: Always, + PublishResources: true, + set: true, + }}, } { - cfg, err := config.FromConfigString(fmt.Sprintf(configTempl, test.list), "toml") + cfg, err := config.FromConfigString(fmt.Sprintf(configTempl, test.args...), "toml") c.Assert(err, qt.IsNil) bcfg, err := DecodeBuildConfig(cfg.Get("_build")) c.Assert(err, qt.IsNil) eq := qt.CmpEquals(hqt.DeepAllowUnexported(BuildConfig{})) - c.Assert(bcfg, eq, BuildConfig{ - Render: true, - List: test.expect, - PublishResources: true, - set: true, - }) + c.Assert(bcfg, eq, test.expect) } -- cgit v1.2.3