1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-27 08:38:13 -07:00

Extract graph calculation.

This commit is contained in:
Cedric Beust 2016-04-12 18:28:49 -07:00
parent 63bd66cb02
commit 4ed2183dbd

View file

@ -86,6 +86,44 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana
tasksByNames.keys().forEach { tasksByNames.keys().forEach {
log(3, " $it: " + tasksByNames.get(it)) log(3, " $it: " + tasksByNames.get(it))
} }
val graph = createGraph(project, taskNames, tasksByNames)
//
// Now that we have a full graph, run it
//
log(1, "About to run graph:\n ${graph.dump()} ")
val factory = object : IThreadWorkerFactory<PluginTask> {
override public fun createWorkers(nodes: List<PluginTask>): List<IWorker<PluginTask>> {
// val tr = nodes.reduce { workers: List<TaskWorker>, node: PluginTask ->
// val result: List<TaskWorker> = workers + TaskWorker(listOf(node), args.dryRun, messages)
// result
// }
val thisResult = arrayListOf<IWorker<PluginTask>>()
nodes.forEach {
thisResult.add(TaskWorker(listOf(it), args.dryRun, messages))
}
return thisResult
}
}
val executor = DynamicGraphExecutor(graph, factory)
val thisResult = executor.run()
if (thisResult != 0) {
log(2, "Marking project ${project.name} as failed")
failedProjects.add(project.name)
}
if (result == 0) {
result = thisResult
}
}
}
return RunTargetResult(result, messages)
}
private fun createGraph(project: Project, taskNames: List<String>, tasksByNames: Multimap<String, PluginTask>):
DynamicGraph<PluginTask> {
val graph = DynamicGraph<PluginTask>() val graph = DynamicGraph<PluginTask>()
taskNames.forEach { taskName -> taskNames.forEach { taskName ->
val ti = TaskInfo(taskName) val ti = TaskInfo(taskName)
@ -93,7 +131,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana
throw KobaltException("Unknown task: $taskName") throw KobaltException("Unknown task: $taskName")
} }
if (ti.matches(projectName)) { if (ti.matches(project.name)) {
tasksByNames[ti.taskName].forEach { task -> tasksByNames[ti.taskName].forEach { task ->
if (task != null && task.plugin.accept(project)) { if (task != null && task.plugin.accept(project)) {
val reverseAfter = hashMapOf<String, String>() val reverseAfter = hashMapOf<String, String>()
@ -109,7 +147,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana
// //
val allFreeTasks = calculateFreeTasks(tasksByNames, reverseAfter) val allFreeTasks = calculateFreeTasks(tasksByNames, reverseAfter)
val currentFreeTask = allFreeTasks.filter { val currentFreeTask = allFreeTasks.filter {
TaskInfo(projectName, it.name).taskName == task.name TaskInfo(project.name, it.name).taskName == task.name
} }
if (currentFreeTask.size == 1) { if (currentFreeTask.size == 1) {
currentFreeTask[0].let { currentFreeTask[0].let {
@ -153,37 +191,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana
} }
} }
// return graph
// Now that we have a full graph, run it
//
log(3, "About to run graph:\n ${graph.dump()} ")
val factory = object : IThreadWorkerFactory<PluginTask> {
override public fun createWorkers(nodes: List<PluginTask>): List<IWorker<PluginTask>> {
// val tr = nodes.reduce { workers: List<TaskWorker>, node: PluginTask ->
// val result: List<TaskWorker> = workers + TaskWorker(listOf(node), args.dryRun, messages)
// result
// }
val thisResult = arrayListOf<IWorker<PluginTask>>()
nodes.forEach {
thisResult.add(TaskWorker(listOf(it), args.dryRun, messages))
}
return thisResult
}
}
val executor = DynamicGraphExecutor(graph, factory)
val thisResult = executor.run()
if (thisResult != 0) {
log(2, "Marking project ${project.name} as failed")
failedProjects.add(project.name)
}
if (result == 0) {
result = thisResult
}
}
}
return RunTargetResult(result, messages)
} }
/** /**