Scripts/convention/src/main/kotlin/jf.taskgraph.gradle.kts

37 lines
1.1 KiB
Plaintext

import io.gitlab.jfronny.scripts.*
plugins {
base
}
tasks.register("printTaskGraph") {
doLast {
fun getTask(task: Any): Either<Task, String> {
return when (task) {
is Provider<*> -> getTask(task.get())
is String -> Either.Left(tasks.getByPath(task))
is Task -> Either.Left(task)
else -> Either.Right("$task")
}
}
fun printTaskGraph(task: Task, indent: Int, known: MutableSet<Task>) {
if (known.contains(task)) {
println(" ".repeat(indent) + "- ${task.name} (*)")
return
}
known.add(task)
println(" ".repeat(indent) + "- ${task.name}")
task.dependsOn.forEach {
getTask(it).apply({ dependency ->
printTaskGraph(dependency, indent + 1, known)
}, { error ->
println(" ".repeat(indent + 1) + "- UNEXPECTED!: $error")
})
}
}
printTaskGraph(tasks.getByPath(prop("taskGraph", "build")), 0, LinkedHashSet())
}
}