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 03b96d8c..f59fbdea 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 @@ -200,6 +200,16 @@ class TaskManager @Inject constructor(val args: Args, val seen = HashSet(allTaskInfos) val newTasks = hashSetOf() + // If at least two tasks were given, preserve the ordering by making each task depend on the + // previous one, e.g. for "task1 task2 task3", add the edges "task2 -> task1" and "task3 -> task2" + if (taskNames.size >= 2) { + projects.forEach { project -> + taskNames.zip(taskNames.subList(1, taskNames.size)).forEach { pair -> + addEdge(TaskInfo(project.name, pair.second), TaskInfo(project.name, pair.first)) + } + } + } + fun maybeAdd(taskInfo: TaskInfo) { if (!seen.contains(taskInfo)) { newTasks.add(taskInfo) diff --git a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt index 835d342c..584ea2d5 100644 --- a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt +++ b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt @@ -101,4 +101,14 @@ class BuildOrderTest @Inject constructor(val taskManager: TaskManager) { } } + @Test + fun shouldBuildInRightOrder3() { + val p1 = project { name = "p1" } + val expectedTasks = listOf("p1:run", "p1:exec") + with(taskManager) { + with(calculateDependentTaskNames(listOf("run", "exec"), listOf(p1))) { + assertThat(this.map { it.id }).isEqualTo(expectedTasks) + } + } + } }