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 54dfa9eb..6d8e478c 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 @@ -187,6 +187,14 @@ class TaskManager @Inject constructor(val args: Args, val toProcess = ArrayList(allTaskInfos) val seen = HashSet(allTaskInfos) val newTasks = hashSetOf() + + fun maybeAdd(taskInfo: TaskInfo) { + if (!seen.contains(taskInfo)) { + newTasks.add(taskInfo) + seen.add(taskInfo) + } + } + while (toProcess.any()) { toProcess.forEach { ti -> val project = projectMap[ti.project] @@ -197,15 +205,17 @@ class TaskManager @Inject constructor(val args: Args, val tiDep = TaskInfo(depProject.name, ti.taskName) allTaskInfos.add(tiDep) addEdge(ti, tiDep) - if (!seen.contains(tiDep)) { - newTasks.add(tiDep) - seen.add(tiDep) - } + maybeAdd(tiDep) } } else { allTaskInfos.add(ti) addNode(ti) } + } else { + // No project specified for this task, run that task in all the projects + projects.forEach { + maybeAdd(TaskInfo(it.name, ti.taskName)) + } } } toProcess.clear() diff --git a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt index 70051e82..1beab1a3 100644 --- a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt +++ b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt @@ -20,6 +20,7 @@ class BuildOrderTest @Inject constructor(val taskManager: TaskManager) { @DataProvider fun tasks(): Array> { return arrayOf( + arrayOf(listOf("assemble"), listOf("p1:assemble", "p2:assemble", "p3:assemble")), arrayOf(listOf("p1:assemble"), listOf("p1:assemble")), arrayOf(listOf("p2:assemble"), listOf("p1:assemble", "p2:assemble")), arrayOf(listOf("p3:assemble"), listOf("p1:assemble", "p2:assemble", "p3:assemble"))