Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-13 12:41:02 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-15 18:14:26 +0300
commit022c4795510306e08a4aba31504ca382d41c7fac (patch)
treed4c29f62038d0f336d90f32f46bc5b4f5c3ddc28 /hugofs/filter_fs.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/filter_fs.go')
-rw-r--r--hugofs/filter_fs.go32
1 files changed, 17 insertions, 15 deletions
diff --git a/hugofs/filter_fs.go b/hugofs/filter_fs.go
index bee4d05d2..9da63bbb7 100644
--- a/hugofs/filter_fs.go
+++ b/hugofs/filter_fs.go
@@ -44,7 +44,7 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) {
}
meta := fi.(FileMetaInfo).Meta()
- lang := meta.Lang()
+ lang := meta.Lang
fileLang, translationBaseName, translationBaseNameWithExt := langInfoFrom(langs, fi.Name())
weight := 0
@@ -58,14 +58,16 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) {
lang = fileLang
}
- fim := NewFileMetaInfo(fi, FileMeta{
- metaKeyLang: lang,
- metaKeyWeight: weight,
- metaKeyOrdinal: langs[lang],
- metaKeyTranslationBaseName: translationBaseName,
- metaKeyTranslationBaseNameWithExt: translationBaseNameWithExt,
- metaKeyClassifier: files.ClassifyContentFile(fi.Name(), meta.GetOpener()),
- })
+ fim := NewFileMetaInfo(
+ fi,
+ &FileMeta{
+ Lang: lang,
+ Weight: weight,
+ Ordinal: langs[lang],
+ TranslationBaseName: translationBaseName,
+ TranslationBaseNameWithExt: translationBaseNameWithExt,
+ Classifier: files.ClassifyContentFile(fi.Name(), meta.OpenFunc),
+ })
fis[i] = fim
}
@@ -74,9 +76,9 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) {
all := func(fis []os.FileInfo) {
// Maps translation base name to a list of language codes.
translations := make(map[string][]string)
- trackTranslation := func(meta FileMeta) {
- name := meta.TranslationBaseNameWithExt()
- translations[name] = append(translations[name], meta.Lang())
+ trackTranslation := func(meta *FileMeta) {
+ name := meta.TranslationBaseNameWithExt
+ translations[name] = append(translations[name], meta.Lang)
}
for _, fi := range fis {
if fi.IsDir() {
@@ -90,9 +92,9 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) {
for _, fi := range fis {
fim := fi.(FileMetaInfo)
- langs := translations[fim.Meta().TranslationBaseNameWithExt()]
+ langs := translations[fim.Meta().TranslationBaseNameWithExt]
if len(langs) > 0 {
- fim.Meta()["translations"] = sortAndremoveStringDuplicates(langs)
+ fim.Meta().Translations = sortAndremoveStringDuplicates(langs)
}
}
}
@@ -108,7 +110,7 @@ func NewFilterFs(fs afero.Fs) (afero.Fs, error) {
applyMeta := func(fs *FilterFs, name string, fis []os.FileInfo) {
for i, fi := range fis {
if fi.IsDir() {
- fis[i] = decorateFileInfo(fi, fs, fs.getOpener(fi.(FileMetaInfo).Meta().Filename()), "", "", nil)
+ fis[i] = decorateFileInfo(fi, fs, fs.getOpener(fi.(FileMetaInfo).Meta().Filename), "", "", nil)
}
}
}