From c22389e2f1a8a32f9980293bd630a222596a32b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 30 Jul 2024 10:08:19 +0200 Subject: [PATCH] identity: Upgrade to github.com/mitchellh/hashstructure/v2 v2.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` name old time/op new time/op delta HashString/n28-10 131ns ± 7% 133ns ±19% ~ (p=0.343 n=4+4) HashString/n112-10 237ns ± 5% 241ns ± 3% ~ (p=0.229 n=4+4) HashString/n448-10 688ns ± 3% 687ns ± 1% ~ (p=0.886 n=4+4) HashString/n1792-10 2.51µs ± 3% 2.56µs ± 3% ~ (p=0.200 n=4+4) HashString/n7168-10 10.1µs ± 2% 10.0µs ± 4% ~ (p=0.686 n=4+4) name old alloc/op new alloc/op delta HashString/n28-10 80.0B ± 0% 80.0B ± 0% ~ (all equal) HashString/n112-10 160B ± 0% 160B ± 0% ~ (all equal) HashString/n448-10 496B ± 0% 496B ± 0% ~ (all equal) HashString/n1792-10 1.84kB ± 0% 1.84kB ± 0% ~ (all equal) HashString/n7168-10 8.24kB ± 0% 8.24kB ± 0% ~ (all equal) name old allocs/op new allocs/op delta HashString/n28-10 4.00 ± 0% 4.00 ± 0% ~ (all equal) HashString/n112-10 4.00 ± 0% 4.00 ± 0% ~ (all equal) HashString/n448-10 4.00 ± 0% 4.00 ± 0% ~ (all equal) HashString/n1792-10 4.00 ± 0% 4.00 ± 0% ~ (all equal) HashString/n7168-10 4.00 ± 0% 4.00 ± 0% ~ (all equal) ``` Closes #11644 --- config/namespace_test.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- identity/identityhash.go | 4 ++-- resources/internal/key_test.go | 2 +- resources/resource_factories/create/remote_test.go | 13 +++++++------ resources/resource_transformers/js/options_test.go | 2 +- resources/resources_integration_test.go | 6 +++--- tpl/collections/reflect_helpers.go | 9 ++------- 9 files changed, 20 insertions(+), 24 deletions(-) diff --git a/config/namespace_test.go b/config/namespace_test.go index 9bd23e08e57..3bbb282592b 100644 --- a/config/namespace_test.go +++ b/config/namespace_test.go @@ -43,7 +43,7 @@ func TestNamespace(t *testing.T) { c.Assert(err, qt.IsNil) c.Assert(ns, qt.Not(qt.IsNil)) c.Assert(ns.SourceStructure, qt.DeepEquals, map[string]interface{}{"foo": "bar"}) - c.Assert(ns.SourceHash, qt.Equals, "14368731254619220105") + c.Assert(ns.SourceHash, qt.Equals, "5334326627423288605") c.Assert(ns.Config, qt.DeepEquals, &tstNsExt{Foo: "bar"}) c.Assert(ns.Signature(), qt.DeepEquals, []*tstNsExt(nil)) } diff --git a/go.mod b/go.mod index c77f4278345..4467afd594f 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,7 @@ require ( github.com/makeworld-the-better-one/dither/v2 v2.4.0 github.com/marekm4/color-extractor v1.2.1 github.com/mattn/go-isatty v0.0.20 - github.com/mitchellh/hashstructure v1.1.0 + github.com/mitchellh/hashstructure/v2 v2.0.2 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/muesli/smartcrop v0.3.0 github.com/niklasfasching/go-org v1.7.0 diff --git a/go.sum b/go.sum index f535465cf50..2bcb46b91d9 100644 --- a/go.sum +++ b/go.sum @@ -377,8 +377,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= -github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= +github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= +github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= diff --git a/identity/identityhash.go b/identity/identityhash.go index 8760ff64d2d..70371e56782 100644 --- a/identity/identityhash.go +++ b/identity/identityhash.go @@ -16,7 +16,7 @@ package identity import ( "strconv" - "github.com/mitchellh/hashstructure" + "github.com/mitchellh/hashstructure/v2" ) // HashString returns a hash from the given elements. @@ -44,7 +44,7 @@ func HashUint64(vs ...any) uint64 { o = elements } - hash, err := hashstructure.Hash(o, nil) + hash, err := hashstructure.Hash(o, hashstructure.FormatV2, nil) if err != nil { panic(err) } diff --git a/resources/internal/key_test.go b/resources/internal/key_test.go index 38286333d4a..b3f54eebd28 100644 --- a/resources/internal/key_test.go +++ b/resources/internal/key_test.go @@ -32,5 +32,5 @@ func TestResourceTransformationKey(t *testing.T) { key := NewResourceTransformationKey("testing", testStruct{Name: "test", V1: int64(10), V2: int32(20), V3: 30, V4: uint64(40)}) c := qt.New(t) - c.Assert(key.Value(), qt.Equals, "testing_518996646957295636") + c.Assert(key.Value(), qt.Equals, "testing_5850874845946291698") } diff --git a/resources/resource_factories/create/remote_test.go b/resources/resource_factories/create/remote_test.go index 49d0b1541ae..5284c4d1926 100644 --- a/resources/resource_factories/create/remote_test.go +++ b/resources/resource_factories/create/remote_test.go @@ -121,15 +121,16 @@ func TestRemoteResourceKeys(t *testing.T) { c := qt.New(t) check := func(uri string, optionsm map[string]any, expect1, expect2 string) { + c.Helper() got1, got2 := remoteResourceKeys(uri, optionsm) c.Assert(got1, qt.Equals, expect1) c.Assert(got2, qt.Equals, expect2) } - check("foo", nil, "5917621528921068675", "5917621528921068675") - check("foo", map[string]any{"bar": "baz"}, "7294498335241413323", "7294498335241413323") - check("foo", map[string]any{"key": "1234", "bar": "baz"}, "14904296279238663669", "7294498335241413323") - check("foo", map[string]any{"key": "12345", "bar": "baz"}, "12191037851845371770", "7294498335241413323") - check("asdf", map[string]any{"key": "1234", "bar": "asdf"}, "14904296279238663669", "3787889110563790121") - check("asdf", map[string]any{"key": "12345", "bar": "asdf"}, "12191037851845371770", "3787889110563790121") + check("foo", nil, "10276615683545312752", "10276615683545312752") + check("foo", map[string]any{"bar": "baz"}, "9898282343037894676", "9898282343037894676") + check("foo", map[string]any{"key": "1234", "bar": "baz"}, "14904296279238663669", "9898282343037894676") + check("foo", map[string]any{"key": "12345", "bar": "baz"}, "12191037851845371770", "9898282343037894676") + check("asdf", map[string]any{"key": "1234", "bar": "asdf"}, "14904296279238663669", "3005610248808565917") + check("asdf", map[string]any{"key": "12345", "bar": "asdf"}, "12191037851845371770", "3005610248808565917") } diff --git a/resources/resource_transformers/js/options_test.go b/resources/resource_transformers/js/options_test.go index de20cbd05de..d2821c55244 100644 --- a/resources/resource_transformers/js/options_test.go +++ b/resources/resource_transformers/js/options_test.go @@ -44,7 +44,7 @@ func TestOptionKey(t *testing.T) { key := (&buildTransformation{optsm: opts}).Key() - c.Assert(key.Value(), qt.Equals, "jsbuild_7891849149754191852") + c.Assert(key.Value(), qt.Equals, "jsbuild_9458638411414195026") } func TestToBuildOptions(t *testing.T) { diff --git a/resources/resources_integration_test.go b/resources/resources_integration_test.go index ba580b4dce1..df489c9e541 100644 --- a/resources/resources_integration_test.go +++ b/resources/resources_integration_test.go @@ -159,9 +159,9 @@ resize 2|RelPermalink: {{ $image.RelPermalink }}|MediaType: {{ $image.MediaType b := hugolib.Test(t, files) b.AssertFileContent("public/index.html", - "jpg|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_17010532266664966692.jpg|MediaType: image/jpeg|Width: 1|Height: 1|", - "resize 1|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_6707036659822075562.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", - "resize 2|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_6707036659822075562.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", + "jpg|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_14347832029652749901.jpg|MediaType: image/jpeg|Width: 1|Height: 1|", + "resize 1|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_14038289290831899195.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", + "resize 2|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_14038289290831899195.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", ) } diff --git a/tpl/collections/reflect_helpers.go b/tpl/collections/reflect_helpers.go index 4687acdde57..b1966841dc2 100644 --- a/tpl/collections/reflect_helpers.go +++ b/tpl/collections/reflect_helpers.go @@ -19,7 +19,7 @@ import ( "reflect" "github.com/gohugoio/hugo/common/types" - "github.com/mitchellh/hashstructure" + "github.com/gohugoio/hugo/identity" ) var ( @@ -47,14 +47,9 @@ func numberToFloat(v reflect.Value) (float64, error) { // to make them comparable func normalize(v reflect.Value) any { k := v.Kind() - switch { case !v.Type().Comparable(): - h, err := hashstructure.Hash(v.Interface(), nil) - if err != nil { - panic(err) - } - return h + return identity.HashUint64(v.Interface()) case isNumber(k): f, err := numberToFloat(v) if err == nil {