shithub: hugo

Download patch

ref: bcb3ef74131f8119e290ddb68908ce27760a80a7
parent: 862f09babebbf6e9bc0d204ad8eabe1cdefbfcf3
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Dec 26 14:30:57 EST 2016

hugolib: Fix preserveTaxonomyNames regressions

Fixes #2809

--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -225,6 +225,9 @@
 				foundTaxonomyPage := false
 				foundTaxonomyTermsPage := false
 				for key := range tax {
+					if s.Info.preserveTaxonomyNames {
+						key = s.Info.pathSpec.MakePathSanitized(key)
+					}
 					for _, p := range taxonomyPages {
 						if p.sections[0] == plural && p.sections[1] == key {
 							foundTaxonomyPage = true
--- a/hugolib/node_as_page_test.go
+++ b/hugolib/node_as_page_test.go
@@ -33,12 +33,14 @@
 */
 
 func TestNodesAsPage(t *testing.T) {
-	for _, ugly := range []bool{false, true} {
-		doTestNodeAsPage(t, ugly)
+	for _, preserveTaxonomyNames := range []bool{false, true} {
+		for _, ugly := range []bool{true, false} {
+			doTestNodeAsPage(t, ugly, preserveTaxonomyNames)
+		}
 	}
 }
 
-func doTestNodeAsPage(t *testing.T, ugly bool) {
+func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) {
 	//jww.SetStdoutThreshold(jww.LevelDebug)
 	jww.SetStdoutThreshold(jww.LevelFatal)
 
@@ -55,6 +57,7 @@
 	testCommonResetState()
 
 	viper.Set("uglyURLs", ugly)
+	viper.Set("preserveTaxonomyNames", preserveTaxonomyNames)
 
 	writeLayoutsForNodeAsPageTests(t)
 	writeNodePagesForNodeAsPageTests("", t)
@@ -86,6 +89,7 @@
 
 	h := s.owner
 	nodes := h.findAllPagesByKindNotIn(KindPage)
+
 	require.Len(t, nodes, 6)
 
 	home := nodes[5] // oldest
@@ -139,6 +143,10 @@
 		"Lastmod: 2009-01-09",
 	)
 
+	web := s.getPage(KindTaxonomy, "categories", "web")
+	require.NotNil(t, web)
+	require.Len(t, web.Data["Pages"].(Pages), 4)
+
 	assertFileContent(t, expectedFilePath(ugly, "public", "categories", "web"), false,
 		"Taxonomy Title: Taxonomy Web",
 		"Taxonomy Web <strong>Content!</strong>",
@@ -728,7 +736,7 @@
 Taxonomy Terms Title: {{ .Title }}
 Taxonomy Terms Content: {{ .Content }}
 {{ range $key, $value := .Data.Terms }}
-	k/v: {{ $key }} / {{ printf "%s" $value }}
+	k/v: {{ $key | lower }} / {{ printf "%s" $value }}
 {{ end }}
 {{ with .Site.Menus.mymenu }}
 {{ range . }}
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -1494,6 +1494,12 @@
 		plural := p.sections[0]
 		term := p.sections[1]
 
+		if s.Info.preserveTaxonomyNames {
+			if v, ok := s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, term)]; ok {
+				term = v
+			}
+		}
+
 		singular := s.taxonomiesPluralSingular[plural]
 		taxonomy := s.Taxonomies[plural].Get(term)
 
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -88,6 +88,11 @@
 	// to get the singular form from that value.
 	taxonomiesPluralSingular map[string]string
 
+	// This is temporary, see https://github.com/spf13/hugo/issues/2835
+	// Maps 	"actors-gerard-depardieu" to "Gérard Depardieu" when preserveTaxonomyNames
+	// is set.
+	taxonomiesOrigKey map[string]string
+
 	Source         source.Input
 	Sections       Taxonomy
 	Info           SiteInfo
@@ -1477,8 +1482,10 @@
 func (s *Site) assembleTaxonomies() {
 	s.Taxonomies = make(TaxonomyList)
 	s.taxonomiesPluralSingular = make(map[string]string)
+	s.taxonomiesOrigKey = make(map[string]string)
 
 	taxonomies := s.Language.GetStringMapString("taxonomies")
+
 	jww.INFO.Printf("found taxonomies: %#v\n", taxonomies)
 
 	for singular, plural := range taxonomies {
@@ -1496,10 +1503,18 @@
 					for _, idx := range v {
 						x := WeightedPage{weight.(int), p}
 						s.Taxonomies[plural].add(idx, x, s.Info.preserveTaxonomyNames)
+						if s.Info.preserveTaxonomyNames {
+							// Need to track the original
+							s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, kp(idx))] = idx
+						}
 					}
 				} else if v, ok := vals.(string); ok {
 					x := WeightedPage{weight.(int), p}
 					s.Taxonomies[plural].add(v, x, s.Info.preserveTaxonomyNames)
+					if s.Info.preserveTaxonomyNames {
+						// Need to track the original
+						s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, kp(v))] = v
+					}
 				} else {
 					jww.ERROR.Printf("Invalid %s in %s\n", plural, p.File.Path())
 				}