Skip to content

Commit

Permalink
Implement changedProjectsInCompile
Browse files Browse the repository at this point in the history
  • Loading branch information
Denis Mikhaylov committed Aug 8, 2024
1 parent ab7f9c3 commit 115d57f
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 20 deletions.
66 changes: 49 additions & 17 deletions src/main/scala/com/elarib/PartialSbtPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.apache.logging.log4j.LogManager
import sbt.*
import sbt.Keys.*
import sbt.internal.BuildDependencies.DependencyMap
import sbt.internal.{BuildDependencies, LoadedBuild}

object BuildKeys {
val partialSbtExcludedFiles = sbt.settingKey[Seq[sbt.File]]("Files that should be excluded from analysis.")
Expand Down Expand Up @@ -38,6 +39,40 @@ object PartialSbtPlugin extends AutoPlugin {
BuildKeys.partialSbtExcludedFiles := Def.setting(List.empty[sbt.File]).value
)

private def hasCompileConfiguration[A <: ProjectReference](dep: ClasspathDep[A]): Boolean =
dep.configuration.forall(value => value.contains("compile->") || value == "compile")

private def changedProjectsCommand(name: String)(
buildDependencies: BuildDependencies,
baseDirectory: File,
loadedBuild: LoadedBuild,
partialSbtExcludedFiles: Seq[File],
dependencyFilter: ClasspathDep[ProjectRef] => Boolean
) =
Command(name)(_ => PartialSbParser.changeGetterParser)((st, changeGetter) => {

val compileDependencyMap: DependencyMap[ClasspathDep[ProjectRef]] =
buildDependencies.classpath.mapValues(_.filter(dependencyFilter))

val transitiveCompileDependencyMap =
BuildDependencies.transitive(compileDependencyMap, BuildDependencies.getID)

val changedProjects: Seq[ResolvedProject] =
findChangedModules(changeGetter)(
baseDirectory,
loadedBuild.allProjectRefs,
transitiveCompileDependencyMap,
partialSbtExcludedFiles
)

logger.debug(s"${changedProjects.size} projects have been changed")

changedProjects.foreach { resolvedProject =>
logger.debug(resolvedProject.id)
}
st
})

override def projectSettings: Seq[Def.Setting[_]] =
Seq(
commands += Command("metaBuildChangedFiles")(_ => PartialSbParser.changeGetterParser)((st, changeGetter) => {
Expand All @@ -51,23 +86,20 @@ object PartialSbtPlugin extends AutoPlugin {
}
st
}),
commands += Command("changedProjects")(_ => PartialSbParser.changeGetterParser)((st, changeGetter) => {

val changedProjects: Seq[ResolvedProject] =
findChangedModules(changeGetter)(
baseDirectory.value,
loadedBuild.value.allProjectRefs,
buildDependencies.value.classpathTransitive,
BuildKeys.partialSbtExcludedFiles.value
)

logger.debug(s"${changedProjects.size} projects have been changed")

changedProjects.foreach { resolvedProject =>
logger.debug(resolvedProject.id)
}
st
})
commands += changedProjectsCommand("changedProjects")(
buildDependencies.value,
baseDirectory.value,
loadedBuild.value,
BuildKeys.partialSbtExcludedFiles.value,
Function.const(true)
),
commands += changedProjectsCommand("changedProjectsInCompile")(
buildDependencies.value,
baseDirectory.value,
loadedBuild.value,
BuildKeys.partialSbtExcludedFiles.value,
hasCompileConfiguration
)
)

private def findChangedModules(changeGetter: ChangeGetter)(
Expand Down
4 changes: 4 additions & 0 deletions src/sbt-test/test-projects/multi-module-project/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,8 @@ lazy val thirdService = sbt
lazy val fourthService = sbt
.Project("service-4", service / "service-4")
.dependsOn(firstTool, secondTool)
.dependsOn(testKit % Test)
.settings(settings("service-4"))

lazy val testKit = sbt
.Project("testKit", libs / "testKit")
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/libs/testKit/build.sbt
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
Metabuild files have changed. Need to reload all the 11 projects
11 projects have been changed
Metabuild files have changed. Need to reload all the 12 projects
12 projects have been changed
lib-1
lib-2
multi-module-project
service-1
service-2
service-3
service-4
testKit
tool-1
tool-2
tool-3
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1 projects have been changed
testKit
7 changes: 6 additions & 1 deletion src/sbt-test/test-projects/multi-module-project/test
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,9 @@ $ must-mirror ./result4.log ./expected/4.log
> reload
> addEnvVar PARTIAL_SBT_LOG_PATH result5.log
> changedProjects dummyChanges ./changes/5.log
$ must-mirror ./result5.log ./expected/5.log
$ must-mirror ./result5.log ./expected/5.log
# 6th test
> reload
> addEnvVar PARTIAL_SBT_LOG_PATH result6.log
> changedProjectsInCompile dummyChanges ./changes/6.log
$ must-mirror ./result6.log ./expected/6.log

0 comments on commit 115d57f

Please sign in to comment.