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 == "" {