diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-09-07 15:07:10 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-09-07 21:06:44 +0200 |
commit | 4055c121847847d8bd6b95a928185daee065091b (patch) | |
tree | 6620f51e7e89aa7ff0a9a93361d640ee5b297fea /hugolib/content_map.go | |
parent | 3ba7c92530a80f2f04fe57705ab05c247a6e8437 (diff) |
Fix some change detection issues on server reloads
* Fix change detection when .GetPage/site.GetPage is used from shortcode
* Fix stale content for GetPage results with short name lookups on server reloads
Fixes #7623
Fixes #7624
Fixes #7625
Diffstat (limited to 'hugolib/content_map.go')
-rw-r--r-- | hugolib/content_map.go | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/hugolib/content_map.go b/hugolib/content_map.go index 43ad7745d..33ef4f8dd 100644 --- a/hugolib/content_map.go +++ b/hugolib/content_map.go @@ -95,21 +95,23 @@ func newContentMap(cfg contentMapConfig) *contentMap { m.pageReverseIndex = &contentTreeReverseIndex{ t: []*contentTree{m.pages, m.sections, m.taxonomies}, - initFn: func(t *contentTree, m map[interface{}]*contentNode) { - t.Walk(func(s string, v interface{}) bool { - n := v.(*contentNode) - if n.p != nil && !n.p.File().IsZero() { - meta := n.p.File().FileInfo().Meta() - if meta.Path() != meta.PathFile() { - // Keep track of the original mount source. - mountKey := filepath.ToSlash(filepath.Join(meta.Module(), meta.PathFile())) - addToReverseMap(mountKey, n, m) + contentTreeReverseIndexMap: &contentTreeReverseIndexMap{ + initFn: func(t *contentTree, m map[interface{}]*contentNode) { + t.Walk(func(s string, v interface{}) bool { + n := v.(*contentNode) + if n.p != nil && !n.p.File().IsZero() { + meta := n.p.File().FileInfo().Meta() + if meta.Path() != meta.PathFile() { + // Keep track of the original mount source. + mountKey := filepath.ToSlash(filepath.Join(meta.Module(), meta.PathFile())) + addToReverseMap(mountKey, n, m) + } } - } - k := strings.TrimPrefix(strings.TrimSuffix(path.Base(s), cmLeafSeparator), cmBranchSeparator) - addToReverseMap(k, n, m) - return false - }) + k := strings.TrimPrefix(strings.TrimSuffix(path.Base(s), cmLeafSeparator), cmBranchSeparator) + addToReverseMap(k, n, m) + return false + }) + }, }, } @@ -1030,12 +1032,21 @@ func (c *contentTreeRef) getSections() page.Pages { type contentTreeReverseIndex struct { t []*contentTree - m map[interface{}]*contentNode + *contentTreeReverseIndexMap +} +type contentTreeReverseIndexMap struct { + m map[interface{}]*contentNode init sync.Once initFn func(*contentTree, map[interface{}]*contentNode) } +func (c *contentTreeReverseIndex) Reset() { + c.contentTreeReverseIndexMap = &contentTreeReverseIndexMap{ + initFn: c.initFn, + } +} + func (c *contentTreeReverseIndex) Get(key interface{}) *contentNode { c.init.Do(func() { c.m = make(map[interface{}]*contentNode) |