1
0
mirror of https://github.com/go-task/task.git synced 2024-12-14 10:52:43 +02:00
task/cyclic.go
2017-03-25 16:06:49 -03:00

29 lines
509 B
Go

package task
func HasCyclicDep(m map[string]*Task) bool {
visits := make(map[string]struct{}, len(m))
var checkCyclicDep func(string, *Task) bool
checkCyclicDep = func(name string, t *Task) bool {
if _, ok := visits[name]; ok {
return false
}
visits[name] = struct{}{}
defer delete(visits, name)
for _, d := range t.Deps {
if !checkCyclicDep(d, m[d]) {
return false
}
}
return true
}
for k, v := range m {
if !checkCyclicDep(k, v) {
return true
}
}
return false
}