]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
commands: Move the CHMOD event filter up
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 10 Feb 2025 14:42:21 +0000 (15:42 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 10 Feb 2025 16:02:06 +0000 (17:02 +0100)
To prevent ghost rebuilds (from VSCode and possibly others).

Fixes #13373

commands/hugobuilder.go

index 4c2d865c0716a8d2d95999d92698e311a9e17338..778d85ca9a64c963db39d26a7e61030a064bd96d 100644 (file)
@@ -663,7 +663,20 @@ func (c *hugoBuilder) handleEvents(watcher *watcher.Batcher,
        var n int
        for _, ev := range evs {
                keep := true
-               if ev.Has(fsnotify.Create) || ev.Has(fsnotify.Write) {
+               // Write and rename operations are often followed by CHMOD.
+               // There may be valid use cases for rebuilding the site on CHMOD,
+               // but that will require more complex logic than this simple conditional.
+               // On OS X this seems to be related to Spotlight, see:
+               // https://github.com/go-fsnotify/fsnotify/issues/15
+               // A workaround is to put your site(s) on the Spotlight exception list,
+               // but that may be a little mysterious for most end users.
+               // So, for now, we skip reload on CHMOD.
+               // We do have to check for WRITE though. On slower laptops a Chmod
+               // could be aggregated with other important events, and we still want
+               // to rebuild on those
+               if ev.Op == fsnotify.Chmod {
+                       keep = false
+               } else if ev.Has(fsnotify.Create) || ev.Has(fsnotify.Write) {
                        if _, err := os.Stat(ev.Name); err != nil {
                                keep = false
                        }
@@ -805,21 +818,6 @@ func (c *hugoBuilder) handleEvents(watcher *watcher.Batcher,
                        continue
                }
 
-               // Write and rename operations are often followed by CHMOD.
-               // There may be valid use cases for rebuilding the site on CHMOD,
-               // but that will require more complex logic than this simple conditional.
-               // On OS X this seems to be related to Spotlight, see:
-               // https://github.com/go-fsnotify/fsnotify/issues/15
-               // A workaround is to put your site(s) on the Spotlight exception list,
-               // but that may be a little mysterious for most end users.
-               // So, for now, we skip reload on CHMOD.
-               // We do have to check for WRITE though. On slower laptops a Chmod
-               // could be aggregated with other important events, and we still want
-               // to rebuild on those
-               if ev.Op&(fsnotify.Chmod|fsnotify.Write|fsnotify.Create) == fsnotify.Chmod {
-                       continue
-               }
-
                walkAdder := func(path string, f hugofs.FileMetaInfo) error {
                        if f.IsDir() {
                                c.r.logger.Println("adding created directory to watchlist", path)