commands: Handle floats without decimals in hugo config - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 7d74cd0cc88716fba813e9e2e229c3b22b828b5f
 (DIR) parent d139f30234cbc60fef8a49611189519d40336dbe
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Mon,  7 Aug 2023 19:56:02 +0200
       
       commands: Handle floats without decimals in hugo config
       
       Updates #11345
       
       Diffstat:
         M commands/config.go                  |       2 ++
         M common/maps/maps.go                 |      25 +++++++++++++++++++++++++
       
       2 files changed, 27 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git 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)
 (DIR) diff --git 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)
       +                                }
       +                        }
       +                }
       +        }
       +}