mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-28 22:19:59 +02:00
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
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user