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())
+}