12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Package filenotify provides a mechanism for watching file(s) for changes.
- // Generally leans on fsnotify, but provides a poll-based notifier which fsnotify does not support.
- // These are wrapped up in a common interface so that either can be used interchangeably in your code.
- package filenotify
- import "github.com/fsnotify/fsnotify"
- // FileWatcher is an interface for implementing file notification watchers
- type FileWatcher interface {
- Events() <-chan fsnotify.Event
- Errors() <-chan error
- Add(name string) error
- Remove(name string) error
- Close() error
- }
- // New tries to use an fs-event watcher, and falls back to the poller if there is an error
- func New() (FileWatcher, error) {
- if watcher, err := NewEventWatcher(); err == nil {
- return watcher, nil
- }
- return NewPollingWatcher(), nil
- }
- // NewPollingWatcher returns a poll-based file watcher
- func NewPollingWatcher() FileWatcher {
- return &filePoller{
- events: make(chan fsnotify.Event),
- 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
- }
|