diff --git a/file/watcher.go b/file/watcher.go index b7dec14..288f79e 100644 --- a/file/watcher.go +++ b/file/watcher.go @@ -83,7 +83,7 @@ func newWatcher(filePath string, interval time.Duration, checks ...WatcherCheck) stateCache: make(map[string]any), } // Initially run checks once - _, err := w.runStateChecks(true) + _, err := w.runStateChecks() return w, errors.Wrap(err, "executing initial checks") } @@ -108,7 +108,7 @@ func (w *Watcher) SetState(key string, value any) { func (w *Watcher) loop() { for { - evt, err := w.runStateChecks(false) + evt, err := w.runStateChecks() if err != nil { w.Err = err break @@ -123,14 +123,16 @@ func (w *Watcher) loop() { } } -func (w *Watcher) runStateChecks(runAll bool) (WatcherEvent, error) { +func (w *Watcher) runStateChecks() (WatcherEvent, error) { for _, c := range w.checks { evt, err := c(w) if err != nil { return WatcherEventInvalid, errors.Wrap(err, "checking file state") } - if evt == WatcherEventNoChange && !runAll { + if evt == WatcherEventNoChange { + // Watcher noticed no change, ask the next one. If one notices + // a change we will return that one. continue } diff --git a/file/watcher_checks.go b/file/watcher_checks.go index fef8121..11f2367 100644 --- a/file/watcher_checks.go +++ b/file/watcher_checks.go @@ -29,7 +29,7 @@ func WatcherCheckHash(hcf func() hash.Hash) WatcherCheck { lastHash = v } - if _, err := os.Stat(w.FilePath); errors.Is(err, fs.ErrNotExist) { + if _, err := os.Lstat(w.FilePath); errors.Is(err, fs.ErrNotExist) { return WatcherEventInvalid, nil } @@ -65,7 +65,7 @@ func WatcherCheckMtime(w *Watcher) (WatcherEvent, error) { lastChange = v } - s, err := os.Stat(w.FilePath) + s, err := os.Lstat(w.FilePath) switch { case err == nil: // handle size change @@ -94,7 +94,7 @@ func WatcherCheckPresence(w *Watcher) (WatcherEvent, error) { wasPresent = v } - _, err := os.Stat(w.FilePath) + _, err := os.Lstat(w.FilePath) if err != nil && !errors.Is(err, fs.ErrNotExist) { // Some weird error occurred return WatcherEventInvalid, errors.Wrap(err, "getting file stat") @@ -124,7 +124,7 @@ func WatcherCheckSize(w *Watcher) (WatcherEvent, error) { knownSize = v } - s, err := os.Stat(w.FilePath) + s, err := os.Lstat(w.FilePath) switch { case err == nil: // handle size change