mirror of https://github.com/sbt/sbt.git
Better properties substitution (#2)
This commit is contained in:
parent
00d11017f7
commit
76e989d21c
|
|
@ -613,20 +613,25 @@ case class Resolution(
|
|||
.map(_._2.properties)
|
||||
.fold(project.properties)(project.properties ++ _)
|
||||
|
||||
val approxProperties = propertiesMap(approxProperties0)
|
||||
val approxProperties = propertiesMap(approxProperties0) ++ Seq(
|
||||
"project.groupId" -> project.module.organization,
|
||||
"project.artifactId" -> project.module.name,
|
||||
"project.version" -> project.version
|
||||
)
|
||||
|
||||
val profileDependencies =
|
||||
profiles(
|
||||
project,
|
||||
approxProperties,
|
||||
profileActivation getOrElse defaultProfileActivation
|
||||
).flatMap(_.dependencies)
|
||||
).flatMap(p => p.dependencies ++ p.dependencyManagement)
|
||||
|
||||
val modules =
|
||||
(project.dependencies ++ profileDependencies)
|
||||
.collect{
|
||||
case ("import", dep) => dep.moduleVersion
|
||||
}
|
||||
val modules = withProperties(
|
||||
project.dependencies ++ project.dependencyManagement ++ profileDependencies,
|
||||
approxProperties
|
||||
).collect {
|
||||
case ("import", dep) => dep.moduleVersion
|
||||
}
|
||||
|
||||
modules.toSet ++ project.parent
|
||||
}
|
||||
|
|
@ -683,13 +688,21 @@ case class Resolution(
|
|||
*/
|
||||
def withDependencyManagement(project: Project): Project = {
|
||||
|
||||
// A bit fragile, but seems to work
|
||||
// TODO Add non regression test for the touchy org.glassfish.jersey.core:jersey-client:2.19
|
||||
// (for the way it uses org.glassfish.hk2:hk2-bom,2.4.0-b25)
|
||||
|
||||
val approxProperties0 =
|
||||
project.parent
|
||||
.filter(projectCache.contains)
|
||||
.map(projectCache(_)._2.properties.toMap)
|
||||
.fold(project.properties)(project.properties ++ _)
|
||||
|
||||
val approxProperties = propertiesMap(approxProperties0)
|
||||
val approxProperties = propertiesMap(approxProperties0) ++ Seq(
|
||||
"project.groupId" -> project.module.organization,
|
||||
"project.artifactId" -> project.module.name,
|
||||
"project.version" -> project.version
|
||||
)
|
||||
|
||||
val profiles0 = profiles(
|
||||
project,
|
||||
|
|
@ -698,20 +711,29 @@ case class Resolution(
|
|||
)
|
||||
|
||||
val dependencies0 = addDependencies(
|
||||
project.dependencies +: profiles0.map(_.dependencies)
|
||||
(project.dependencies +: profiles0.map(_.dependencies)).map(withProperties(_, approxProperties))
|
||||
)
|
||||
val dependenciesMgmt0 = addDependencies(
|
||||
(project.dependencyManagement +: profiles0.map(_.dependencyManagement)).map(withProperties(_, approxProperties))
|
||||
)
|
||||
val properties0 =
|
||||
(project.properties /: profiles0) { (acc, p) =>
|
||||
acc ++ p.properties
|
||||
}
|
||||
|
||||
val deps = (
|
||||
val deps0 = (
|
||||
dependencies0
|
||||
.collect { case ("import", dep) =>
|
||||
dep.moduleVersion
|
||||
} ++
|
||||
dependenciesMgmt0
|
||||
.collect { case ("import", dep) =>
|
||||
dep.moduleVersion
|
||||
} ++
|
||||
project.parent
|
||||
).filter(projectCache.contains)
|
||||
)
|
||||
|
||||
val deps = deps0.filter(projectCache.contains)
|
||||
|
||||
val projs = deps
|
||||
.map(projectCache(_)._2)
|
||||
|
|
@ -721,7 +743,9 @@ case class Resolution(
|
|||
profiles0.map(_.dependencyManagement) ++
|
||||
projs.map(_.dependencyManagement)
|
||||
)
|
||||
).foldLeft(Map.empty[DepMgmt.Key, (String, Dependency)])(DepMgmt.addSeq)
|
||||
)
|
||||
.map(withProperties(_, approxProperties))
|
||||
.foldLeft(Map.empty[DepMgmt.Key, (String, Dependency)])(DepMgmt.addSeq)
|
||||
|
||||
val depsSet = deps.toSet
|
||||
|
||||
|
|
@ -735,7 +759,10 @@ case class Resolution(
|
|||
.filter(projectCache.contains)
|
||||
.toSeq
|
||||
.flatMap(projectCache(_)._2.dependencies),
|
||||
dependencyManagement = depMgmt.values.toSeq,
|
||||
dependencyManagement = depMgmt.values.toSeq
|
||||
.filterNot{case (config, dep) =>
|
||||
config == "import" && depsSet(dep.moduleVersion)
|
||||
},
|
||||
properties = project.parent
|
||||
.filter(projectCache.contains)
|
||||
.map(projectCache(_)._2.properties)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ object FromSbt {
|
|||
ivyConfigurations,
|
||||
None,
|
||||
Nil,
|
||||
Map.empty,
|
||||
Nil,
|
||||
Nil,
|
||||
None,
|
||||
None,
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ object ResolutionTests extends TestSuite {
|
|||
dependencies = Seq(
|
||||
"" -> Dependency(Module("acme", "play-json"), "${playJsonVersion}"),
|
||||
"" -> Dependency(Module("${project.groupId}", "${configName}"), "1.3.0")),
|
||||
properties = Map(
|
||||
properties = Seq(
|
||||
"playJsonVersion" -> "2.4.0",
|
||||
"configName" -> "config")),
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ object ResolutionTests extends TestSuite {
|
|||
dependencies = Seq(
|
||||
"" -> Dependency(Module("gov.nsa", "secure-pgp"), "10.0",
|
||||
exclusions = Set(("*", "${crypto.name}")))),
|
||||
properties = Map("crypto.name" -> "crypto", "dummy" -> "2")),
|
||||
properties = Seq("crypto.name" -> "crypto", "dummy" -> "2")),
|
||||
|
||||
Project(Module("com.thoughtworks.paranamer", "paranamer-parent"), "2.6",
|
||||
dependencies = Seq(
|
||||
|
|
@ -108,29 +108,29 @@ object ResolutionTests extends TestSuite {
|
|||
"test" -> Dependency(Module("org.scalaverification", "scala-verification"), "1.12.4"))))),
|
||||
|
||||
Project(Module("com.github.dummy", "libb"), "0.5.3",
|
||||
properties = Map("special" -> "true"),
|
||||
properties = Seq("special" -> "true"),
|
||||
profiles = Seq(
|
||||
Profile("default", activation = Profile.Activation(properties = Seq("special" -> None)), dependencies = Seq(
|
||||
"" -> Dependency(Module("org.escalier", "librairie-standard"), "2.11.6"))))),
|
||||
|
||||
Project(Module("com.github.dummy", "libb"), "0.5.4",
|
||||
properties = Map("special" -> "true"),
|
||||
properties = Seq("special" -> "true"),
|
||||
profiles = Seq(
|
||||
Profile("default", activation = Profile.Activation(properties = Seq("special" -> Some("true"))), dependencies = Seq(
|
||||
"" -> Dependency(Module("org.escalier", "librairie-standard"), "2.11.6"))))),
|
||||
|
||||
Project(Module("com.github.dummy", "libb"), "0.5.5",
|
||||
properties = Map("special" -> "true"),
|
||||
properties = Seq("special" -> "true"),
|
||||
profiles = Seq(
|
||||
Profile("default", activation = Profile.Activation(properties = Seq("special" -> Some("!false"))), dependencies = Seq(
|
||||
"" -> Dependency(Module("org.escalier", "librairie-standard"), "2.11.6"))))),
|
||||
|
||||
Project(Module("com.github.dummy", "libb-parent"), "0.5.6",
|
||||
properties = Map("special" -> "true")),
|
||||
properties = Seq("special" -> "true")),
|
||||
|
||||
Project(Module("com.github.dummy", "libb"), "0.5.6",
|
||||
parent = Some(Module("com.github.dummy", "libb-parent"), "0.5.6"),
|
||||
properties = Map("special" -> "true"),
|
||||
properties = Seq("special" -> "true"),
|
||||
profiles = Seq(
|
||||
Profile("default", activation = Profile.Activation(properties = Seq("special" -> Some("!false"))), dependencies = Seq(
|
||||
"" -> Dependency(Module("org.escalier", "librairie-standard"), "2.11.6"))))),
|
||||
|
|
@ -243,14 +243,11 @@ object ResolutionTests extends TestSuite {
|
|||
)
|
||||
val res = await(resolve0(
|
||||
Set(dep)
|
||||
))
|
||||
)).copy(filter = None, projectCache = Map.empty)
|
||||
|
||||
val expected = Resolution(
|
||||
rootDependencies = Set(dep),
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope),
|
||||
projectCache = Map(
|
||||
projectsMap(dep.moduleVersion).kv
|
||||
) ++ trDeps.map(trDep => projectsMap(trDep.moduleVersion).kv)
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope)
|
||||
)
|
||||
|
||||
assert(res == expected)
|
||||
|
|
@ -267,14 +264,11 @@ object ResolutionTests extends TestSuite {
|
|||
)
|
||||
val res = await(resolve0(
|
||||
Set(dep)
|
||||
))
|
||||
)).copy(filter = None, projectCache = Map.empty)
|
||||
|
||||
val expected = Resolution(
|
||||
rootDependencies = Set(dep),
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope),
|
||||
projectCache = Map(
|
||||
projectsMap(dep.moduleVersion).kv
|
||||
) ++ trDeps.map(trDep => projectsMap(trDep.moduleVersion).kv)
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope)
|
||||
)
|
||||
|
||||
assert(res == expected)
|
||||
|
|
@ -291,14 +285,11 @@ object ResolutionTests extends TestSuite {
|
|||
)
|
||||
val res = await(resolve0(
|
||||
Set(dep)
|
||||
))
|
||||
)).copy(filter = None, projectCache = Map.empty)
|
||||
|
||||
val expected = Resolution(
|
||||
rootDependencies = Set(dep),
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope),
|
||||
projectCache = Map(
|
||||
projectsMap(dep.moduleVersion).kv
|
||||
) ++ trDeps.map(trDep => projectsMap(trDep.moduleVersion).kv)
|
||||
dependencies = Set(dep.withCompileScope) ++ trDeps.map(_.withCompileScope)
|
||||
)
|
||||
|
||||
assert(res == expected)
|
||||
|
|
@ -309,14 +300,11 @@ object ResolutionTests extends TestSuite {
|
|||
val dep = Dependency(Module("hudsucker", "mail"), "10.0")
|
||||
val res = await(resolve0(
|
||||
Set(dep)
|
||||
)).copy(filter = None)
|
||||
)).copy(filter = None, projectCache = Map.empty)
|
||||
|
||||
val expected = Resolution(
|
||||
rootDependencies = Set(dep),
|
||||
dependencies = Set(dep.withCompileScope),
|
||||
projectCache = Map(
|
||||
projectsMap(dep.moduleVersion).kv
|
||||
)
|
||||
dependencies = Set(dep.withCompileScope)
|
||||
)
|
||||
|
||||
assert(res == expected)
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ package object test {
|
|||
parent: Option[ModuleVersion] = None,
|
||||
dependencyManagement: Seq[(String, Dependency)] = Seq.empty,
|
||||
configurations: Map[String, Seq[String]] = Map.empty,
|
||||
properties: Map[String, String] = Map.empty,
|
||||
properties: Seq[(String, String)] = Seq.empty,
|
||||
profiles: Seq[Profile] = Seq.empty,
|
||||
versions: Option[core.Versions] = None,
|
||||
snapshotVersioning: Option[core.SnapshotVersioning] = None,
|
||||
|
|
|
|||
Loading…
Reference in New Issue