hugolib: Create an adapter from old to new getPage
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 19 Jul 2018 16:26:10 +0000 (18:26 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 19 Jul 2018 16:26:10 +0000 (18:26 +0200)
To make sure we confirm that the existing tests run the correct code path.

Updates #4969

hugolib/page_collections.go
hugolib/site.go

index 60f7dd83cf4cb70331897ce461b04b93cf8c2c11..3d7c862802e1152e1fd12754510aa3bcc9743568 100644 (file)
@@ -16,6 +16,7 @@ package hugolib
 import (
        "fmt"
        "path"
+       "path/filepath"
        "strings"
 
        "github.com/gohugoio/hugo/cache"
@@ -149,13 +150,49 @@ func newPageCollectionsFromPages(pages Pages) *PageCollections {
        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
index dcb9b1d8c612e3961c4d3610bb65ac8d1ca41a85..4cca648f3c4c257368198672c3d6cad55d8b952c 100644 (file)
@@ -1612,38 +1612,7 @@ func (s *Site) appendThemeTemplates(in []string) []string {
 // 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) {