]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix multiple languages in HUGO_DISABLELANGUAGES
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 27 Jul 2023 11:00:01 +0000 (13:00 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 27 Jul 2023 13:51:25 +0000 (15:51 +0200)
Fixes #11278

config/allconfig/load.go
hugolib/config_test.go

index 8551039a0ee00aaa9123f3569c747223be6991e2..91cf1eb056b08921edb28a8da2018e57eccd98d0 100644 (file)
@@ -297,14 +297,20 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
                        if nestedKey != "" {
                                owner[nestedKey] = env.Value
                        } else {
-                               var val any = env.Value
-                               if _, ok := allDecoderSetups[env.Key]; ok {
+                               var val any
+                               key := strings.ReplaceAll(env.Key, delim, ".")
+                               _, ok := allDecoderSetups[key]
+                               if ok {
                                        // A map.
-                                       val, err = metadecoders.Default.UnmarshalStringTo(env.Value, map[string]interface{}{})
+                                       if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]interface{}{}); err == nil {
+                                               val = v
+                                       }
                                }
-                               if err == nil {
-                                       l.cfg.Set(strings.ReplaceAll(env.Key, delim, "."), val)
+                               if val == nil {
+                                       // A string.
+                                       val = l.envStringToVal(key, env.Value)
                                }
+                               l.cfg.Set(key, val)
                        }
                }
        }
@@ -312,6 +318,20 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
        return nil
 }
 
+func (l *configLoader) envStringToVal(k, v string) any {
+       switch k {
+       case "disablekinds", "disablelanguages":
+               if strings.Contains(v, ",") {
+                       return strings.Split(v, ",")
+               } else {
+                       return strings.Fields(v)
+               }
+       default:
+               return v
+       }
+
+}
+
 func (l *configLoader) loadConfigMain(d ConfigSourceDescriptor) (config.LoadConfigResult, modules.ModulesConfig, error) {
        var res config.LoadConfigResult
 
index ff7b01a3fa73146e45d6acddff7b517c61769a70..a39d57781976e262389cab50255d9892d7ff8ec1 100644 (file)
@@ -259,6 +259,47 @@ sub: map[sub1:sub1en]
 
 }
 
+func TestDisableRootSlicesFromEnv(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+baseURL = "https://example.com"
+defaultContentLanguage = "en"
+defaultContentLanguageInSubdir = true
+[languages]
+[languages.en]
+weight = 1
+[languages.sv]
+weight = 2
+[languages.no]
+weight = 3
+
+-- layouts/index.html --
+Home.
+`
+
+       for _, delim := range []string{" ", ","} {
+               environ := []string{"HUGO_DISABLELANGUAGES=sv no", "HUGO_DISABLEKINDS=taxonomy term"}
+               for i, v := range environ {
+                       environ[i] = strings.ReplaceAll(v, " ", delim)
+               }
+               b := NewIntegrationTestBuilder(
+                       IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                               Environ:     environ,
+                               BuildCfg:    BuildCfg{SkipRender: true},
+                       },
+               ).Build()
+
+               conf := b.H.Configs.Base
+               b.Assert(conf.DisableLanguages, qt.DeepEquals, []string{"sv", "no"})
+               b.Assert(conf.DisableKinds, qt.DeepEquals, []string{"taxonomy", "term"})
+       }
+
+}
+
 func TestLoadMultiConfig(t *testing.T) {
        t.Parallel()