hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit ead5799f7ea837fb2ca1879a6d37ba364e53827f
parent d57be113243be4b76310d4476fbb7525d1452658
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Wed, 14 Oct 2020 11:23:24 +0200

Render aliases even if render=link

Fixes #7832

Diffstat:
Mhugolib/content_map.go | 14++++++++++++++
Mhugolib/disableKinds_test.go | 7++++++-
Mhugolib/page__paths.go | 2+-
Mhugolib/site_render.go | 14+++++++++++---
4 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/hugolib/content_map.go b/hugolib/content_map.go
@@ -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 {
diff --git a/hugolib/disableKinds_test.go b/hugolib/disableKinds_test.go
@@ -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) {
diff --git a/hugolib/page__paths.go b/hugolib/page__paths.go
@@ -76,7 +76,7 @@ func newPagePaths(
 	}
 
 	var out page.OutputFormats
-	if !pm.noRender() {
+	if !pm.noLink() {
 		out = pageOutputFormats
 	}
 
diff --git a/hugolib/site_render.go b/hugolib/site_render.go
@@ -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, "/")