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:
parent
de6b7afb61
commit
dbb06d0e79
5 changed files with 18 additions and 6 deletions
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue