summaryrefslogtreecommitdiffstats
path: root/hugofs/decorators.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-13 11:41:02 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-15 17:14:26 +0200
commit022c4795510306e08a4aba31504ca382d41c7fac (patch)
treed4c29f62038d0f336d90f32f46bc5b4f5c3ddc28 /hugofs/decorators.go
parentf27e542442d19436f1428cc22bb03aca398d37a7 (diff)
hugofs: Make FileMeta a struct
This commit started out investigating a `concurrent map read write` issue, ending by replacing the map with a struct. This is easier to reason about, and it's more effective: ``` name old time/op new time/op delta SiteNew/Regular_Deep_content_tree-16 71.5ms ± 3% 69.4ms ± 5% ~ (p=0.200 n=4+4) name old alloc/op new alloc/op delta SiteNew/Regular_Deep_content_tree-16 29.7MB ± 0% 27.9MB ± 0% -5.82% (p=0.029 n=4+4) name old allocs/op new allocs/op delta SiteNew/Regular_Deep_content_tree-16 313k ± 0% 303k ± 0% -3.35% (p=0.029 n=4+4) ``` See #8749
Diffstat (limited to 'hugofs/decorators.go')
-rw-r--r--hugofs/decorators.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/hugofs/decorators.go b/hugofs/decorators.go
index 62d234944..364a3e23e 100644
--- a/hugofs/decorators.go
+++ b/hugofs/decorators.go
@@ -23,7 +23,7 @@ import (
"github.com/spf13/afero"
)
-func decorateDirs(fs afero.Fs, meta FileMeta) afero.Fs {
+func decorateDirs(fs afero.Fs, meta *FileMeta) afero.Fs {
ffs := &baseFileDecoratorFs{Fs: fs}
decorator := func(fi os.FileInfo, name string) (os.FileInfo, error) {
@@ -82,9 +82,11 @@ func NewBaseFileDecorator(fs afero.Fs, callbacks ...func(fi FileMetaInfo)) afero
decorator := func(fi os.FileInfo, filename string) (os.FileInfo, error) {
// Store away the original in case it's a symlink.
- meta := FileMeta{metaKeyName: fi.Name()}
+ meta := NewFileMeta()
+ meta.Name = fi.Name()
+
if fi.IsDir() {
- meta[metaKeyJoinStat] = func(name string) (FileMetaInfo, error) {
+ meta.JoinStatFunc = func(name string) (FileMetaInfo, error) {
joinedFilename := filepath.Join(filename, name)
fi, _, err := lstatIfPossible(fs, joinedFilename)
if err != nil {
@@ -102,7 +104,7 @@ func NewBaseFileDecorator(fs afero.Fs, callbacks ...func(fi FileMetaInfo)) afero
isSymlink := isSymlink(fi)
if isSymlink {
- meta[metaKeyOriginalFilename] = filename
+ meta.OriginalFilename = filename
var link string
var err error
link, fi, err = evalSymlinks(fs, filename)
@@ -110,7 +112,7 @@ func NewBaseFileDecorator(fs afero.Fs, callbacks ...func(fi FileMetaInfo)) afero
return nil, err
}
filename = link
- meta[metaKeyIsSymlink] = true
+ meta.IsSymlink = true
}
opener := func() (afero.File, error) {