1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 00:17:11 -07:00

Added test dependent projects.

This commit is contained in:
Cedric Beust 2017-03-21 10:06:17 -07:00
parent de6b7afb61
commit dbb06d0e79
5 changed files with 18 additions and 6 deletions

View file

@ -26,6 +26,7 @@ open class Project(
@Directive open var url: String? = null, @Directive open var url: String? = null,
@Directive open var pom: Model? = null, @Directive open var pom: Model? = null,
@Directive open var dependsOn: ArrayList<Project> = arrayListOf<Project>(), @Directive open var dependsOn: ArrayList<Project> = arrayListOf<Project>(),
@Directive open var testsDependOnProjects: ArrayList<Project> = arrayListOf<Project>(),
@Directive open var packageName: String? = group) @Directive open var packageName: String? = group)
: IBuildConfig, IDependencyHolder by DependencyHolder() { : IBuildConfig, IDependencyHolder by DependencyHolder() {
@ -33,13 +34,15 @@ open class Project(
this.project = this this.project = this
} }
fun allProjectDependedOn() = project.dependsOn + project.testsDependOnProjects
class ProjectExtra(project: Project) { class ProjectExtra(project: Project) {
var isDirty = false var isDirty = false
/** /**
* @return true if any of the projects we depend on is dirty. * @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<IClasspathDependency> = arrayListOf() val testDependencies : ArrayList<IClasspathDependency> = arrayListOf()
val testProvidedDependencies : ArrayList<IClasspathDependency> = arrayListOf() val testProvidedDependencies : ArrayList<IClasspathDependency> = arrayListOf()
fun testsDependOnProjects(vararg projects: Project) = testsDependOnProjects.addAll(projects)
/** Used to disambiguate various name properties */ /** Used to disambiguate various name properties */
@Directive @Directive
val projectName: String get() = name val projectName: String get() = name

View file

@ -94,7 +94,7 @@ class ParallelProjectRunner(val tasksByNames: (Project) -> ListMultimap<String,
val projectGraph = DynamicGraph<ProjectTask>().apply { val projectGraph = DynamicGraph<ProjectTask>().apply {
projects.forEach { project -> projects.forEach { project ->
addNode(ProjectTask(project, args.dryRun)) addNode(ProjectTask(project, args.dryRun))
project.dependsOn.forEach { project.allProjectDependedOn().forEach {
addEdge(ProjectTask(project, args.dryRun), ProjectTask(it, args.dryRun)) addEdge(ProjectTask(project, args.dryRun), ProjectTask(it, args.dryRun))
} }
} }

View file

@ -39,7 +39,7 @@ class SequentialProjectRunner(val tasksByNames: (Project) -> ListMultimap<String
klog(1, AsciiArt.logBox("Building $projectName", indent = 5)) klog(1, AsciiArt.logBox("Building $projectName", indent = 5))
// Does the current project depend on any failed projects? // Does the current project depend on any failed projects?
val fp = project.dependsOn.filter { failedProjects.contains(it.name) }.map(Project::name) val fp = project.allProjectDependedOn().filter { failedProjects.contains(it.name) }.map(Project::name)
if (fp.size > 0) { if (fp.size > 0) {
klog(2, "Marking project $projectName as skipped") klog(2, "Marking project $projectName as skipped")

View file

@ -145,7 +145,7 @@ class TaskManager @Inject constructor(val args: Args,
val topological = Topological<Project>().apply { val topological = Topological<Project>().apply {
projects.forEach { project -> projects.forEach { project ->
addNode(project) addNode(project)
project.dependsOn.forEach { project.allProjectDependedOn().forEach {
addEdge(project, it) addEdge(project, it)
} }
} }
@ -160,7 +160,7 @@ class TaskManager @Inject constructor(val args: Args,
return result return result
} else { } else {
val rootProject = projects.find { it.name == ti.project }!! 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 sortedProjects = sortProjectsTopologically(allProjects)
val sortedMaps = sortedProjects.map { TaskInfo(it.name, "compile")} val sortedMaps = sortedProjects.map { TaskInfo(it.name, "compile")}
val result = sortedMaps.subList(0, sortedMaps.size - 1) + listOf(ti) val result = sortedMaps.subList(0, sortedMaps.size - 1) + listOf(ti)

View file

@ -228,13 +228,20 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors,
} }
} }
val isTest = scopes.contains(Scope.TEST)
project.dependsOn.forEach { p -> project.dependsOn.forEach { p ->
maybeAddClassDir(KFiles.joinDir(p.directory, p.classesDir(context))) maybeAddClassDir(KFiles.joinDir(p.directory, p.classesDir(context)))
val isTest = scopes.contains(Scope.TEST)
if (isTest) maybeAddClassDir(KFiles.makeOutputTestDir(project).path) if (isTest) maybeAddClassDir(KFiles.makeOutputTestDir(project).path)
val otherDependencies = calculateDependencies(p, context, dependencyFilter, scopes) val otherDependencies = calculateDependencies(p, context, dependencyFilter, scopes)
result.addAll(otherDependencies) result.addAll(otherDependencies)
}
if (isTest) {
project.testsDependOnProjects.forEach { p ->
val otherDependencies = calculateDependencies(p, context, dependencyFilter, scopes)
result.addAll(otherDependencies)
}
} }
return result return result
} }