shithub: hugo

Download patch

ref: e4fcb672ed8bae21fd9780292b54fea3040dd877
parent: 18c13adcd46bdff963311fdba9eaa9b5a299106e
author: SatowTakeshi <doublequotation@gmail.com>
date: Sat Nov 21 21:58:26 EST 2020

resources: Preserve url set in frontmatter without sanitizing

related #6007 (already closed)

--- a/resources/page/page_paths.go
+++ b/resources/page/page_paths.go
@@ -308,12 +308,16 @@
 
 	linkDir = strings.TrimSuffix(path.Join(slash, linkDir), slash)
 
-	// Note: MakePathSanitized will lower case the path if
-	// disablePathToLower isn't set.
-	pagePath = d.PathSpec.MakePathSanitized(pagePath)
-	pagePathDir = d.PathSpec.MakePathSanitized(pagePathDir)
-	link = d.PathSpec.MakePathSanitized(link)
-	linkDir = d.PathSpec.MakePathSanitized(linkDir)
+	// if page URL is explicitly set in frontmatter,
+	// preserve its value without sanitization
+	if d.Kind != KindPage || d.URL == "" {
+		// Note: MakePathSanitized will lower case the path if
+		// disablePathToLower isn't set.
+		pagePath = d.PathSpec.MakePathSanitized(pagePath)
+		pagePathDir = d.PathSpec.MakePathSanitized(pagePathDir)
+		link = d.PathSpec.MakePathSanitized(link)
+		linkDir = d.PathSpec.MakePathSanitized(linkDir)
+	}
 
 	tp.TargetFilename = filepath.FromSlash(pagePath)
 	tp.SubResourceBaseTarget = filepath.FromSlash(pagePathDir)
--- a/resources/page/page_paths_test.go
+++ b/resources/page/page_paths_test.go
@@ -130,6 +130,13 @@
 							URL:      "/some/other/path",
 							Type:     output.HTMLFormat}, TargetPaths{TargetFilename: "/some/other/path/index.html", SubResourceBaseTarget: "/some/other/path", Link: "/some/other/path/"}},
 					{
+						"HTML page with URL containing double hyphen", TargetPathDescriptor{
+							Kind:     KindPage,
+							Dir:      "/sect/",
+							BaseName: "mypage",
+							URL:      "/some/other--url/",
+							Type:     output.HTMLFormat}, TargetPaths{TargetFilename: "/some/other--url/index.html", SubResourceBaseTarget: "/some/other--url", Link: "/some/other--url/"}},
+					{
 						"HTML page with expanded permalink", TargetPathDescriptor{
 							Kind:              KindPage,
 							Dir:               "/a/b",