]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
config: Fix env override of slices
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 11 May 2025 09:54:34 +0000 (11:54 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 11 May 2025 17:24:24 +0000 (19:24 +0200)
Fixes #13707

config/allconfig/allconfig_integration_test.go
config/allconfig/load.go

index f8fbb22f77b495b9cdd7694a98fb115db13226d6..8f6cacf84aa884b9ba899b6e269cdf4a0ccb202f 100644 (file)
@@ -357,3 +357,25 @@ All.
 
        b.Assert(b.H.Conf.DefaultContentLanguage(), qt.Equals, "sv")
 }
+
+func TestDefaultConfigEnvDisableLanguagesIssue13707(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableLanguages = []
+[languages]
+[languages.en]
+weight = 1
+[languages.nn]
+weight = 2
+[languages.sv]
+weight = 3
+`
+
+       b := hugolib.Test(t, files, hugolib.TestOptWithConfig(func(conf *hugolib.IntegrationTestConfig) {
+               conf.Environ = []string{`HUGO_DISABLELANGUAGES=sv nn`}
+       }))
+
+       b.Assert(len(b.H.Sites), qt.Equals, 1)
+}
index 2d9185f6f52a15f458696e69d322deffdbe2f226..4fb8bbaef4715c88349bae201437dcc5c8eefe43 100644 (file)
@@ -233,40 +233,51 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
 
                if existing != nil {
                        val, err := metadecoders.Default.UnmarshalStringTo(env.Value, existing)
-                       if err != nil {
+                       if err == nil {
+                               val = l.envValToVal(env.Key, val)
+                               if owner != nil {
+                                       owner[nestedKey] = val
+                               } else {
+                                       l.cfg.Set(env.Key, val)
+                               }
                                continue
                        }
+               }
 
-                       if owner != nil {
-                               owner[nestedKey] = val
-                       } else {
-                               l.cfg.Set(env.Key, val)
-                       }
+               if owner != nil && nestedKey != "" {
+                       owner[nestedKey] = env.Value
                } else {
-                       if nestedKey != "" {
-                               owner[nestedKey] = env.Value
-                       } else {
-                               var val any
-                               key := strings.ReplaceAll(env.Key, delim, ".")
-                               _, ok := allDecoderSetups[key]
-                               if ok {
-                                       // A map.
-                                       if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil {
-                                               val = v
-                                       }
+                       var val any
+                       key := strings.ReplaceAll(env.Key, delim, ".")
+                       _, ok := allDecoderSetups[key]
+                       if ok {
+                               // A map.
+                               if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil {
+                                       val = v
                                }
-                               if val == nil {
-                                       // A string.
-                                       val = l.envStringToVal(key, env.Value)
-                               }
-                               l.cfg.Set(key, val)
                        }
+
+                       if val == nil {
+                               // A string.
+                               val = l.envStringToVal(key, env.Value)
+                       }
+                       l.cfg.Set(key, val)
                }
+
        }
 
        return nil
 }
 
+func (l *configLoader) envValToVal(k string, v any) any {
+       switch v := v.(type) {
+       case string:
+               return l.envStringToVal(k, v)
+       default:
+               return v
+       }
+}
+
 func (l *configLoader) envStringToVal(k, v string) any {
        switch k {
        case "disablekinds", "disablelanguages":