diff --git a/import.go b/import.go index b0963ad593b9fa6f2b76f75fdd42a4ce7e57481c..70be5763f038a0529b6125caa3e43403c9f5ad00 100644 --- a/import.go +++ b/import.go @@ -95,7 +95,7 @@ func (s *Settings[C]) importFiles() { s.fileWatch.Lock() // new files may have been added - tmpWatchList := make(map[string]string) + tmpWatchList := make(map[string]bool) defer func() { s.fileWatch.watchList = tmpWatchList @@ -123,7 +123,7 @@ func (s *Settings[C]) importFiles() { s.importStream(reader{s.files.format, r}) f.Close() - tmpWatchList[fn] = fn + tmpWatchList[fn] = true } @@ -138,7 +138,7 @@ func (s *Settings[C]) importFiles() { s.importStream(reader{f.format, r}) r.Close() - tmpWatchList[f.path] = f.path + tmpWatchList[f.path] = true } } diff --git a/settings.go b/settings.go index 15f66f6a3877f14fd9214e033e99b52c60179f0a..62a9d095cb54c61a7ab64a79c3ffbcf49058004a 100644 --- a/settings.go +++ b/settings.go @@ -13,7 +13,7 @@ import ( type fileWatch struct { sync.Mutex watcher *fsnotify.Watcher - watchList map[string]string + watchList map[string]bool cancelWatch chan bool onWatch bool } diff --git a/watch.go b/watch.go index 950304861360e4c443f049c7392ede751308906b..52967e7e52b249c81b2ca99a9cb51b4bd6a2581b 100644 --- a/watch.go +++ b/watch.go @@ -5,6 +5,8 @@ package configuration import ( "github.com/fsnotify/fsnotify" + "os" + "path" ) func (s *Settings[C]) initWatch() *Settings[C] { @@ -97,7 +99,19 @@ func (s *Settings[C]) Watch() *Settings[C] { // add all files to the watch list for file := range s.fileWatch.watchList { - err := s.fileWatch.watcher.Add(file) + + fileInfo, err := os.Stat(file) + if err != nil { + s.errors = append(s.errors, err) + continue + } + + if fileInfo.IsDir() { + err = s.fileWatch.watcher.Add(file) + } else { + err = s.fileWatch.watcher.Add(path.Dir(file)) + } + if err != nil { s.errors = append(s.errors, err) } @@ -119,6 +133,11 @@ func (s *Settings[C]) Watch() *Settings[C] { return } + _, exist := s.fileWatch.watchList[event.Name] + if !exist { + continue + } + if event.Op&fsnotify.Write == fsnotify.Write { s.Import() } else if event.Op&fsnotify.Remove == fsnotify.Remove {