shithub: hugo

Download patch

ref: 280df4e380798d336826e9ce5446640e881d2b06
parent: e98f0014f2f46ff4b342d5eb3062d4fb1e6d4184
author: Phil Pennock <[email protected]>
date: Tue May 13 08:56:06 EDT 2014

Fix Viperized .Site.Params

git bisect identified 62dd1d4 as the breaking commit; when
github.com/spf13/viper was introduced, the Params field was always
empty.

Given a map in YAML in Viper, the return type is
`map[interface{}]interface{}`, _not_ `map[string]interface{}`, even if
`.SetDefault()` has been called with an item of
`map[string]interface{}{}` so the cast assertion on the `.Get("Params")`
always failed.

--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -260,9 +260,17 @@
 }
 
 func (s *Site) initializeSiteInfo() {
-	params, ok := viper.Get("Params").(map[string]interface{})
+	paramsV, ok := viper.Get("Params").(map[interface{}]interface{})
+	// Warning: viper.Get(map_item) returns map[interface{}]interface{}
+	// even if .SetDefault called with a map[string]interface{}
 	if !ok {
-		params = make(map[string]interface{})
+		paramsV = make(map[interface{}]interface{})
+	}
+	params := make(map[string]interface{}, len(paramsV))
+	for k, v := range paramsV {
+		if s, ok := k.(string); ok {
+			params[s] = v
+		}
 	}
 
 	permalinks := make(PermalinkOverrides)