Render aliases even if render=link
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 14 Oct 2020 09:23:24 +0000 (11:23 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 14 Oct 2020 14:59:37 +0000 (16:59 +0200)
Fixes #7832

hugolib/content_map.go
hugolib/disableKinds_test.go
hugolib/page__paths.go
hugolib/site_render.go

index 33ef4f8dd99ec07a6c20baa39452bb9043af8bdb..652609e26264be7e55110e1317822ae39ff910ac 100644 (file)
@@ -830,6 +830,13 @@ var (
                }
                return n.p.m.noRender()
        }
+
+       contentTreeNoLinkFilter = func(s string, n *contentNode) bool {
+               if n.p == nil {
+                       return true
+               }
+               return n.p.m.noLink()
+       }
 )
 
 func (c *contentTree) WalkQuery(query pageMapQuery, walkFn contentTreeNodeCallback) {
@@ -865,6 +872,13 @@ func (c contentTrees) WalkRenderable(fn contentTreeNodeCallback) {
        }
 }
 
+func (c contentTrees) WalkLinkable(fn contentTreeNodeCallback) {
+       query := pageMapQuery{Filter: contentTreeNoLinkFilter}
+       for _, tree := range c {
+               tree.WalkQuery(query, fn)
+       }
+}
+
 func (c contentTrees) Walk(fn contentTreeNodeCallback) {
        for _, tree := range c {
                tree.Walk(func(s string, v interface{}) bool {
index 381442d692da88e231277ec7494e825c068b6ea8..73786c730b6e150fe96e9b380d0d22bc5fc37747 100644 (file)
@@ -58,6 +58,7 @@ _build:
                        "sect/no-render-link.md", `
 ---
 title: No Render Link
+aliases: ["/link-alias"]
 _build:
   render: link
 ---
@@ -319,10 +320,14 @@ title: Headless Local Lists Sub
                p := getPage(b, ref)
                b.Assert(p, qt.Not(qt.IsNil))
                b.Assert(p.RelPermalink(), qt.Equals, "/blog/sect/no-render-link/")
-               b.Assert(p.OutputFormats(), qt.HasLen, 0)
+               b.Assert(p.OutputFormats(), qt.HasLen, 1)
                b.Assert(getPageInSitePages(b, ref), qt.Not(qt.IsNil))
                sect := getPage(b, "/sect")
                b.Assert(getPageInPagePages(sect, ref), qt.Not(qt.IsNil))
+
+               // https://github.com/gohugoio/hugo/issues/7832
+               // It should still render any aliases.
+               b.AssertFileContent("public/link-alias/index.html", "refresh")
        })
 
        c.Run("Build config, no publish resources", func(c *qt.C) {
index 535c60ba0aa6315cefab3bcdca36665317452cac..d41b7c2bc04336f02f126ca89e2e58ba534295b9 100644 (file)
@@ -76,7 +76,7 @@ func newPagePaths(
        }
 
        var out page.OutputFormats
-       if !pm.noRender() {
+       if !pm.noLink() {
                out = pageOutputFormats
        }
 
index d9d60c2fa3eed12e31ef6cbdea36905859ba6be7..7f5bcfb1aa3ef4dee1056631f516ee5e24912960 100644 (file)
@@ -323,20 +323,28 @@ func (s *Site) renderRobotsTXT() error {
 // renderAliases renders shell pages that simply have a redirect in the header.
 func (s *Site) renderAliases() error {
        var err error
-       s.pageMap.pageTrees.WalkRenderable(func(ss string, n *contentNode) bool {
+       s.pageMap.pageTrees.WalkLinkable(func(ss string, n *contentNode) bool {
                p := n.p
                if len(p.Aliases()) == 0 {
                        return false
                }
 
+               pathSeen := make(map[string]bool)
+
                for _, of := range p.OutputFormats() {
                        if !of.Format.IsHTML {
-                               return false
+                               continue
                        }
 
-                       plink := of.Permalink()
                        f := of.Format
 
+                       if pathSeen[f.Path] {
+                               continue
+                       }
+                       pathSeen[f.Path] = true
+
+                       plink := of.Permalink()
+
                        for _, a := range p.Aliases() {
                                isRelative := !strings.HasPrefix(a, "/")