From 7d74cd0cc88716fba813e9e2e229c3b22b828b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 7 Aug 2023 19:56:02 +0200 Subject: [PATCH] commands: Handle floats without decimals in hugo config Updates #11345 --- commands/config.go | 2 ++ common/maps/maps.go | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/commands/config.go b/commands/config.go index 9bf1c0961..63ee4f7c8 100644 --- a/commands/config.go +++ b/commands/config.go @@ -23,6 +23,7 @@ import ( "time" "github.com/bep/simplecobra" + "github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/config/allconfig" "github.com/gohugoio/hugo/modules" "github.com/gohugoio/hugo/parser" @@ -92,6 +93,7 @@ func (c *configCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, arg if err := json.Unmarshal(buf.Bytes(), &m); err != nil { return err } + maps.ConvertFloat64WithNoDecimalsToInt(m) switch format { case "yaml": return parser.InterfaceToConfig(m, metadecoders.YAML, os.Stdout) diff --git a/common/maps/maps.go b/common/maps/maps.go index 6aefde927..f0fd3d5ce 100644 --- a/common/maps/maps.go +++ b/common/maps/maps.go @@ -210,3 +210,28 @@ func (r KeyRenamer) renamePath(parentKeyPath string, m map[string]any) { } } } + +// ConvertFloat64WithNoDecimalsToInt converts float64 values with no decimals to int recursively. +func ConvertFloat64WithNoDecimalsToInt(m map[string]any) { + for k, v := range m { + switch vv := v.(type) { + case float64: + if v == float64(int64(vv)) { + m[k] = int64(vv) + } + case map[string]any: + ConvertFloat64WithNoDecimalsToInt(vv) + case []any: + for i, vvv := range vv { + switch vvvv := vvv.(type) { + case float64: + if vvv == float64(int64(vvvv)) { + vv[i] = int64(vvvv) + } + case map[string]any: + ConvertFloat64WithNoDecimalsToInt(vvvv) + } + } + } + } +}