diff --git a/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala b/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala
index a1fc5ddfc..06e253ab5 100644
--- a/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala
+++ b/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala
@@ -327,12 +327,41 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
Left(new ResolveException(messages, failed, failedPaths))
}
}
- val results = mds map {
+ val (internal, external) = mds.partition { case (_, _, dd) => cache.internalDependency(dd, projectResolver).isDefined }
+ val internalResults = internal map {
case (md, changing, dd) =>
cache.getOrElseUpdateMiniGraph(md, changing, logicalClock, miniGraphPath, cachedDescriptor, log) {
doWork(md, dd)
}
}
+ val externalResults = external map {
+ case (md0, changing, dd) =>
+ val configurationsInInternal = internalResults flatMap {
+ case Right(ur) => ur.allModules.flatMap {
+ case md =>
+ val sameName = md.name == dd.getDependencyId.getName
+ val sameOrg = md.organization == dd.getDependencyId.getOrganisation
+ if (sameName && sameOrg) md.configurations
+ else None
+ }
+ case _ => Nil
+ }
+
+ dd match {
+ case d: DefaultDependencyDescriptor =>
+ configurationsInInternal foreach { c =>
+ val configurations = c.split(";").map(_.split("->"))
+ configurations foreach { conf => d.addDependencyConfiguration(conf(0), conf(1)) }
+ }
+
+ case _ => ()
+ }
+
+ cache.getOrElseUpdateMiniGraph(md0, changing, logicalClock, miniGraphPath, cachedDescriptor, log) {
+ doWork(md0, dd)
+ }
+ }
+ val results = internalResults ++ externalResults
val uReport = mergeResults(md0, results, missingOk, System.currentTimeMillis - start, os, log)
val cacheManager = getSettings.getResolutionCacheManager
cacheManager.saveResolvedModuleDescriptor(md0)
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/a/A.scala b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/a/A.scala
new file mode 100644
index 000000000..4e33d90d9
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/a/A.scala
@@ -0,0 +1,5 @@
+package a
+
+object A {
+ romanowski.sbt.bug.MissingClass("A")
+}
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/b/B.scala b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/b/B.scala
new file mode 100644
index 000000000..acf3023b8
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/b/B.scala
@@ -0,0 +1,5 @@
+package b
+
+object B {
+ romanowski.sbt.bug.MissingClass("A")
+}
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt
new file mode 100644
index 000000000..3665d3634
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt
@@ -0,0 +1,22 @@
+def myResolver = resolvers += Resolver.file("buggy", file("repo"))(
+ Patterns(
+ ivyPatterns = Seq("[organization]/[module]/[revision]/ivy.xml"),
+ artifactPatterns = Seq("[organization]/[module]/[revision]/[artifact]"),
+ isMavenCompatible = false,
+ descriptorOptional = true,
+ skipConsistencyCheck = true
+ )
+)
+
+lazy val a = project settings(
+ myResolver,
+ updateOptions := updateOptions.value.withCachedResolution(true), //comment this line to make ws compile
+ libraryDependencies += "a" % "b" % "1.0.0" % "compile->runtime",
+ libraryDependencies += "a" % "b" % "1.0.0" % "compile->runtime2"
+)
+
+lazy val b = project dependsOn(a) settings(
+ myResolver,
+ updateOptions := updateOptions.value.withCachedResolution(true), //comment this line to make ws compile
+ libraryDependencies += "a" % "b" % "1.0.1" % "compile->runtime"
+)
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b1.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b1.jar
new file mode 100644
index 000000000..619fa9368
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b1.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b2.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b2.jar
new file mode 100644
index 000000000..619fa9368
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b2.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b3.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b3.jar
new file mode 100644
index 000000000..1c3f8c4e1
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/b3.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/ivy.xml b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/ivy.xml
new file mode 100644
index 000000000..19fab2e82
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.0/ivy.xml
@@ -0,0 +1,16 @@
+
+
+ a
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b1.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b1.jar
new file mode 100644
index 000000000..619fa9368
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b1.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b2.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b2.jar
new file mode 100644
index 000000000..619fa9368
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b2.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b3.jar b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b3.jar
new file mode 100644
index 000000000..1c3f8c4e1
Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/b3.jar differ
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/ivy.xml b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/ivy.xml
new file mode 100644
index 000000000..a734f26d0
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/repo/a/b/1.0.1/ivy.xml
@@ -0,0 +1,16 @@
+
+
+ a
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/test b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/test
new file mode 100644
index 000000000..6fdf810e0
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/test
@@ -0,0 +1,11 @@
+# In this test, we have a project `a`, on which a project `b` depends.
+# project `a` has a library dependency on:
+# - "a" % "b" % "1.0.0" % "compile->runtime"
+# - "a" % "b" % "1.0.0" % "compile->runtime2"
+# project "b" depends on:
+# - project `a`
+# - "b" % "b" % "1.0.1" % "compile->runtime"
+# "a" % "b" % "1.0.0" will be evicted in favor of "a" % "b" % "1.0.1", but we
+# have to keep the dependency on the two configurations "runtime" and "runtime2".
+# This test makes sure that we actually do.
+> compile