diff --git a/src/main/scala/com/elarib/PartialSbtPlugin.scala b/src/main/scala/com/elarib/PartialSbtPlugin.scala index b4878f9..77114a2 100644 --- a/src/main/scala/com/elarib/PartialSbtPlugin.scala +++ b/src/main/scala/com/elarib/PartialSbtPlugin.scala @@ -8,6 +8,7 @@ import sbt._ object BuildKeys { val partialSbtExcludedFiles = sbt.settingKey[Seq[sbt.File]]("Files that should be excluded from analysis.") + val partialSbtExcludedProject: SettingKey[Unit] = sbt.settingKey[Unit]("Exclude project from analysis.") } object PartialSbtPlugin extends AutoPlugin { @@ -50,6 +51,7 @@ object PartialSbtPlugin extends AutoPlugin { st }), commands += Command("changedProjects")(_ => PartialSbParser.changeGetterParser)((st, changeGetter) => { + val changedProjects: Seq[ResolvedProject] = findChangedModules(changeGetter)( baseDirectory.value, @@ -82,6 +84,9 @@ object PartialSbtPlugin extends AutoPlugin { projectMap.values.toSeq .sortBy(_.id) case Nil => + def isIncludedInAnalysis(resolvedProject: ResolvedProject): Boolean = + !resolvedProject.settings.exists(_.key.key == BuildKeys.partialSbtExcludedProject.key) + val reverseDependencyMap: DependencyMap[ResolvedProject] = buildDeps .foldLeft[DependencyMap[ResolvedProject]](Map.empty) { (acc, dependency) => val (ref, dependsOnList) = dependency @@ -94,11 +99,15 @@ object PartialSbtPlugin extends AutoPlugin { .fold(resolvedProjects)(_ +: resolvedProjects) dependencyMap + (key -> newValue) } - + } + .filterKeys { projectRef => + projectMap.get(projectRef).exists(isIncludedInAnalysis) } val modulesWithPath: Seq[(ProjectRef, ResolvedProject)] = - allProjectRefs.filter(_._2.base != baseDir) + allProjectRefs.filter { case (_, resolvedProject) => + isIncludedInAnalysis(resolvedProject) && resolvedProject.base != baseDir + } val diffsFiles: Seq[sbt.File] = changeGetter.changes.filterNot(f => isFileExcluded(baseDir)(f, excludedFiles)) diff --git a/src/sbt-test/test-projects/multi-module-project/build.sbt b/src/sbt-test/test-projects/multi-module-project/build.sbt index b80630c..5c96d99 100644 --- a/src/sbt-test/test-projects/multi-module-project/build.sbt +++ b/src/sbt-test/test-projects/multi-module-project/build.sbt @@ -18,7 +18,7 @@ commands += Command("addEnvVar")(_ => sbt.internal.util.complete.Parsers.spaceDe // Projects // +-----------+ +-----------+ // | | | | -// | lib-1 +<---------+ +--------->+ lib-2 | +// | lib-1 +<---------+ +--------->+ lib-2 (X) | // | | | | | | // +-----^-----+ | | +---+-------+ // | | | ^ @@ -80,6 +80,7 @@ lazy val firstLib = sbt lazy val secondLib = sbt .Project("lib-2", libs / "lib-2") .settings(settings("lib-2")) + .settings(com.elarib.BuildKeys.partialSbtExcludedProject := ()) //Tools lazy val firstTool = sbt diff --git a/src/sbt-test/test-projects/multi-module-project/expected/4.log b/src/sbt-test/test-projects/multi-module-project/expected/4.log index 19ff963..c4b00c9 100644 --- a/src/sbt-test/test-projects/multi-module-project/expected/4.log +++ b/src/sbt-test/test-projects/multi-module-project/expected/4.log @@ -1,10 +1,7 @@ -9 projects have been changed +6 projects have been changed lib-1 -lib-2 service-1 -service-2 service-3 service-4 tool-1 -tool-2 tool-3 \ No newline at end of file