shithub: hugo

Download patch

ref: f34e6172cf2a4d1d1aef22304ecbc7c8e2d142ff
parent: 708d4ceebd491c6a89f271311eb8d94d6b5d58bc
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Apr 7 06:22:19 EDT 2019

hugolib: Log warning on relative front matter url with lang

Will do this for one version only, as there may be situations where this is the correct thing.

Also add some more related test cases.

Fixes #5818

--- a/hugolib/page__meta.go
+++ b/hugolib/page__meta.go
@@ -21,6 +21,8 @@
 	"strings"
 	"time"
 
+	"github.com/gohugoio/hugo/common/hugo"
+
 	"github.com/gohugoio/hugo/related"
 
 	"github.com/gohugoio/hugo/source"
@@ -374,11 +376,22 @@
 			pm.urlPaths.Slug = strings.Trim(cast.ToString(v), "-")
 			pm.params[loki] = pm.Slug()
 		case "url":
-			if url := cast.ToString(v); strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
-				return fmt.Errorf("only relative URLs are supported, %v provided", url)
+			url := cast.ToString(v)
+			if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
+				return fmt.Errorf("URLs with protocol (http*) not supported: %q. In page %q", url, p.pathOrTitle())
 			}
-			pm.urlPaths.URL = cast.ToString(v)
-			pm.params[loki] = pm.urlPaths.URL
+			lang := p.s.GetLanguagePrefix()
+			if lang != "" && !strings.HasPrefix(url, "/") && strings.HasPrefix(url, lang) {
+				if strings.HasPrefix(hugo.CurrentVersion.String(), "0.55") {
+					// We added support for page relative URLs in Hugo 0.55 and
+					// this may get its language path added twice.
+					// TODO(bep) eventually remove this.
+					p.s.Log.WARN.Printf(`Front matter in %q with the url %q with no leading / has what looks like the language prefix added. In Hugo 0.55 we added support for page relative URLs in front matter, no language prefix needed. Check the URL and consider to either add a leading / or remove the language prefix.`, p.pathOrTitle(), url)
+
+				}
+			}
+			pm.urlPaths.URL = url
+			pm.params[loki] = url
 		case "type":
 			pm.contentType = cast.ToString(v)
 			pm.params[loki] = pm.contentType
--- a/hugolib/page_permalink_test.go
+++ b/hugolib/page_permalink_test.go
@@ -108,7 +108,7 @@
 func TestRelativeURLInFrontMatter(t *testing.T) {
 
 	config := `
-
+baseURL = "https://example.com"
 defaultContentLanguage = "en"
 defaultContentLanguageInSubdir = false
 
@@ -132,6 +132,8 @@
 
 	b := newTestSitesBuilder(t).WithConfigFile("toml", config)
 	b.WithContent("content/en/blog/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/"))
+	b.WithContent("content/en/blog/page2.md", fmt.Sprintf(pageTempl, "../../../../../myblog/p2/"))
+	b.WithContent("content/en/blog/page3.md", fmt.Sprintf(pageTempl, "../myblog/../myblog/p3/"))
 	b.WithContent("content/en/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-english-blog"))
 	b.WithContent("content/nn/blog/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/"))
 	b.WithContent("content/nn/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-blog"))
@@ -139,8 +141,10 @@
 	b.Build(BuildCfg{})
 
 	b.AssertFileContent("public/nn/myblog/p1/index.html", "Single: A page|Hello|nn|RelPermalink: /nn/myblog/p1/|")
-	b.AssertFileContent("public/nn/this-is-my-blog/index.html", "List Page 1|A page|Hello|/nn/this-is-my-blog/|")
-	b.AssertFileContent("public/this-is-my-english-blog/index.html", "List Page 1|A page|Hello|/this-is-my-english-blog/|")
-	b.AssertFileContent("public/myblog/p1/index.html", "Single: A page|Hello|en|RelPermalink: /myblog/p1/|Permalink: /myblog/p1/|")
+	b.AssertFileContent("public/nn/this-is-my-blog/index.html", "List Page 1|A page|Hello|https://example.com/nn/this-is-my-blog/|")
+	b.AssertFileContent("public/this-is-my-english-blog/index.html", "List Page 1|A page|Hello|https://example.com/this-is-my-english-blog/|")
+	b.AssertFileContent("public/myblog/p1/index.html", "Single: A page|Hello|en|RelPermalink: /myblog/p1/|Permalink: https://example.com/myblog/p1/|")
+	b.AssertFileContent("public/myblog/p2/index.html", "Single: A page|Hello|en|RelPermalink: /myblog/p2/|Permalink: https://example.com/myblog/p2/|")
+	b.AssertFileContent("public/myblog/p3/index.html", "Single: A page|Hello|en|RelPermalink: /myblog/p3/|Permalink: https://example.com/myblog/p3/|")
 
 }