Filter dot files etc. in i18n

Closes #11993
This commit is contained in:
Bjørn Erik Pedersen 2024-02-05 14:54:02 +01:00
parent c37bf19c89
commit 9df7b295bc
No known key found for this signature in database
5 changed files with 38 additions and 14 deletions

View file

@ -53,8 +53,9 @@ type WalkwayConfig struct {
Logger loggers.Logger Logger loggers.Logger
// One or both of these may be pre-set. // One or both of these may be pre-set.
Info FileMetaInfo // The start info. Info FileMetaInfo // The start info.
DirEntries []FileMetaInfo // The start info's dir entries. DirEntries []FileMetaInfo // The start info's dir entries.
IgnoreFile func(filename string) bool // Optional
// Will be called in order. // Will be called in order.
HookPre WalkHook // Optional. 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 { if w.cfg.HookPre != nil {
var err error var err error
dirEntries, err = w.cfg.HookPre(info, path, dirEntries) dirEntries, err = w.cfg.HookPre(info, path, dirEntries)

View file

@ -473,7 +473,8 @@ func (h *HugoSites) loadData() error {
h.data = make(map[string]any) h.data = make(map[string]any)
w := hugofs.NewWalkway( w := hugofs.NewWalkway(
hugofs.WalkwayConfig{ 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 { WalkFn: func(path string, fi hugofs.FileMetaInfo) error {
if fi.IsDir() { if fi.IsDir() {
return nil return nil

View file

@ -135,3 +135,14 @@ FormatNumberCustom: 12,345.68
NumFmt: -98,765.43 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)
}

View file

@ -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 { func (c *pagesCollector) collectDirDir(path string, root hugofs.FileMetaInfo, inFilter func(fim hugofs.FileMetaInfo) bool) error {
filter := func(fim hugofs.FileMetaInfo) bool { filter := func(fim hugofs.FileMetaInfo) bool {
if c.sp.IgnoreFile(fim.Meta().Filename) {
return false
}
if inFilter != nil { if inFilter != nil {
return inFilter(fim) return inFilter(fim)
} }
@ -330,13 +327,14 @@ func (c *pagesCollector) collectDirDir(path string, root hugofs.FileMetaInfo, in
w := hugofs.NewWalkway( w := hugofs.NewWalkway(
hugofs.WalkwayConfig{ hugofs.WalkwayConfig{
Logger: c.logger, Logger: c.logger,
Root: path, Root: path,
Info: root, Info: root,
Fs: c.fs, Fs: c.fs,
HookPre: preHook, IgnoreFile: c.h.SourceSpec.IgnoreFile,
HookPost: postHook, HookPre: preHook,
WalkFn: wfn, HookPost: postHook,
WalkFn: wfn,
}) })
return w.Walk() return w.Walk()
@ -371,6 +369,7 @@ func (c *pagesCollector) handleBundleLeaf(dir, bundle hugofs.FileMetaInfo, inPat
Logger: c.logger, Logger: c.logger,
Info: dir, Info: dir,
DirEntries: readdir, DirEntries: readdir,
IgnoreFile: c.h.SourceSpec.IgnoreFile,
WalkFn: walk, WalkFn: walk,
}) })

View file

@ -59,7 +59,8 @@ func (tp *TranslationProvider) NewResource(dst *deps.Deps) error {
w := hugofs.NewWalkway( w := hugofs.NewWalkway(
hugofs.WalkwayConfig{ hugofs.WalkwayConfig{
Fs: dst.BaseFs.I18n.Fs, Fs: dst.BaseFs.I18n.Fs,
IgnoreFile: dst.SourceSpec.IgnoreFile,
WalkFn: func(path string, info hugofs.FileMetaInfo) error { WalkFn: func(path string, info hugofs.FileMetaInfo) error {
if info.IsDir() { if info.IsDir() {
return nil return nil