tpl/transform: Include options in cache key
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 23 Dec 2018 20:34:17 +0000 (21:34 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 23 Dec 2018 20:34:17 +0000 (21:34 +0100)
See #5555

parser/metadecoders/decoder.go
tpl/transform/unmarshal.go

index 2f3c27d4571f6d2e66c4e9665c6ae984d08238a1..b2d8307b632f14f15fe6c355452bd02a976a4ad7 100644 (file)
@@ -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: ',',
index bc83869756e502fdfedbe6dfe9a190549b77a3f9..c27a21a9e7625ce71748b6a216383efeea2b4b75 100644 (file)
@@ -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 == "" {