aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-11-04 10:31:59 +0100
committerBjørn Erik Pedersen <[email protected]>2024-11-04 12:44:07 +0100
commitfcdc454cc58e9f26ba29389100adfc09cb383448 (patch)
tree1d66ea84f966549b51ada9a74cc40c4e4ac69c59
parent6cf23bf8824758b0d2c4d855f0241e72aef77206 (diff)
downloadhugo-fcdc454cc58e9f26ba29389100adfc09cb383448.tar.gz
hugo-fcdc454cc58e9f26ba29389100adfc09cb383448.zip
Do not watch directories with no mounted files in it
Fixes #12912 Fixes #13007
-rw-r--r--hugofs/rootmapping_fs.go10
-rw-r--r--hugolib/filesystems/basefs_test.go33
2 files changed, 35 insertions, 8 deletions
diff --git a/hugofs/rootmapping_fs.go b/hugofs/rootmapping_fs.go
index 2ecd88e9e..02e541a05 100644
--- a/hugofs/rootmapping_fs.go
+++ b/hugofs/rootmapping_fs.go
@@ -246,11 +246,11 @@ func (fs *RootMappingFs) Mounts(base string) ([]FileMetaInfo, error) {
return nil, nil
}
- fss := make([]FileMetaInfo, len(roots))
- for i, r := range roots {
+ fss := make([]FileMetaInfo, 0, len(roots))
+ for _, r := range roots {
if r.fiSingleFile != nil {
// A single file mount.
- fss[i] = r.fiSingleFile
+ fss = append(fss, r.fiSingleFile)
continue
}
bfs := NewBasePathFs(fs.Fs, r.To)
@@ -261,9 +261,9 @@ func (fs *RootMappingFs) Mounts(base string) ([]FileMetaInfo, error) {
fs = decorateDirs(fs, r.Meta)
fi, err := fs.Stat("")
if err != nil {
- return nil, fmt.Errorf("RootMappingFs.Dirs: %w", err)
+ continue
}
- fss[i] = fi.(FileMetaInfo)
+ fss = append(fss, fi.(FileMetaInfo))
}
return fss, nil
diff --git a/hugolib/filesystems/basefs_test.go b/hugolib/filesystems/basefs_test.go
index e39709386..3f189c860 100644
--- a/hugolib/filesystems/basefs_test.go
+++ b/hugolib/filesystems/basefs_test.go
@@ -220,6 +220,18 @@ target = 'content'
source = 'content2'
target = 'content/c2'
[[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"
target = "assets/watching/hugo_stats.json"
-- hugo_stats.json --
@@ -230,12 +242,27 @@ foo
-- themes/t1/layouts/_default/single.html --
{{ .Content }}
-- 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)
bfs := b.H.BaseFs
- watchFilenames := bfs.WatchFilenames()
- // []string{"/hugo_stats.json", "/content", "/content2", "/themes/t1/layouts", "/themes/t1/layouts/_default", "/themes/t1/static"}
- b.Assert(watchFilenames, qt.HasLen, 6)
+ watchFilenames := toSlashes(bfs.WatchFilenames())
+
+ // 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) {