diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index 0e365f64..b780c258 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -274,6 +274,17 @@ class TaskManager @Inject constructor(val args: Args, val newToProcess = arrayListOf() val seen = hashSetOf() + + // Make each task depend on the previous one, so that command line tasks are executed in the + // order the user specified them + passedTasks.zip(passedTasks.drop(1)).forEach { pair -> + nodeMap[pair.first.taskName].forEach { first -> + nodeMap[pair.second.taskName].forEach { second -> + result.addEdge(second, first) + } + } + } + // // Reverse the always map so that tasks can be looked up. // diff --git a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt index 584ea2d5..e14ea714 100644 --- a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt +++ b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt @@ -101,12 +101,19 @@ class BuildOrderTest @Inject constructor(val taskManager: TaskManager) { } } - @Test - fun shouldBuildInRightOrder3() { + @DataProvider + fun tasks3(): Array> { + return arrayOf( + arrayOf(listOf("exec", "run"), listOf("p1:exec", "p1:run")), + arrayOf(listOf("run", "exec"), listOf("p1:run", "p1:exec")) + ) + } + + @Test(dataProvider = "tasks3") + fun shouldBuildInRightOrder3(tasks: List, expectedTasks: List) { val p1 = project { name = "p1" } - val expectedTasks = listOf("p1:run", "p1:exec") with(taskManager) { - with(calculateDependentTaskNames(listOf("run", "exec"), listOf(p1))) { + with(calculateDependentTaskNames(tasks, listOf(p1))) { assertThat(this.map { it.id }).isEqualTo(expectedTasks) } }