From be58c7b9c88116094ca2b424c77210ddcccfff8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 23 Dec 2018 21:34:17 +0100 Subject: [PATCH] tpl/transform: Include options in cache key See #5555 --- parser/metadecoders/decoder.go | 9 +++++++++ tpl/transform/unmarshal.go | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/parser/metadecoders/decoder.go b/parser/metadecoders/decoder.go index 2f3c27d45..b2d8307b6 100644 --- a/parser/metadecoders/decoder.go +++ b/parser/metadecoders/decoder.go @@ -18,6 +18,7 @@ import ( "encoding/csv" "encoding/json" "fmt" + "strings" "github.com/gohugoio/hugo/common/herrors" @@ -39,6 +40,14 @@ type Decoder struct { Comment rune } +// OptionsKey is used in cache keys. +func (d Decoder) OptionsKey() string { + var sb strings.Builder + sb.WriteRune(d.Delimiter) + sb.WriteRune(d.Comment) + return sb.String() +} + // Default is a Decoder in its default configuration. var Default = Decoder{ Delimiter: ',', diff --git a/tpl/transform/unmarshal.go b/tpl/transform/unmarshal.go index bc8386975..c27a21a9e 100644 --- a/tpl/transform/unmarshal.go +++ b/tpl/transform/unmarshal.go @@ -62,6 +62,10 @@ func (ns *Namespace) Unmarshal(args ...interface{}) (interface{}, error) { return nil, errors.New("no Key set in Resource") } + if decoder != metadecoders.Default { + key += decoder.OptionsKey() + } + return ns.cache.GetOrCreate(key, func() (interface{}, error) { f := metadecoders.FormatFromMediaType(r.MediaType()) if f == "" {