hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit ae6cf93c84c3584b111f4b9fa3fb4e3f63d37915
parent a70da2b74a6af0834cce9668cdb6acdb1c86a4c0
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Thu, 15 Jul 2021 15:31:50 +0200

Fix default values when loading from config dir

By waiting until we've loaded the config dir config before applying the default values.

Fixes #8763

Diffstat:
Mhugolib/config.go | 8++++----
Mhugolib/config_test.go | 53++++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 44 insertions(+), 17 deletions(-)
diff --git a/hugolib/config.go b/hugolib/config.go
@@ -78,10 +78,6 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid
 		}
 	}
 
-	if err := l.applyConfigDefaults(); err != nil {
-		return l.cfg, configFiles, err
-	}
-
 	if d.AbsConfigDir != "" {
 		dcfg, dirnames, err := config.LoadConfigFromDir(l.Fs, d.AbsConfigDir, l.Environment)
 		if err == nil {
@@ -97,6 +93,10 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid
 		}
 	}
 
+	if err := l.applyConfigDefaults(); err != nil {
+		return l.cfg, configFiles, err
+	}
+
 	l.cfg.SetDefaultMergeStrategy()
 
 	// We create languages based on the settings, so we need to make sure that
diff --git a/hugolib/config_test.go b/hugolib/config_test.go
@@ -20,6 +20,8 @@ import (
 	"strings"
 	"testing"
 
+	"github.com/gohugoio/hugo/config"
+
 	"github.com/gohugoio/hugo/media"
 	"github.com/google/go-cmp/cmp"
 
@@ -29,24 +31,49 @@ import (
 )
 
 func TestLoadConfig(t *testing.T) {
-	t.Parallel()
 
 	c := qt.New(t)
 
-	// Add a random config variable for testing.
-	// side = page in Norwegian.
-	configContent := `
-	PaginatePath = "side"
-	`
-
-	mm := afero.NewMemMapFs()
-
-	writeToFs(t, mm, "hugo.toml", configContent)
+	loadConfig := func(c *qt.C, configContent string, fromDir bool) config.Provider {
+		mm := afero.NewMemMapFs()
+		filename := "config.toml"
+		descriptor := ConfigSourceDescriptor{Fs: mm}
+		if fromDir {
+			filename = filepath.Join("config", "_default", filename)
+			descriptor.AbsConfigDir = "config"
+		}
+		writeToFs(t, mm, filename, configContent)
+		cfg, _, err := LoadConfig(descriptor)
+		c.Assert(err, qt.IsNil)
+		return cfg
+	}
 
-	cfg, _, err := LoadConfig(ConfigSourceDescriptor{Fs: mm, Filename: "hugo.toml"})
-	c.Assert(err, qt.IsNil)
+	c.Run("Basic", func(c *qt.C) {
+		c.Parallel()
+		// Add a random config variable for testing.
+		// side = page in Norwegian.
+		cfg := loadConfig(c, `PaginatePath = "side"`, false)
+		c.Assert(cfg.GetString("paginatePath"), qt.Equals, "side")
+	})
 
-	c.Assert(cfg.GetString("paginatePath"), qt.Equals, "side")
+	// Issue #8763
+	for _, fromDir := range []bool{false, true} {
+		testName := "Taxonomy overrides"
+		if fromDir {
+			testName += " from dir"
+		}
+		c.Run(testName, func(c *qt.C) {
+			c.Parallel()
+			cfg := loadConfig(c, `[taxonomies]
+appellation = "appellations"
+vigneron = "vignerons"`, fromDir)
+
+			c.Assert(cfg.Get("taxonomies"), qt.DeepEquals, maps.Params{
+				"appellation": "appellations",
+				"vigneron":    "vignerons",
+			})
+		})
+	}
 }
 
 func TestLoadMultiConfig(t *testing.T) {