shithub: hugo

Download patch

ref: d8a256c155d23ad451625fcb292b297d85888c4c
parent: 446e606a098aeacbaaf89a53c7addd33cd888a74
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Wed Aug 10 18:46:02 EDT 2016

Fix YAML loading of multilingual config

And some other minor fixes from code review.

Updates #2309

--- a/helpers/url.go
+++ b/helpers/url.go
@@ -183,12 +183,13 @@
 }
 
 func getLanguagePrefix() string {
-	defaultLang := viper.GetString("DefaultContentLanguage")
-	defaultInSubDir := viper.GetBool("DefaultContentLanguageInSubdir")
-
 	if !viper.GetBool("Multilingual") {
 		return ""
 	}
+
+	defaultLang := viper.GetString("DefaultContentLanguage")
+	defaultInSubDir := viper.GetBool("DefaultContentLanguageInSubdir")
+
 	currentLang := viper.Get("CurrentContentLanguage").(*Language).Lang
 	if currentLang == "" || (currentLang == defaultLang && !defaultInSubDir) {
 		return ""
--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -385,9 +385,9 @@
 	}
 }
 
-// preRender performs build tasks that needs to be done as late as possible.
+// preRender performs build tasks that need to be done as late as possible.
 // Shortcode handling is the main task in here.
-// TODO(bep) We need to look at the whole handler-chain construct witht he below in mind.
+// TODO(bep) We need to look at the whole handler-chain construct with he below in mind.
 func (h *HugoSites) preRender() error {
 
 	for _, s := range h.Sites {
--- a/hugolib/hugo_sites_test.go
+++ b/hugolib/hugo_sites_test.go
@@ -160,9 +160,22 @@
 	}
 }
 
+//
 func TestMultiSitesBuild(t *testing.T) {
+	for _, config := range []struct {
+		content string
+		suffix  string
+	}{
+		{multiSiteTomlConfig, "toml"},
+		{multiSiteYAMLConfig, "yml"},
+	} {
+		doTestMultiSitesBuild(t, config.content, config.suffix)
+	}
+}
+
+func doTestMultiSitesBuild(t *testing.T, configContent, configSuffix string) {
 	testCommonResetState()
-	sites := createMultiTestSites(t, multiSiteTomlConfig)
+	sites := createMultiTestSitesForConfig(t, configContent, configSuffix)
 
 	err := sites.Build(BuildCfg{})
 
@@ -598,8 +611,55 @@
 lag = "lag"
 `
 
+var multiSiteYAMLConfig = `
+DefaultExtension: "html"
+baseurl: "http://example.com/blog"
+DisableSitemap: false
+DisableRSS: false
+RSSUri: "index.xml"
+
+paginate: 1
+DefaultContentLanguage: "fr"
+
+permalinks:
+    other: "/somewhere/else/:filename"
+
+blackfriday:
+    angledQuotes: true
+
+Taxonomies:
+    tag: "tags"
+
+Languages:
+    en:
+        weight: 10
+        title: "English"
+        blackfriday:
+            angledQuotes: false
+    fr:
+        weight: 20
+        title: "Français"
+        Taxonomies:
+            plaque: "plaques"
+    nn:
+        weight: 30
+        title: "Nynorsk"
+        Taxonomies:
+            lag: "lag"
+    nb:
+        weight: 40
+        title: "Bokmål"
+        Taxonomies:
+            lag: "lag"
+
+`
+
 func createMultiTestSites(t *testing.T, tomlConfig string) *HugoSites {
+	return createMultiTestSitesForConfig(t, tomlConfig, "toml")
+}
 
+func createMultiTestSitesForConfig(t *testing.T, configContent, configSuffix string) *HugoSites {
+
 	// Add some layouts
 	if err := afero.WriteFile(hugofs.Source(),
 		filepath.Join("layouts", "_default/single.html"),
@@ -760,8 +820,9 @@
 `)},
 	}
 
-	writeSource(t, "multilangconfig.toml", tomlConfig)
-	if err := LoadGlobalConfig("", "multilangconfig.toml"); err != nil {
+	configFile := "multilangconfig." + configSuffix
+	writeSource(t, configFile, configContent)
+	if err := LoadGlobalConfig("", configFile); err != nil {
 		t.Fatalf("Failed to load config: %s", err)
 	}
 
--- a/hugolib/multilingual.go
+++ b/hugolib/multilingual.go
@@ -83,10 +83,10 @@
 	i := 0
 
 	for lang, langConf := range l {
-		langsMap, ok := langConf.(map[string]interface{})
+		langsMap, err := cast.ToStringMapE(langConf)
 
-		if !ok {
-			return nil, fmt.Errorf("Language config is not a map: %v", langsMap)
+		if err != nil {
+			return nil, fmt.Errorf("Language config is not a map: %T", langConf)
 		}
 
 		language := helpers.NewLanguage(lang)
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -777,7 +777,7 @@
 }
 
 func (s *Site) render() (err error) {
-	// There are sadly some global template funcs etc. that needs the language information.
+	// There are sadly some global template funcs etc. that need the language information.
 	viper.Set("Multilingual", s.multilingualEnabled())
 	viper.Set("CurrentContentLanguage", s.Language)
 	if err = tpl.SetTranslateLang(s.Language.Lang); err != nil {
--