shithub: hugo

Download patch

ref: 57e10f174e51cc5e1cf5f37eed30a0f3b153dd64
parent: db85e83403913cff4b8737b138932b28e5bf6160
author: Bjørn Erik Pedersen <[email protected]>
date: Thu Jan 11 12:46:43 EST 2018

Support uglyURLs per section

Fixes #4256

--- a/hugolib/page_paths.go
+++ b/hugolib/page_paths.go
@@ -86,7 +86,7 @@
 		PathSpec:    p.s.PathSpec,
 		Kind:        p.Kind,
 		Sections:    p.sections,
-		UglyURLs:    p.s.Info.uglyURLs,
+		UglyURLs:    p.s.Info.uglyURLs(p),
 		Dir:         filepath.ToSlash(p.Source.Dir()),
 		URL:         p.URLPath.URL,
 		IsMultihost: p.s.owner.IsMultihost(),
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -357,7 +357,7 @@
 	BuildDrafts           bool
 	canonifyURLs          bool
 	relativeURLs          bool
-	uglyURLs              bool
+	uglyURLs              func(p *Page) bool
 	preserveTaxonomyNames bool
 	Data                  *map[string]interface{}
 
@@ -413,6 +413,9 @@
 		multilingual:    newMultiLingualForLanguage(cfg.language),
 		PageCollections: cfg.pageCollections,
 		Params:          make(map[string]interface{}),
+		uglyURLs: func(p *Page) bool {
+			return false
+		},
 	}
 }
 
@@ -1035,6 +1038,24 @@
 		multilingual = s.owner.multilingual
 	}
 
+	var uglyURLs = func(p *Page) bool {
+		return false
+	}
+
+	v := s.Cfg.Get("uglyURLs")
+	if v != nil {
+		if vv, ok := v.(bool); ok {
+			uglyURLs = func(p *Page) bool {
+				return vv
+			}
+		} else {
+			m := cast.ToStringMapBool(v)
+			uglyURLs = func(p *Page) bool {
+				return m[p.Section()]
+			}
+		}
+	}
+
 	s.Info = SiteInfo{
 		Title:                          lang.GetString("title"),
 		Author:                         lang.GetStringMap("author"),
@@ -1052,7 +1073,7 @@
 		BuildDrafts:                    s.Cfg.GetBool("buildDrafts"),
 		canonifyURLs:                   s.Cfg.GetBool("canonifyURLs"),
 		relativeURLs:                   s.Cfg.GetBool("relativeURLs"),
-		uglyURLs:                       s.Cfg.GetBool("uglyURLs"),
+		uglyURLs:                       uglyURLs,
 		preserveTaxonomyNames:          lang.GetBool("preserveTaxonomyNames"),
 		PageCollections:                s.PageCollections,
 		Menus:                          &s.Menus,
--- a/hugolib/site_url_test.go
+++ b/hugolib/site_url_test.go
@@ -87,3 +87,40 @@
 		}
 	}
 }
+
+func TestUglyURLsPerSection(t *testing.T) {
+	t.Parallel()
+
+	assert := require.New(t)
+
+	const dt = `---
+title: Do not go gentle into that good night
+---
+
+Wild men who caught and sang the sun in flight,
+And learn, too late, they grieved it on its way,
+Do not go gentle into that good night.
+
+`
+
+	cfg, fs := newTestCfg()
+
+	cfg.Set("uglyURLs", map[string]bool{
+		"sect2": true,
+	})
+
+	writeSource(t, fs, filepath.Join("content", "sect1", "p1.md"), dt)
+	writeSource(t, fs, filepath.Join("content", "sect2", "p2.md"), dt)
+
+	s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{SkipRender: true})
+
+	assert.Len(s.RegularPages, 2)
+
+	notUgly := s.getPage(KindPage, "sect1/p1.md")
+	assert.NotNil(notUgly)
+	assert.Equal("/sect1/p1/", notUgly.RelPermalink())
+
+	ugly := s.getPage(KindPage, "sect2/p2.md")
+	assert.NotNil(ugly)
+	assert.Equal("/sect2/p2.html", ugly.RelPermalink())
+}