aboutsummaryrefslogtreecommitdiffhomepage
path: root/source
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2021-07-13 11:41:02 +0200
committerBjørn Erik Pedersen <[email protected]>2021-07-15 17:14:26 +0200
commit022c4795510306e08a4aba31504ca382d41c7fac (patch)
treed4c29f62038d0f336d90f32f46bc5b4f5c3ddc28 /source
parentf27e542442d19436f1428cc22bb03aca398d37a7 (diff)
downloadhugo-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.go22
-rw-r--r--source/filesystem.go4
-rw-r--r--source/filesystem_test.go2
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)