shithub: hugo

Download patch

ref: 6cceef65c2f4b7c262bf67a249867658112b6de4
parent: ffcb4aeb8e392a80da7cad0f1e03a4102efb24ec
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Mon Mar 9 10:01:28 EDT 2020

Fix ambigous error on site.GetPage

Fixes #7016

--- a/hugolib/pagecollections.go
+++ b/hugolib/pagecollections.go
@@ -206,6 +206,22 @@
 
 }
 
+// For Ref/Reflink and .Site.GetPage do simple name lookups for the potentially ambigous myarticle.md and /myarticle.md,
+// but not when we get ./myarticle*, section/myarticle.
+func shouldDoSimpleLookup(ref string) bool {
+	if ref[0] == '.' {
+		return false
+	}
+
+	slashCount := strings.Count(ref, "/")
+
+	if slashCount > 1 {
+		return false
+	}
+
+	return slashCount == 0 || ref[0] == '/'
+}
+
 func (c *PageCollections) getContentNode(context page.Page, isReflink bool, ref string) (*contentNode, error) {
 	ref = filepath.ToSlash(strings.ToLower(strings.TrimSpace(ref)))
 	if ref == "" {
@@ -215,9 +231,7 @@
 	navUp := strings.HasPrefix(ref, "..")
 	var doSimpleLookup bool
 	if isReflink || context == nil {
-		// For Ref/Reflink and .Site.GetPage do simple name lookups for the potentially ambigous myarticle.md and /myarticle.md,
-		// but not when we get ./myarticle*, section/myarticle.
-		doSimpleLookup = ref[0] != '.' || ref[0] == '/' && strings.Count(ref, "/") == 1
+		doSimpleLookup = shouldDoSimpleLookup(ref)
 	}
 
 	if context != nil && !strings.HasPrefix(ref, "/") {
--- a/hugolib/pagecollections_test.go
+++ b/hugolib/pagecollections_test.go
@@ -334,3 +334,52 @@
 	b.AssertFileContent("public/who/index.html", `NOT FOUND`)
 
 }
+
+// https://github.com/gohugoio/hugo/issues/7016
+func TestGetPageMultilingual(t *testing.T) {
+	b := newTestSitesBuilder(t)
+
+	b.WithConfigFile("yaml", `
+baseURL: "http://example.org/"
+languageCode: "en-us"
+defaultContentLanguage: ru
+title: "My New Hugo Site"
+uglyurls: true
+
+languages:
+  ru: {}
+  en: {}
+`)
+
+	b.WithContent(
+		"docs/1.md", "\n---title: p1\n---",
+		"news/1.md", "\n---title: p1\n---",
+		"news/1.en.md", "\n---title: p1en\n---",
+		"news/about/1.md", "\n---title: about1\n---",
+		"news/about/1.en.md", "\n---title: about1en\n---",
+	)
+
+	b.WithTemplates("index.html", `
+{{ with site.GetPage "docs/1" }}
+    Docs p1: {{ .Title }}
+{{ else }}
+NOT FOUND
+{{ end }}
+`)
+
+	b.Build(BuildCfg{})
+
+	b.AssertFileContent("public/index.html", `Docs p1: p1`)
+	b.AssertFileContent("public/en/index.html", `NOT FOUND`)
+
+}
+
+func TestShouldDoSimpleLookup(t *testing.T) {
+	c := qt.New(t)
+
+	c.Assert(shouldDoSimpleLookup("foo.md"), qt.Equals, true)
+	c.Assert(shouldDoSimpleLookup("/foo.md"), qt.Equals, true)
+	c.Assert(shouldDoSimpleLookup("./foo.md"), qt.Equals, false)
+	c.Assert(shouldDoSimpleLookup("docs/foo.md"), qt.Equals, false)
+
+}