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:
parent
63bd66cb02
commit
4ed2183dbd
1 changed files with 74 additions and 66 deletions
|
@ -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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue