diff options
author | Bjørn Erik Pedersen <[email protected]> | 2021-07-13 11:41:02 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2021-07-15 17:14:26 +0200 |
commit | 022c4795510306e08a4aba31504ca382d41c7fac (patch) | |
tree | d4c29f62038d0f336d90f32f46bc5b4f5c3ddc28 /source | |
parent | f27e542442d19436f1428cc22bb03aca398d37a7 (diff) | |
download | hugo-022c4795510306e08a4aba31504ca382d41c7fac.tar.gz hugo-022c4795510306e08a4aba31504ca382d41c7fac.zip |
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 'source')
-rw-r--r-- | source/fileInfo.go | 22 | ||||
-rw-r--r-- | source/filesystem.go | 4 | ||||
-rw-r--r-- | source/filesystem_test.go | 2 |
3 files changed, 14 insertions, 14 deletions
diff --git a/source/fileInfo.go b/source/fileInfo.go index 7b20f5f29..cef44f8ca 100644 --- a/source/fileInfo.go +++ b/source/fileInfo.go @@ -1,4 +1,4 @@ -// Copyright 2019 The Hugo Authors. All rights reserved. +// Copyright 2021 The Hugo Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -225,9 +225,9 @@ func NewTestFile(filename string) *FileInfo { } func (sp *SourceSpec) NewFileInfoFrom(path, filename string) (*FileInfo, error) { - meta := hugofs.FileMeta{ - "filename": filename, - "path": path, + meta := &hugofs.FileMeta{ + Filename: filename, + Path: path, } return sp.NewFileInfo(hugofs.NewFileMetaInfo(nil, meta)) @@ -236,16 +236,16 @@ func (sp *SourceSpec) NewFileInfoFrom(path, filename string) (*FileInfo, error) func (sp *SourceSpec) NewFileInfo(fi hugofs.FileMetaInfo) (*FileInfo, error) { m := fi.Meta() - filename := m.Filename() - relPath := m.Path() - isLeafBundle := m.Classifier() == files.ContentClassLeaf + filename := m.Filename + relPath := m.Path + isLeafBundle := m.Classifier == files.ContentClassLeaf if relPath == "" { - return nil, errors.Errorf("no Path provided by %v (%T)", m, m.Fs()) + return nil, errors.Errorf("no Path provided by %v (%T)", m, m.Fs) } if filename == "" { - return nil, errors.Errorf("no Filename provided by %v (%T)", m, m.Fs()) + return nil, errors.Errorf("no Filename provided by %v (%T)", m, m.Fs) } relDir := filepath.Dir(relPath) @@ -256,8 +256,8 @@ func (sp *SourceSpec) NewFileInfo(fi hugofs.FileMetaInfo) (*FileInfo, error) { relDir = relDir + helpers.FilePathSeparator } - lang := m.Lang() - translationBaseName := m.GetString("translationBaseName") + lang := m.Lang + translationBaseName := m.TranslationBaseName dir, name := filepath.Split(relPath) if !strings.HasSuffix(dir, helpers.FilePathSeparator) { diff --git a/source/filesystem.go b/source/filesystem.go index 1cd75f032..4d509c566 100644 --- a/source/filesystem.go +++ b/source/filesystem.go @@ -80,7 +80,7 @@ func (f *Filesystem) captureFiles() error { } meta := fi.Meta() - filename := meta.Filename() + filename := meta.Filename b, err := f.shouldRead(filename, fi) if err != nil { @@ -105,7 +105,7 @@ func (f *Filesystem) captureFiles() error { } func (f *Filesystem) shouldRead(filename string, fi hugofs.FileMetaInfo) (bool, error) { - ignore := f.SourceSpec.IgnoreFile(fi.Meta().Filename()) + ignore := f.SourceSpec.IgnoreFile(fi.Meta().Filename) if fi.IsDir() { if ignore { diff --git a/source/filesystem_test.go b/source/filesystem_test.go index e6dc9ce16..0b8c1d395 100644 --- a/source/filesystem_test.go +++ b/source/filesystem_test.go @@ -60,7 +60,7 @@ func TestUnicodeNorm(t *testing.T) { } ss := newTestSourceSpec() - fi := hugofs.NewFileMetaInfo(nil, hugofs.FileMeta{}) + fi := hugofs.NewFileMetaInfo(nil, hugofs.NewFileMeta()) for i, path := range paths { base := fmt.Sprintf("base%d", i) |