Support uglyURLs per section
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 11 Jan 2018 16:46:43 +0000 (17:46 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 12 Jan 2018 09:39:09 +0000 (10:39 +0100)
Fixes #4256

hugolib/page_paths.go
hugolib/site.go
hugolib/site_url_test.go

index 4033ba4b3285efa83fb3efeea37a63eea583640c..55c770ac8bc77abd0d4a3a7316b598383cb5c72a 100644 (file)
@@ -86,7 +86,7 @@ func (p *Page) initTargetPathDescriptor() error {
                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(),
index 71a4083ef0b2823e70ec4a704777f5d8f6c273ac..771ee59148798ff50eea3ef4006424bfe818b6a6 100644 (file)
@@ -357,7 +357,7 @@ type SiteInfo struct {
        BuildDrafts           bool
        canonifyURLs          bool
        relativeURLs          bool
-       uglyURLs              bool
+       uglyURLs              func(p *Page) bool
        preserveTaxonomyNames bool
        Data                  *map[string]interface{}
 
@@ -413,6 +413,9 @@ func newSiteInfo(cfg siteBuilderCfg) SiteInfo {
                multilingual:    newMultiLingualForLanguage(cfg.language),
                PageCollections: cfg.pageCollections,
                Params:          make(map[string]interface{}),
+               uglyURLs: func(p *Page) bool {
+                       return false
+               },
        }
 }
 
@@ -1035,6 +1038,24 @@ func (s *Site) initializeSiteInfo() {
                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 @@ func (s *Site) initializeSiteInfo() {
                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,
index 479967673c7417563e929ac31886c2e2fc7c3fd9..4839c5e634067b385d9b6846cbd7bbcc6f6c7687 100644 (file)
@@ -87,3 +87,40 @@ func TestPageCount(t *testing.T) {
                }
        }
 }
+
+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())
+}