hugolib: Cache the value of Page's RelPermalink - hugo - [fork] hugo port for 9front
HTML git clone git@git.drkhsh.at/hugo.git
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
DIR commit fe9fd0acf4b0fa972d3918d1abcdfcb21de45692
DIR parent 7e0fa13faab4b77427b4f9ac392fda252b7b50ab
HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Mon, 20 Feb 2017 08:51:18 +0100
hugolib: Cache the value of Page's RelPermalink
Diffstat:
M hugolib/page.go | 51 ++++++++++++++++++-------------
1 file changed, 29 insertions(+), 22 deletions(-)
---
DIR diff --git a/hugolib/page.go b/hugolib/page.go
@@ -189,7 +189,8 @@ type Page struct {
RSSLink template.HTML
URLPath
- permalink *url.URL
+ permalink *url.URL
+ relPermalink string
paginator *Pager
@@ -213,6 +214,7 @@ type pageInit struct {
plainWordsInit sync.Once
renderingConfigInit sync.Once
pageURLInit sync.Once
+ relPermalinkInit sync.Once
}
// IsNode returns whether this is an item of one of the list types in Hugo,
@@ -927,34 +929,39 @@ func (p *Page) URL() string {
}
func (p *Page) RelPermalink() string {
- link := p.getPermalink()
+ p.relPermalinkInit.Do(func() {
+ link := p.getPermalink()
- if p.s.Info.canonifyURLs {
- // replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
- // have to return the URL relative from baseURL
- relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
- if err != nil {
- return ""
- }
+ if p.s.Info.canonifyURLs {
+ // replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
+ // have to return the URL relative from baseURL
+ relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
+ if err != nil {
+ return
+ }
- relpath = filepath.ToSlash(relpath)
+ relpath = filepath.ToSlash(relpath)
- if relpath[0] == '.' {
- relpath = relpath[1:]
- }
+ if relpath[0] == '.' {
+ relpath = relpath[1:]
+ }
+
+ if !strings.HasPrefix(relpath, "/") {
+ relpath = "/" + relpath
+ }
- if !strings.HasPrefix(relpath, "/") {
- relpath = "/" + relpath
+ p.relPermalink = relpath
+ return
}
- return relpath
- }
+ link.Scheme = ""
+ link.Host = ""
+ link.User = nil
+ link.Opaque = ""
+ p.relPermalink = link.String()
+ })
- link.Scheme = ""
- link.Host = ""
- link.User = nil
- link.Opaque = ""
- return link.String()
+ return p.relPermalink
}
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")