mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 16:28:12 -07:00
Task management fixes.
This commit is contained in:
parent
1d8587278b
commit
d08fe21e24
2 changed files with 46 additions and 33 deletions
|
@ -145,47 +145,49 @@ class TaskManager @Inject constructor(val args: Args,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ti.matches(projectName)) {
|
if (ti.matches(projectName)) {
|
||||||
val taskName = ti.taskName
|
val tiTaskName = ti.taskName
|
||||||
nodeMap[taskName].forEach { task ->
|
nodeMap[tiTaskName].forEach { task ->
|
||||||
if (task != null && accept(task)) {
|
if (task != null && accept(task)) {
|
||||||
val toProcess = arrayListOf(task)
|
val toProcess = arrayListOf(task)
|
||||||
val seen = hashSetOf<String>()
|
val seen = hashSetOf<String>()
|
||||||
val newToProcess = arrayListOf<T>()
|
val newToProcess = arrayListOf<T>()
|
||||||
|
|
||||||
|
fun maybeAddEdge(task: T, mm: Multimap<String, String>, isDependency: Boolean,
|
||||||
|
reverseEdges: Boolean = false) {
|
||||||
|
val taskName = toName(task)
|
||||||
|
mm[taskName]?.forEach { toName ->
|
||||||
|
val addEdge = isDependency || (!isDependency && taskNames.contains(toName))
|
||||||
|
log(3, " addEdge: $addEdge taskName: $taskName toName: $toName")
|
||||||
|
if (addEdge) {
|
||||||
|
nodeMap[toName].forEach { to ->
|
||||||
|
if (reverseEdges) {
|
||||||
|
log(3, " Adding reverse edge $to -> $task it=$toName")
|
||||||
|
result.addEdge(to, task)
|
||||||
|
} else {
|
||||||
|
log(3, " Adding edge $task -> $to")
|
||||||
|
result.addEdge(task, to)
|
||||||
|
}
|
||||||
|
if (!seen.contains(toName(to))) {
|
||||||
|
log(3, " New node to process: $to")
|
||||||
|
newToProcess.add(to)
|
||||||
|
} else {
|
||||||
|
log(3, " Already seen: $to")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (toProcess.size > 0) {
|
while (toProcess.size > 0) {
|
||||||
|
log(3, " New batch of nodes to process: $toProcess")
|
||||||
toProcess.forEach { current ->
|
toProcess.forEach { current ->
|
||||||
result.addNode(current)
|
result.addNode(current)
|
||||||
seen.add(toName(current))
|
seen.add(toName(current))
|
||||||
|
|
||||||
fun maybeAddEdge(taskName: String, mm: Multimap<String, String>, isDependency: Boolean,
|
maybeAddEdge(current, reverseDependsOn, true, true)
|
||||||
reverseEdges: Boolean = false) {
|
maybeAddEdge(current, dependsOn, true, false)
|
||||||
mm[taskName]?.forEach {
|
maybeAddEdge(current, runBefore, false, false)
|
||||||
val addEdge = isDependency || (!isDependency && taskNames.contains(it))
|
maybeAddEdge(current, runAfter, false, true)
|
||||||
log(3, " addEdge: $addEdge $taskName")
|
|
||||||
if (addEdge) {
|
|
||||||
nodeMap[it].filter { it != task }.forEach { to ->
|
|
||||||
if (reverseEdges) {
|
|
||||||
log(3, " Adding reverse edge $to -> $task")
|
|
||||||
result.addEdge(to, task)
|
|
||||||
} else {
|
|
||||||
log(3, " Adding edge $task -> $to")
|
|
||||||
result.addEdge(task, to)
|
|
||||||
}
|
|
||||||
if (!seen.contains(toName(to))) {
|
|
||||||
log(3, " New node to process: $to")
|
|
||||||
newToProcess.add(to)
|
|
||||||
} else {
|
|
||||||
log(3, " Already seen: $to")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toName(current).let { currentName ->
|
|
||||||
maybeAddEdge(currentName, reverseDependsOn, true, true)
|
|
||||||
maybeAddEdge(currentName, dependsOn, true, false)
|
|
||||||
maybeAddEdge(currentName, runBefore, false, false)
|
|
||||||
maybeAddEdge(currentName, runAfter, false, true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
toProcess.clear()
|
toProcess.clear()
|
||||||
toProcess.addAll(newToProcess)
|
toProcess.addAll(newToProcess)
|
||||||
|
|
|
@ -43,9 +43,10 @@ class TaskManagerTest @Inject constructor(val taskManager: TaskManager) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test(enabled = true)
|
||||||
fun graphTest() {
|
fun graphTest() {
|
||||||
// KobaltLogger.LOG_LEVEL = 3
|
// KobaltLogger.LOG_LEVEL = 3
|
||||||
|
val t = runCompileTasks(listOf("compile"))
|
||||||
Assert.assertEquals(runCompileTasks(listOf("compile")), listOf("compile", "postCompile"))
|
Assert.assertEquals(runCompileTasks(listOf("compile")), listOf("compile", "postCompile"))
|
||||||
Assert.assertEquals(runCompileTasks(listOf("postCompile")), listOf("postCompile"))
|
Assert.assertEquals(runCompileTasks(listOf("postCompile")), listOf("postCompile"))
|
||||||
Assert.assertEquals(runCompileTasks(listOf("compile", "postCompile")), listOf("compile", "postCompile"))
|
Assert.assertEquals(runCompileTasks(listOf("compile", "postCompile")), listOf("compile", "postCompile"))
|
||||||
|
@ -84,6 +85,16 @@ class TaskManagerTest @Inject constructor(val taskManager: TaskManager) {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun exampleInTheDocTest() {
|
fun exampleInTheDocTest() {
|
||||||
|
Assert.assertEquals(runTasks(listOf("assemble"),
|
||||||
|
dependsOn = TreeMultimap.create<String, String>().apply {
|
||||||
|
put("assemble", "compile")
|
||||||
|
},
|
||||||
|
reverseDependsOn = TreeMultimap.create<String, String>().apply {
|
||||||
|
put("compile", "copyVersionForWrapper")
|
||||||
|
put("copyVersionForWrapper", "assemble")
|
||||||
|
}),
|
||||||
|
listOf("compile", "copyVersionForWrapper", "assemble"))
|
||||||
|
|
||||||
Assert.assertEquals(runTasks(listOf("compile"),
|
Assert.assertEquals(runTasks(listOf("compile"),
|
||||||
dependsOn = TreeMultimap.create<String, String>().apply {
|
dependsOn = TreeMultimap.create<String, String>().apply {
|
||||||
put("compile", "clean")
|
put("compile", "clean")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue