summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-02-05 14:54:02 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-02-05 14:54:02 +0100
commit9df7b295bcfb59000f6ee675dfbbc53654f3d86c (patch)
tree2ff6fc5d081754120b6605d43ba6640ad94aa33f
parentc37bf19c898035de1518c3f2ab4380f08817151f (diff)
Filter dot files etc. in i18n
Closes #11993
-rw-r--r--hugofs/walk.go16
-rw-r--r--hugolib/hugo_sites.go3
-rw-r--r--hugolib/language_test.go11
-rw-r--r--hugolib/pages_capture.go19
-rw-r--r--langs/i18n/translationProvider.go3
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