From 9df7b295bcfb59000f6ee675dfbbc53654f3d86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 5 Feb 2024 14:54:02 +0100 Subject: [PATCH] Filter dot files etc. in i18n Closes #11993 --- hugofs/walk.go | 16 ++++++++++++++-- hugolib/hugo_sites.go | 3 ++- hugolib/language_test.go | 11 +++++++++++ hugolib/pages_capture.go | 19 +++++++++---------- langs/i18n/translationProvider.go | 3 ++- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/hugofs/walk.go b/hugofs/walk.go index 18667a5fc..391f70a65 100644 --- a/hugofs/walk.go +++ b/hugofs/walk.go @@ -53,8 +53,9 @@ type WalkwayConfig struct { Logger loggers.Logger // One or both of these may be pre-set. - Info FileMetaInfo // The start info. - DirEntries []FileMetaInfo // The start info's dir entries. + Info FileMetaInfo // The start info. + DirEntries []FileMetaInfo // The start info's dir entries. + IgnoreFile func(filename string) bool // Optional // Will be called in order. HookPre WalkHook // Optional. @@ -172,6 +173,17 @@ func (w *Walkway) walk(path string, info FileMetaInfo, dirEntries []FileMetaInfo } + if w.cfg.IgnoreFile != nil { + n := 0 + for _, fi := range dirEntries { + if !w.cfg.IgnoreFile(fi.Meta().Filename) { + dirEntries[n] = fi + n++ + } + } + dirEntries = dirEntries[:n] + } + if w.cfg.HookPre != nil { var err error dirEntries, err = w.cfg.HookPre(info, path, dirEntries) diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 24ff1077f..99dc88b10 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -473,7 +473,8 @@ func (h *HugoSites) loadData() error { h.data = make(map[string]any) w := hugofs.NewWalkway( hugofs.WalkwayConfig{ - Fs: h.PathSpec.BaseFs.Data.Fs, + Fs: h.PathSpec.BaseFs.Data.Fs, + IgnoreFile: h.SourceSpec.IgnoreFile, WalkFn: func(path string, fi hugofs.FileMetaInfo) error { if fi.IsDir() { return nil diff --git a/hugolib/language_test.go b/hugolib/language_test.go index c9368770e..582d3985f 100644 --- a/hugolib/language_test.go +++ b/hugolib/language_test.go @@ -135,3 +135,14 @@ FormatNumberCustom: 12,345.68 NumFmt: -98,765.43 `) } + +// Issue 11993. +func TestI18nDotFile(t *testing.T) { + files := ` +-- hugo.toml --{} +baseURL = "https://example.com" +-- i18n/.keep -- +-- data/.keep -- +` + Test(t, files) +} diff --git a/hugolib/pages_capture.go b/hugolib/pages_capture.go index acdc674e6..b7da065fd 100644 --- a/hugolib/pages_capture.go +++ b/hugolib/pages_capture.go @@ -249,9 +249,6 @@ func (c *pagesCollector) collectDir(dirPath *paths.Path, isDir bool, inFilter fu func (c *pagesCollector) collectDirDir(path string, root hugofs.FileMetaInfo, inFilter func(fim hugofs.FileMetaInfo) bool) error { filter := func(fim hugofs.FileMetaInfo) bool { - if c.sp.IgnoreFile(fim.Meta().Filename) { - return false - } if inFilter != nil { return inFilter(fim) } @@ -330,13 +327,14 @@ func (c *pagesCollector) collectDirDir(path string, root hugofs.FileMetaInfo, in w := hugofs.NewWalkway( hugofs.WalkwayConfig{ - Logger: c.logger, - Root: path, - Info: root, - Fs: c.fs, - HookPre: preHook, - HookPost: postHook, - WalkFn: wfn, + Logger: c.logger, + Root: path, + Info: root, + Fs: c.fs, + IgnoreFile: c.h.SourceSpec.IgnoreFile, + HookPre: preHook, + HookPost: postHook, + WalkFn: wfn, }) return w.Walk() @@ -371,6 +369,7 @@ func (c *pagesCollector) handleBundleLeaf(dir, bundle hugofs.FileMetaInfo, inPat Logger: c.logger, Info: dir, DirEntries: readdir, + IgnoreFile: c.h.SourceSpec.IgnoreFile, WalkFn: walk, }) diff --git a/langs/i18n/translationProvider.go b/langs/i18n/translationProvider.go index ab5247413..9bbd5d9f6 100644 --- a/langs/i18n/translationProvider.go +++ b/langs/i18n/translationProvider.go @@ -59,7 +59,8 @@ func (tp *TranslationProvider) NewResource(dst *deps.Deps) error { w := hugofs.NewWalkway( hugofs.WalkwayConfig{ - Fs: dst.BaseFs.I18n.Fs, + Fs: dst.BaseFs.I18n.Fs, + IgnoreFile: dst.SourceSpec.IgnoreFile, WalkFn: func(path string, info hugofs.FileMetaInfo) error { if info.IsDir() { return nil