From 28f2c625a69cf15c7c32964a65ce05a76819d130 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 26 Jul 2018 14:43:03 +0200 Subject: Fix rescanning --- watcher/watcher.go | 13 +++++++++++-- watcher/watcher_test.go | 17 ++++++++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/watcher/watcher.go b/watcher/watcher.go index 973b0a1..fb5ef2a 100644 --- a/watcher/watcher.go +++ b/watcher/watcher.go @@ -74,12 +74,21 @@ func (w *watcher) reload() { func (w *watcher) rescan() { for _, p := range w.config.Paths { - filepath.Walk(p.Name, func(path string, info os.FileInfo, err error) error { + err := filepath.Walk(p.Name, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } if info == nil || !info.Mode().IsRegular() { return nil } - return w.handle(path) + if err := w.handle(path); err != nil { + w.log.Printf("Skipping event: %s", err) + } + return nil }) + if err != nil { + w.log.Printf("Rescanning %s failed: %s", p.Name, err) + } } } diff --git a/watcher/watcher_test.go b/watcher/watcher_test.go index 3051ad9..399eba8 100644 --- a/watcher/watcher_test.go +++ b/watcher/watcher_test.go @@ -74,16 +74,23 @@ func TestRescanning(t *testing.T) { dir := tempDir() defer os.RemoveAll(dir) + f1 := filepath.Join(dir, "foo") + f2 := filepath.Join(dir, "bar") var files []string w := testWatcher(dir, func(name, postCommand string, remove bool) error { + if name != f1 { + return fmt.Errorf("unhandled file: %s", name) + } files = append(files, name) return nil }) defer w.Stop() - // File is written before watcher is started - f := filepath.Join(dir, "foo") - if err := ioutil.WriteFile(f, []byte{0}, 0644); err != nil { + // Files are written before watcher is started + if err := ioutil.WriteFile(f1, []byte{0}, 0644); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(f2, []byte{0}, 0644); err != nil { t.Fatal(err) } @@ -97,12 +104,12 @@ func TestRescanning(t *testing.T) { // USR1 triggers rescan w.signal <- syscall.SIGUSR1 - ok, err := awaitFile(&files, f) + ok, err := awaitFile(&files, f1) if err != nil { t.Fatal(err) } if !ok { - t.Errorf("want %s, got %s", f, files[0]) + t.Errorf("want %s, got %s", f1, files[0]) } } -- cgit v1.2.3