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
This commit is contained in:
Bjørn Erik Pedersen 2019-04-07 10:22:19 +02:00
parent 708d4ceebd
commit f34e6172cf
2 changed files with 25 additions and 8 deletions

View file

@ -21,6 +21,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/gohugoio/hugo/common/hugo"
"github.com/gohugoio/hugo/related" "github.com/gohugoio/hugo/related"
"github.com/gohugoio/hugo/source" "github.com/gohugoio/hugo/source"
@ -374,11 +376,22 @@ func (pm *pageMeta) setMetadata(p *pageState, frontmatter map[string]interface{}
pm.urlPaths.Slug = strings.Trim(cast.ToString(v), "-") pm.urlPaths.Slug = strings.Trim(cast.ToString(v), "-")
pm.params[loki] = pm.Slug() pm.params[loki] = pm.Slug()
case "url": case "url":
if url := cast.ToString(v); strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") { url := cast.ToString(v)
return fmt.Errorf("only relative URLs are supported, %v provided", url) 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) lang := p.s.GetLanguagePrefix()
pm.params[loki] = pm.urlPaths.URL 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": case "type":
pm.contentType = cast.ToString(v) pm.contentType = cast.ToString(v)
pm.params[loki] = pm.contentType pm.params[loki] = pm.contentType

View file

@ -108,7 +108,7 @@ Content
func TestRelativeURLInFrontMatter(t *testing.T) { func TestRelativeURLInFrontMatter(t *testing.T) {
config := ` config := `
baseURL = "https://example.com"
defaultContentLanguage = "en" defaultContentLanguage = "en"
defaultContentLanguageInSubdir = false defaultContentLanguageInSubdir = false
@ -132,6 +132,8 @@ Some content.
b := newTestSitesBuilder(t).WithConfigFile("toml", config) b := newTestSitesBuilder(t).WithConfigFile("toml", config)
b.WithContent("content/en/blog/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/")) 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/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/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/"))
b.WithContent("content/nn/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-blog")) b.WithContent("content/nn/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-blog"))
@ -139,8 +141,10 @@ Some content.
b.Build(BuildCfg{}) b.Build(BuildCfg{})
b.AssertFileContent("public/nn/myblog/p1/index.html", "Single: A page|Hello|nn|RelPermalink: /nn/myblog/p1/|") 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/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|/this-is-my-english-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: /myblog/p1/|") 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/|")
} }