From dbb06d0e79aa525ce8d1afa97d86bbc7f3689b15 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Tue, 21 Mar 2017 10:06:17 -0700 Subject: [PATCH] Added test dependent projects. --- .../src/main/kotlin/com/beust/kobalt/api/Project.kt | 7 ++++++- .../com/beust/kobalt/internal/ParallelProjectRunner.kt | 2 +- .../com/beust/kobalt/internal/SequentialProjectRunner.kt | 2 +- .../main/kotlin/com/beust/kobalt/internal/TaskManager.kt | 4 ++-- .../kotlin/com/beust/kobalt/maven/DependencyManager.kt | 9 ++++++++- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt index e6796a9a..ddd58d36 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -26,6 +26,7 @@ open class Project( @Directive open var url: String? = null, @Directive open var pom: Model? = null, @Directive open var dependsOn: ArrayList = arrayListOf(), + @Directive open var testsDependOnProjects: ArrayList = arrayListOf(), @Directive open var packageName: String? = group) : IBuildConfig, IDependencyHolder by DependencyHolder() { @@ -33,13 +34,15 @@ open class Project( this.project = this } + fun allProjectDependedOn() = project.dependsOn + project.testsDependOnProjects + class ProjectExtra(project: Project) { var isDirty = false /** * @return true if any of the projects we depend on is dirty. */ - fun dependsOnDirtyProjects(project: Project) = project.dependsOn.any { it.projectExtra.isDirty } + fun dependsOnDirtyProjects(project: Project) = project.allProjectDependedOn().any { it.projectExtra.isDirty } } /** @@ -96,6 +99,8 @@ open class Project( val testDependencies : ArrayList = arrayListOf() val testProvidedDependencies : ArrayList = arrayListOf() + fun testsDependOnProjects(vararg projects: Project) = testsDependOnProjects.addAll(projects) + /** Used to disambiguate various name properties */ @Directive val projectName: String get() = name diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ParallelProjectRunner.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ParallelProjectRunner.kt index 7041c402..6a703a20 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ParallelProjectRunner.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ParallelProjectRunner.kt @@ -94,7 +94,7 @@ class ParallelProjectRunner(val tasksByNames: (Project) -> ListMultimap().apply { projects.forEach { project -> addNode(ProjectTask(project, args.dryRun)) - project.dependsOn.forEach { + project.allProjectDependedOn().forEach { addEdge(ProjectTask(project, args.dryRun), ProjectTask(it, args.dryRun)) } } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/SequentialProjectRunner.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/SequentialProjectRunner.kt index 1f13626c..ec99b723 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/SequentialProjectRunner.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/SequentialProjectRunner.kt @@ -39,7 +39,7 @@ class SequentialProjectRunner(val tasksByNames: (Project) -> ListMultimap 0) { klog(2, "Marking project $projectName as skipped") 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 2139326c..541231fa 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 @@ -145,7 +145,7 @@ class TaskManager @Inject constructor(val args: Args, val topological = Topological().apply { projects.forEach { project -> addNode(project) - project.dependsOn.forEach { + project.allProjectDependedOn().forEach { addEdge(project, it) } } @@ -160,7 +160,7 @@ class TaskManager @Inject constructor(val args: Args, return result } else { val rootProject = projects.find { it.name == ti.project }!! - val allProjects = DynamicGraph.transitiveClosure(rootProject, { p -> p.dependsOn }) + val allProjects = DynamicGraph.transitiveClosure(rootProject, Project::allProjectDependedOn) val sortedProjects = sortProjectsTopologically(allProjects) val sortedMaps = sortedProjects.map { TaskInfo(it.name, "compile")} val result = sortedMaps.subList(0, sortedMaps.size - 1) + listOf(ti) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt index 14ae2c3d..b48822b0 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt @@ -228,13 +228,20 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, } } + val isTest = scopes.contains(Scope.TEST) + project.dependsOn.forEach { p -> maybeAddClassDir(KFiles.joinDir(p.directory, p.classesDir(context))) - val isTest = scopes.contains(Scope.TEST) if (isTest) maybeAddClassDir(KFiles.makeOutputTestDir(project).path) val otherDependencies = calculateDependencies(p, context, dependencyFilter, scopes) result.addAll(otherDependencies) + } + if (isTest) { + project.testsDependOnProjects.forEach { p -> + val otherDependencies = calculateDependencies(p, context, dependencyFilter, scopes) + result.addAll(otherDependencies) + } } return result }