shithub: hugo

Download patch

ref: 9b4b97a722c2af3c4ae1df24634c22209b9a575a
parent: 501543d4b6d381a1de496baf2870993a03afcfdb
author: Bjørn Erik Pedersen <[email protected]>
date: Thu Jul 19 14:26:10 EDT 2018

hugolib: Create an adapter from old to new getPage

To make sure we confirm that the existing tests run the correct code path.

Updates #4969

--- a/hugolib/page_collections.go
+++ b/hugolib/page_collections.go
@@ -16,6 +16,7 @@
 import (
 	"fmt"
 	"path"
+	"path/filepath"
 	"strings"
 
 	"github.com/gohugoio/hugo/cache"
@@ -149,13 +150,49 @@
 	return &PageCollections{rawAllPages: pages}
 }
 
-// getPage is the "old style" get page. Deprecated in Hugo 0.45 in favour of
-// the "path only" syntax.
-// TODO(bep) remove this an rename below once this is all working.
+// This is an adapter func for the old API with Kind as first argument.
+// This is invoked when you do .Site.GetPage. We drop the Kind and fails
+// if there are more than 2 arguments, which would be ambigous.
+func (c *PageCollections) getPageOldVersion(ref ...string) (*Page, error) {
+	var refs []string
+	for _, r := range ref {
+		// A common construct in the wild is
+		// .Site.GetPage "home" "" or
+		// .Site.GetPage "home" "/"
+		if r != "" && r != "/" {
+			refs = append(refs, r)
+		}
+	}
+
+	var key string
+
+	if len(refs) > 2 {
+		// This was allowed in Hugo <= 0.44, but we cannot support this with the
+		// new API. This should be the most unusual case.
+		return nil, fmt.Errorf(`too many arguments to .Site.GetPage: %v. Use lookups on the form {{ .Site.GetPage "/posts/mypage-md" }}`, ref)
+	}
+
+	if len(refs) == 0 || refs[0] == KindHome {
+		key = "/"
+	} else if len(refs) == 1 {
+		key = refs[0]
+	} else {
+		key = refs[1]
+	}
+
+	key = filepath.ToSlash(key)
+	if !strings.HasPrefix(key, "/") {
+		key = "/" + key
+	}
+
+	return c.getPageNew(nil, key)
+}
+
+// 	Only used in tests.
 func (c *PageCollections) getPage(typ string, sections ...string) *Page {
-	p, _ := c.getPageNew(nil, "/"+path.Join(sections...))
+	refs := append([]string{typ}, path.Join(sections...))
+	p, _ := c.getPageOldVersion(refs...)
 	return p
-
 }
 
 // Ref is either unix-style paths (i.e. callers responsible for
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1612,38 +1612,7 @@
 // as possible for existing sites. Most sites will use {{ .Site.GetPage "section" "my/section" }},
 // i.e. 2 arguments, so we test for that.
 func (s *SiteInfo) GetPage(ref ...string) (*Page, error) {
-	var refs []string
-	for _, r := range ref {
-		// A common construct in the wild is
-		// .Site.GetPage "home" "" or
-		// .Site.GetPage "home" "/"
-		if r != "" && r != "/" {
-			refs = append(refs, r)
-		}
-	}
-
-	var key string
-
-	if len(refs) > 2 {
-		// This was allowed in Hugo <= 0.44, but we cannot support this with the
-		// new API. This should be the most unusual case.
-		return nil, fmt.Errorf(`too many arguments to .Site.GetPage: %v. Use lookups on the form {{ .Site.GetPage "/posts/mypage-md" }}`, ref)
-	}
-
-	if len(refs) == 0 || refs[0] == KindHome {
-		key = "/"
-	} else if len(refs) == 1 {
-		key = refs[0]
-	} else {
-		key = refs[1]
-	}
-
-	key = filepath.ToSlash(key)
-	if !strings.HasPrefix(key, "/") {
-		key = "/" + key
-	}
-
-	return s.getPageNew(nil, key)
+	return s.getPageOldVersion(ref...)
 }
 
 func (s *Site) permalinkForOutputFormat(link string, f output.Format) (string, error) {