(
tasks: TaskState[],
opts: { task: string; ancestor: string }
)
| 234 | } |
| 235 | |
| 236 | export function transitivelyDependsOn( |
| 237 | tasks: TaskState[], |
| 238 | opts: { task: string; ancestor: string } |
| 239 | ): boolean { |
| 240 | const seen = new Set<string>(); |
| 241 | const walk = (name: string): boolean => { |
| 242 | if (seen.has(name)) return false; |
| 243 | seen.add(name); |
| 244 | const t = tasks.find(x => x.name === name); |
| 245 | if (!t) return false; |
| 246 | if (t.dependsOn.includes(opts.ancestor)) return true; |
| 247 | return t.dependsOn.some(dep => walk(dep)); |
| 248 | }; |
| 249 | return walk(opts.task); |
| 250 | } |
| 251 | |
| 252 | export function collectCascadeVictims( |
| 253 | mgr: AgentManager, |
no test coverage detected