Merge pull request #1713 from sbt/fix/1710

Fixes cached resolution mutual eviction (drops slf4j)
This commit is contained in:
Josh Suereth 2014-11-03 11:56:51 -05:00
commit c8f2f04dde
13 changed files with 70 additions and 1 deletions

View File

@ -321,7 +321,7 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
val merged = (modules groupBy { m => (m.module.organization, m.module.name, m.module.revision) }).toSeq.toVector flatMap {
case ((org, name, version), xs) =>
if (xs.size < 2) xs
else Vector(xs.head.copy(evicted = xs exists { _.evicted }, callers = xs flatMap { _.callers }))
else Vector(xs.head.copy(evicted = xs forall { _.evicted }, callers = xs flatMap { _.callers }))
}
val conflicts = merged filter { m => !m.evicted && m.problem.isEmpty }
if (conflicts.size < 2) merged

View File

@ -0,0 +1,62 @@
// https://github.com/sbt/sbt/issues/1710
lazy val check = taskKey[Unit]("Runs the check")
def commonSettings: Seq[Def.Setting[_]] =
Seq(
organization := "com.example",
version := "0.1.0",
ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((baseDirectory in LocalRootProject).value / "ivy-cache")),
dependencyCacheDirectory := (baseDirectory in LocalRootProject).value / "dependency",
scalaVersion := "2.10.4",
fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project")
)
def cachedResolutionSettings: Seq[Def.Setting[_]] =
commonSettings ++ Seq(
updateOptions := updateOptions.value.withCachedResolution(true)
)
lazy val X1 = project.
settings(commonSettings: _*).
settings(
libraryDependencies ++= Seq(
"com.example" %% "y1" % "0.1.0" % "compile->compile;runtime->runtime",
"com.example" %% "y2" % "0.1.0" % "compile->compile;runtime->runtime")
)
lazy val Y1 = project.
settings(commonSettings: _*).
settings(
name := "y1",
libraryDependencies ++= Seq(
// this includes slf4j 1.7.5
"com.ning" % "async-http-client" % "1.8.14",
// this includes slf4j 1.6.6
"com.twitter" % "summingbird-core_2.10" % "0.5.0",
"org.slf4j" % "slf4j-api" % "1.6.6" force()
)
)
lazy val Y2 = project.
settings(commonSettings: _*).
settings(
name := "y2",
libraryDependencies ++= Seq(
// this includes slf4j 1.6.6
"com.twitter" % "summingbird-core_2.10" % "0.5.0",
// this includes slf4j 1.7.5
"com.ning" % "async-http-client" % "1.8.14")
)
lazy val root = (project in file(".")).
settings(
organization in ThisBuild := "org.example",
version in ThisBuild := "1.0",
check := {
val x1cp = (externalDependencyClasspath in Compile in X1).value.sortBy {_.data.getName}
// sys.error("slf4j-api is not found on X1" + x1cp)
if (!(x1cp exists {_.data.getName contains "slf4j-api"})) {
sys.error("slf4j-api is not found on X1" + x1cp)
}
}
)

View File

@ -0,0 +1,7 @@
> debug
> Y1/publishLocal
> Y2/publishLocal
> check