mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-26 05:30:54 +03: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:
parent
f27e542442
commit
022c479551
44 changed files with 434 additions and 451 deletions
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue