1
0
mirror of https://github.com/go-task/task.git synced 2025-01-12 04:34:11 +02:00
task/cyclic.go
Andrey Nering 7077b0ce65 Fix golint
2017-04-24 10:28:04 -03:00

30 lines
573 B
Go

package task
// HasCyclicDep checks if a task tree has any cyclic dependency
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
}