]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Do not watch directories with no mounted files in it
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 4 Nov 2024 09:31:59 +0000 (10:31 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 4 Nov 2024 11:44:07 +0000 (12:44 +0100)
Fixes #12912
Fixes #13007

hugofs/rootmapping_fs.go
hugolib/filesystems/basefs_test.go

index 2ecd88e9e84ccf3849c06caf45ed0b3b3aa1a4db..02e541a05b1003a937a6fad21228313b77010d1d 100644 (file)
@@ -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
index e3970938665f831a31f771d9e594b62bd5be85c5..3f189c8601ab1026f62c3428a95dc896a23191f3 100644 (file)
@@ -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) {