From 6e723a879c818a77392c43be3c635ed3b35083af Mon Sep 17 00:00:00 2001 From: satotake Date: Sun, 1 Jan 2023 00:48:51 +0900 Subject: [PATCH] Use FSEventsWatcher as default on darwin * eventwatcher_darwin.go * NewEventWather returns fsEventWatehr * eventwatcher_other.go * NewEventWather returns fsNotifyWatcher --- watcher/batcher.go | 3 --- .../{fsevents_darwin.go => eventwatcher_darwin.go} | 5 +++++ .../{fsevents_others.go => eventwatcher_other.go} | 5 +++-- watcher/filenotify/filenotify.go | 9 --------- watcher/filenotify/fsevents_test.go | 6 ++++-- watcher/filenotify/fsnotify.go | 8 ++++++++ watcher/filenotify/poller_test.go | 2 +- 7 files changed, 21 insertions(+), 17 deletions(-) rename watcher/filenotify/{fsevents_darwin.go => eventwatcher_darwin.go} (97%) rename watcher/filenotify/{fsevents_others.go => eventwatcher_other.go} (83%) diff --git a/watcher/batcher.go b/watcher/batcher.go index 7f6cf8b62f0..718eea73ffd 100644 --- a/watcher/batcher.go +++ b/watcher/batcher.go @@ -14,7 +14,6 @@ package watcher import ( - "runtime" "time" "github.com/fsnotify/fsnotify" @@ -39,8 +38,6 @@ func New(intervalBatcher, intervalPoll time.Duration, poll bool) (*Batcher, erro if poll { watcher = filenotify.NewPollingWatcher(intervalPoll) - } else if runtime.GOOS == "darwin" { - watcher, err = filenotify.NewFSEventsWatcher() } else { watcher, err = filenotify.New(intervalPoll) } diff --git a/watcher/filenotify/fsevents_darwin.go b/watcher/filenotify/eventwatcher_darwin.go similarity index 97% rename from watcher/filenotify/fsevents_darwin.go rename to watcher/filenotify/eventwatcher_darwin.go index 9a1fde6b0e6..006a927a746 100644 --- a/watcher/filenotify/fsevents_darwin.go +++ b/watcher/filenotify/eventwatcher_darwin.go @@ -308,3 +308,8 @@ func NewFSEventsWatcher() (FileWatcher, error) { } return w, nil } + +// NewEventWatcher returns an FSEvents based file watcher on darwin +func NewEventWatcher() (FileWatcher, error) { + return NewFSEventsWatcher() +} diff --git a/watcher/filenotify/fsevents_others.go b/watcher/filenotify/eventwatcher_other.go similarity index 83% rename from watcher/filenotify/fsevents_others.go rename to watcher/filenotify/eventwatcher_other.go index d5eae1e794c..255d1132b6a 100644 --- a/watcher/filenotify/fsevents_others.go +++ b/watcher/filenotify/eventwatcher_other.go @@ -16,6 +16,7 @@ package filenotify -func NewFSEventsWatcher() (FileWatcher, error) { - return NewEventWatcher() +// NewEventWatcher returns an fsnotify based file watcher +func NewEventWatcher() (FileWatcher, error) { + return NewFsNotifyWatcher() } diff --git a/watcher/filenotify/filenotify.go b/watcher/filenotify/filenotify.go index b9d0d2e14a1..7cd5a5fd03a 100644 --- a/watcher/filenotify/filenotify.go +++ b/watcher/filenotify/filenotify.go @@ -38,12 +38,3 @@ func NewPollingWatcher(interval time.Duration) FileWatcher { errors: make(chan error), } } - -// NewEventWatcher returns an fs-event based file watcher -func NewEventWatcher() (FileWatcher, error) { - watcher, err := fsnotify.NewWatcher() - if err != nil { - return nil, err - } - return &fsNotifyWatcher{watcher}, nil -} diff --git a/watcher/filenotify/fsevents_test.go b/watcher/filenotify/fsevents_test.go index df400de1d03..8925ca3d67f 100644 --- a/watcher/filenotify/fsevents_test.go +++ b/watcher/filenotify/fsevents_test.go @@ -85,10 +85,12 @@ func TestFSEventsEvent(t *testing.T) { c.Run(fmt.Sprintf("%s, Add should not trigger event", "fsevents"), func(c *qt.C) { dir, w := prepareFSEventsTest(c, method) subdir := filepath.Join(dir, subdir1) - w.Add(subdir) - // It is rare but this may catch CREATE event of prepareFSEventsTest? + // might contain CREATE event derived from preparation, try to remove. + drainEvents(c, w) + w.Add(subdir) assertEvents(c, w) + // Create a new sub directory and add it to the watcher. subdir = filepath.Join(dir, subdir1, subdir2) c.Assert(os.Mkdir(subdir, 0777), qt.IsNil) diff --git a/watcher/filenotify/fsnotify.go b/watcher/filenotify/fsnotify.go index 19534128a31..4cca95ac53d 100644 --- a/watcher/filenotify/fsnotify.go +++ b/watcher/filenotify/fsnotify.go @@ -18,3 +18,11 @@ func (w *fsNotifyWatcher) Events() <-chan fsnotify.Event { func (w *fsNotifyWatcher) Errors() <-chan error { return w.Watcher.Errors } + +func NewFsNotifyWatcher() (FileWatcher, error) { + watcher, err := fsnotify.NewWatcher() + if err != nil { + return nil, err + } + return &fsNotifyWatcher{watcher}, nil +} diff --git a/watcher/filenotify/poller_test.go b/watcher/filenotify/poller_test.go index be2febd6d4e..8c37e13376b 100644 --- a/watcher/filenotify/poller_test.go +++ b/watcher/filenotify/poller_test.go @@ -247,7 +247,7 @@ func preparePollTest(c *qt.C, poll bool) (string, FileWatcher) { w = NewPollingWatcher(watchWaitTime) } else { var err error - w, err = NewEventWatcher() + w, err = NewFsNotifyWatcher() c.Assert(err, qt.IsNil) }