@@ -5,6 +5,7 @@ import org.apache.logging.log4j.LogManager
5
5
import sbt .*
6
6
import sbt .Keys .*
7
7
import sbt .internal .BuildDependencies .DependencyMap
8
+ import sbt .internal .{BuildDependencies , LoadedBuild }
8
9
9
10
object BuildKeys {
10
11
val partialSbtExcludedFiles = sbt.settingKey[Seq [sbt.File ]](" Files that should be excluded from analysis." )
@@ -38,6 +39,40 @@ object PartialSbtPlugin extends AutoPlugin {
38
39
BuildKeys .partialSbtExcludedFiles := Def .setting(List .empty[sbt.File ]).value
39
40
)
40
41
42
+ private def hasCompileConfiguration [A <: ProjectReference ](dep : ClasspathDep [A ]): Boolean =
43
+ dep.configuration.fold(true )(value => value.contains(" compile->" ) || value == " compile" )
44
+
45
+ private def changedProjectsCommand (name : String )(
46
+ buildDependencies : BuildDependencies ,
47
+ baseDirectory : File ,
48
+ loadedBuild : LoadedBuild ,
49
+ partialSbtExcludedFiles : Seq [File ],
50
+ dependencyFilter : ClasspathDep [ProjectRef ] => Boolean
51
+ ) =
52
+ Command (name)(_ => PartialSbParser .changeGetterParser)((st, changeGetter) => {
53
+
54
+ val compileDependencyMap : DependencyMap [ClasspathDep [ProjectRef ]] =
55
+ buildDependencies.classpath.mapValues(_.filter(dependencyFilter))
56
+
57
+ val transitiveCompileDependencyMap =
58
+ BuildDependencies .transitive(compileDependencyMap, BuildDependencies .getID)
59
+
60
+ val changedProjects : Seq [ResolvedProject ] =
61
+ findChangedModules(changeGetter)(
62
+ baseDirectory,
63
+ loadedBuild.allProjectRefs,
64
+ transitiveCompileDependencyMap,
65
+ partialSbtExcludedFiles
66
+ )
67
+
68
+ logger.debug(s " ${changedProjects.size} projects have been changed " )
69
+
70
+ changedProjects.foreach { resolvedProject =>
71
+ logger.debug(resolvedProject.id)
72
+ }
73
+ st
74
+ })
75
+
41
76
override def projectSettings : Seq [Def .Setting [_]] =
42
77
Seq (
43
78
commands += Command (" metaBuildChangedFiles" )(_ => PartialSbParser .changeGetterParser)((st, changeGetter) => {
@@ -51,23 +86,20 @@ object PartialSbtPlugin extends AutoPlugin {
51
86
}
52
87
st
53
88
}),
54
- commands += Command (" changedProjects" )(_ => PartialSbParser .changeGetterParser)((st, changeGetter) => {
55
-
56
- val changedProjects : Seq [ResolvedProject ] =
57
- findChangedModules(changeGetter)(
58
- baseDirectory.value,
59
- loadedBuild.value.allProjectRefs,
60
- buildDependencies.value.classpathTransitive,
61
- BuildKeys .partialSbtExcludedFiles.value
62
- )
63
-
64
- logger.debug(s " ${changedProjects.size} projects have been changed " )
65
-
66
- changedProjects.foreach { resolvedProject =>
67
- logger.debug(resolvedProject.id)
68
- }
69
- st
70
- })
89
+ commands += changedProjectsCommand(" changedProjects" )(
90
+ buildDependencies.value,
91
+ baseDirectory.value,
92
+ loadedBuild.value,
93
+ BuildKeys .partialSbtExcludedFiles.value,
94
+ Function .const(true )
95
+ ),
96
+ commands += changedProjectsCommand(" changedProjectsInCompile" )(
97
+ buildDependencies.value,
98
+ baseDirectory.value,
99
+ loadedBuild.value,
100
+ BuildKeys .partialSbtExcludedFiles.value,
101
+ hasCompileConfiguration
102
+ )
71
103
)
72
104
73
105
private def findChangedModules (changeGetter : ChangeGetter )(
0 commit comments