Skip to content

Commit 208fe5f

Browse files
committed
Watcher does not ignore created files that do not match sources.
1 parent 54bdcba commit 208fe5f

1 file changed

Lines changed: 38 additions & 24 deletions

File tree

watch.go

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"github.com/puzpuzpuz/xsync/v4"
1616

1717
"github.com/go-task/task/v3/errors"
18-
"github.com/go-task/task/v3/internal/filepathext"
1918
"github.com/go-task/task/v3/internal/fingerprint"
2019
"github.com/go-task/task/v3/internal/fsnotifyext"
2120
"github.com/go-task/task/v3/internal/logger"
@@ -68,6 +67,12 @@ func (e *Executor) watchTasks(calls ...*Call) error {
6867

6968
closeOnInterrupt(w)
7069

70+
watchFiles, err := e.collectSources(calls)
71+
if err != nil {
72+
cancel()
73+
return err
74+
}
75+
7176
go func() {
7277
for {
7378
select {
@@ -78,34 +83,43 @@ func (e *Executor) watchTasks(calls ...*Call) error {
7883
}
7984
e.Logger.VerboseErrf(logger.Magenta, "task: received watch event: %v\n", event)
8085

86+
// Check if this watch event should be ignored.
87+
if ShouldIgnore(event.Name) {
88+
e.Logger.VerboseErrf(logger.Magenta, "task: event skipped for being an ignored dir: %s\n", event.Name)
89+
continue
90+
}
91+
if event.Has(fsnotify.Remove) || event.Has(fsnotify.Rename) {
92+
if !slices.Contains(watchFiles, event.Name) {
93+
relPath := event.Name
94+
if rel, err := filepath.Rel(e.Dir, event.Name); err == nil {
95+
relPath = rel
96+
}
97+
e.Logger.VerboseErrf(logger.Magenta, "task: skipped for file not in sources: %s\n", relPath)
98+
continue
99+
}
100+
}
101+
if event.Has(fsnotify.Create) {
102+
watchFiles, err := e.collectSources(calls)
103+
if err != nil {
104+
e.Logger.Errf(logger.Red, "%v\n", err)
105+
continue
106+
}
107+
if !slices.Contains(watchFiles, event.Name) {
108+
relPath := event.Name
109+
if rel, err := filepath.Rel(e.Dir, event.Name); err == nil {
110+
relPath = rel
111+
}
112+
e.Logger.VerboseErrf(logger.Magenta, "task: skipped for file not in sources: %s\n", relPath)
113+
continue
114+
}
115+
}
116+
117+
// The watch event is good, restart the task calls.
81118
cancel()
82119
ctx, cancel = context.WithCancel(context.Background())
83-
84120
e.Compiler.ResetCache()
85-
86121
for _, c := range calls {
87122
go func() {
88-
if ShouldIgnore(event.Name) {
89-
e.Logger.VerboseErrf(logger.Magenta, "task: event skipped for being an ignored dir: %s\n", event.Name)
90-
return
91-
}
92-
t, err := e.GetTask(c)
93-
if err != nil {
94-
e.Logger.Errf(logger.Red, "%v\n", err)
95-
return
96-
}
97-
baseDir := filepathext.SmartJoin(e.Dir, t.Dir)
98-
files, err := e.collectSources(calls)
99-
if err != nil {
100-
e.Logger.Errf(logger.Red, "%v\n", err)
101-
return
102-
}
103-
104-
if !event.Has(fsnotify.Remove) && !slices.Contains(files, event.Name) {
105-
relPath, _ := filepath.Rel(baseDir, event.Name)
106-
e.Logger.VerboseErrf(logger.Magenta, "task: skipped for file not in sources: %s\n", relPath)
107-
return
108-
}
109123
err = e.RunTask(ctx, c)
110124
if err == nil {
111125
e.Logger.Errf(logger.Green, "task: task \"%s\" finished running\n", c.Task)

0 commit comments

Comments
 (0)