feat: apply ignores from .gitignore/.ignore files
1 file changed, 14 insertions(+), 4 deletions(-)
changed files
M watcher/watcher.go → watcher/watcher.go
@@ -8,6 +8,8 @@ "path/filepath" "slices" "github.com/fsnotify/fsnotify" + + "alin.ovh/erl/ignore" ) type Event fsnotify.Event@@ -23,13 +25,18 @@ // FSWatcher implements the Watcher interface using fsnotify. type FSWatcher struct { watcher fsnotify.Watcher + filter ignore.Filter +} + +type Options struct { + Filter ignore.Filter } var IgnoredDirs = []string{ ".git", } -func New() (*FSWatcher, error) { +func New(options Options) (*FSWatcher, error) { watcher, err := fsnotify.NewWatcher() if err != nil { return nil, fmt.Errorf("failed to create watcher: %v", err)@@ -37,6 +44,7 @@ } return &FSWatcher{ watcher: *watcher, + filter: options.Filter, }, nil }@@ -63,8 +71,10 @@ go func() { for { select { - case event := <-w.watcher.Events: - events <- Event(event) + case event, ok := <-w.watcher.Events: + if ok && event.Name != "" && !w.filter.Ignored(event.Name) { + events <- Event(event) + } case err := <-w.watcher.Errors: errors <- err }@@ -89,7 +99,7 @@ return err } if entry.IsDir() { - if slices.Contains(IgnoredDirs, entry.Name()) { + if slices.Contains(IgnoredDirs, entry.Name()) || w.filter.Ignored(path) { return fs.SkipDir }