From 760a4ab5d2d1de9c3e6608f9a350f4e92d06fc65 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 4 Nov 2014 19:01:30 -0500 Subject: [PATCH] Fixes #1704. Fixes cached resolution + module-level exclusions --- .../sbt/ivyint/CachedResolutionResolveEngine.scala | 7 ++++++- .../cached-resolution-exclude/multi.sbt | 11 +++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala b/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala index fa8361c95..4b852f48a 100644 --- a/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala +++ b/ivy/src/main/scala/sbt/ivyint/CachedResolutionResolveEngine.scala @@ -87,8 +87,10 @@ private[sbt] class CachedResolutionResolveCache() { case rules => Some(conf + "->(" + (rules map includeRuleString).mkString(",") + ")") } }) + val mes = parent.getAllExcludeRules.toVector + val mesStr = (mes map excludeRuleString).mkString(",") val os = extractOverrides(parent) - val moduleLevel = s"""dependencyOverrides=${os.mkString(",")}""" + val moduleLevel = s"""dependencyOverrides=${os.mkString(",")};moduleExclusions=$mesStr""" val depsString = s"""$mrid;${confMap.mkString(",")};isForce=${dd.isForce};isChanging=${dd.isChanging};isTransitive=${dd.isTransitive};""" + s"""exclusions=${exclusions.mkString(",")};inclusions=${inclusions.mkString(",")};$moduleLevel;""" val sha1 = Hash.toHex(Hash(depsString)) @@ -102,6 +104,9 @@ private[sbt] class CachedResolutionResolveCache() { os foreach { ovr => md1.addDependencyDescriptorMediator(ovr.moduleId, ovr.pm, ovr.ddm) } + mes foreach { exclude => + md1.addExcludeRule(exclude) + } (md1, IvySbt.isChanging(dd)) } def extractOverrides(md0: ModuleDescriptor): Vector[IvyOverride] = diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt index 3d3196156..c9233cc5a 100644 --- a/sbt/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt +++ b/sbt/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt @@ -17,7 +17,11 @@ def cachedResolutionSettings: Seq[Def.Setting[_]] = lazy val a = project. settings(cachedResolutionSettings: _*). settings( - libraryDependencies += "net.databinder" %% "unfiltered-uploads" % "0.8.0" exclude("commons-io", "commons-io") + libraryDependencies += "net.databinder" %% "unfiltered-uploads" % "0.8.0" exclude("commons-io", "commons-io"), + ivyXML := + + + ) lazy val b = project. @@ -32,12 +36,15 @@ lazy val root = (project in file(".")). organization in ThisBuild := "org.example", version in ThisBuild := "1.0", check := { - // sys.error(dependencyCacheDirectory.value.toString) val acp = (externalDependencyClasspath in Compile in a).value.sortBy {_.data.getName} val bcp = (externalDependencyClasspath in Compile in b).value.sortBy {_.data.getName} if (acp exists { _.data.getName contains "commons-io" }) { sys.error("commons-io found when it should be excluded") } + if (acp exists { _.data.getName contains "commons-codec" }) { + sys.error("commons-codec found when it should be excluded") + } + // This is checking to make sure excluded graph is not getting picked up if (!(bcp exists { _.data.getName contains "commons-io" })) { sys.error("commons-io NOT found when it should NOT be excluded") }