Do not watch directories with no mounted files in it

Fixes #12912
Fixes #13007
This commit is contained in:
Bjørn Erik Pedersen 2024-11-04 10:31:59 +01:00
parent 6cf23bf882
commit fcdc454cc5
2 changed files with 35 additions and 8 deletions

View file

@ -246,11 +246,11 @@ func (fs *RootMappingFs) Mounts(base string) ([]FileMetaInfo, error) {
return nil, nil return nil, nil
} }
fss := make([]FileMetaInfo, len(roots)) fss := make([]FileMetaInfo, 0, len(roots))
for i, r := range roots { for _, r := range roots {
if r.fiSingleFile != nil { if r.fiSingleFile != nil {
// A single file mount. // A single file mount.
fss[i] = r.fiSingleFile fss = append(fss, r.fiSingleFile)
continue continue
} }
bfs := NewBasePathFs(fs.Fs, r.To) bfs := NewBasePathFs(fs.Fs, r.To)
@ -261,9 +261,9 @@ func (fs *RootMappingFs) Mounts(base string) ([]FileMetaInfo, error) {
fs = decorateDirs(fs, r.Meta) fs = decorateDirs(fs, r.Meta)
fi, err := fs.Stat("") fi, err := fs.Stat("")
if err != nil { if err != nil {
return nil, fmt.Errorf("RootMappingFs.Dirs: %w", err) continue
} }
fss[i] = fi.(FileMetaInfo) fss = append(fss, fi.(FileMetaInfo))
} }
return fss, nil return fss, nil

View file

@ -220,6 +220,18 @@ target = 'content'
source = 'content2' source = 'content2'
target = 'content/c2' target = 'content/c2'
[[module.mounts]] [[module.mounts]]
source = 'content3'
target = 'content/watchdisabled'
disableWatch = true
[[module.mounts]]
source = 'content4'
target = 'content/excludedsome'
excludeFiles = 'p1.md'
[[module.mounts]]
source = 'content5'
target = 'content/excludedall'
excludeFiles = '/**'
[[module.mounts]]
source = "hugo_stats.json" source = "hugo_stats.json"
target = "assets/watching/hugo_stats.json" target = "assets/watching/hugo_stats.json"
-- hugo_stats.json -- -- hugo_stats.json --
@ -230,12 +242,27 @@ foo
-- themes/t1/layouts/_default/single.html -- -- themes/t1/layouts/_default/single.html --
{{ .Content }} {{ .Content }}
-- themes/t1/static/f1.txt -- -- themes/t1/static/f1.txt --
-- content3/p1.md --
-- content4/p1.md --
-- content4/p2.md --
-- content5/p3.md --
-- content5/p4.md --
` `
b := hugolib.Test(t, files) b := hugolib.Test(t, files)
bfs := b.H.BaseFs bfs := b.H.BaseFs
watchFilenames := bfs.WatchFilenames() watchFilenames := toSlashes(bfs.WatchFilenames())
// []string{"/hugo_stats.json", "/content", "/content2", "/themes/t1/layouts", "/themes/t1/layouts/_default", "/themes/t1/static"}
b.Assert(watchFilenames, qt.HasLen, 6) // content3 has disableWatch = true
// content5 has excludeFiles = '/**'
b.Assert(watchFilenames, qt.DeepEquals, []string{"/hugo_stats.json", "/content", "/content2", "/content4", "/themes/t1/layouts", "/themes/t1/layouts/_default", "/themes/t1/static"})
}
func toSlashes(in []string) []string {
out := make([]string, len(in))
for i, s := range in {
out[i] = filepath.ToSlash(s)
}
return out
} }
func TestNoSymlinks(t *testing.T) { func TestNoSymlinks(t *testing.T) {