From 5afb9e1af79ab13817e7d6f18cf1d3836d605845 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 Oct 2014 04:24:22 -0400 Subject: [PATCH] Fixed json serialization turning license into {}. --- ivy/src/main/scala/sbt/IvyRetrieve.scala | 3 +- ivy/src/main/scala/sbt/Resolver.scala | 2 +- main/src/main/scala/sbt/Defaults.scala | 6 ++- main/src/main/scala/sbt/Keys.scala | 1 + .../a/A.java | 0 .../c/C.java | 0 .../multi.sbt | 3 +- .../test | 4 +- .../cached-resolution2/multi.sbt | 46 +++++++++++++++++++ .../cached-resolution2/test | 5 ++ 10 files changed, 65 insertions(+), 5 deletions(-) rename sbt/src/sbt-test/dependency-management/{consolidated-resolution => cached-resolution}/a/A.java (100%) rename sbt/src/sbt-test/dependency-management/{consolidated-resolution => cached-resolution}/c/C.java (100%) rename sbt/src/sbt-test/dependency-management/{consolidated-resolution => cached-resolution}/multi.sbt (92%) rename sbt/src/sbt-test/dependency-management/{consolidated-resolution => cached-resolution}/test (61%) create mode 100644 sbt/src/sbt-test/dependency-management/cached-resolution2/multi.sbt create mode 100644 sbt/src/sbt-test/dependency-management/cached-resolution2/test diff --git a/ivy/src/main/scala/sbt/IvyRetrieve.scala b/ivy/src/main/scala/sbt/IvyRetrieve.scala index bb15c68df..1e74f3955 100644 --- a/ivy/src/main/scala/sbt/IvyRetrieve.scala +++ b/ivy/src/main/scala/sbt/IvyRetrieve.scala @@ -128,7 +128,8 @@ object IvyRetrieve { val licenses: Seq[(String, Option[String])] = mdOpt match { case Some(md) => md.getLicenses.toArray.toVector collect { case lic: IvyLicense if Option(lic.getName).isDefined => - (lic.getName, nonEmptyString(lic.getUrl)) + val temporaryURL = "http://localhost" + (lic.getName, nonEmptyString(lic.getUrl) orElse { Some(temporaryURL) }) } case _ => Nil } diff --git a/ivy/src/main/scala/sbt/Resolver.scala b/ivy/src/main/scala/sbt/Resolver.scala index 57a73dec2..c7e67f876 100644 --- a/ivy/src/main/scala/sbt/Resolver.scala +++ b/ivy/src/main/scala/sbt/Resolver.scala @@ -305,7 +305,7 @@ object Resolver { def loadHomeFromSettings(f: () => File): Option[File] = try { val file = f() - if(!file.exists) None + if (!file.exists) None else ((XML.loadFile(file) \ "localRepository").text match { case "" => None case e @ _ => Some(new File(e)) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 28fb7be54..077152859 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1062,6 +1062,10 @@ object Classpaths { }, moduleName <<= normalizedName, ivyPaths := new IvyPaths(baseDirectory.value, bootIvyHome(appConfiguration.value)), + dependencyCacheDirectory := { + val st = state.value + BuildPaths.getDependencyDirectory(st, BuildPaths.getGlobalBase(st)) + }, otherResolvers := Resolver.publishMavenLocal :: publishTo.value.toList, projectResolver <<= projectResolverTask, projectDependencies <<= projectDependenciesTask, @@ -1266,7 +1270,7 @@ object Classpaths { val show = Reference.display(thisProjectRef.value) val st = state.value val logicalClock = LogicalClock(Hash.toHex(intToByteArray(st.hashCode))) - val depDir = BuildPaths.getDependencyDirectory(st, BuildPaths.getGlobalBase(st)) + val depDir = dependencyCacheDirectory.value cachedUpdate(s.cacheDirectory / updateCacheName.value, show, ivyModule.value, updateConfiguration.value, transform, skip = (skip in update).value, force = isRoot, depsUpdated = depsUpdated, uwConfig = uwConfig, logicalClock = logicalClock, depDir = Some(depDir), log = s.log) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index e8a3347c7..8795d0795 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -297,6 +297,7 @@ object Keys { val retrieveConfiguration = SettingKey[Option[RetrieveConfiguration]]("retrieve-configuration", "Configures retrieving dependencies to the current build.", DSetting) val offline = SettingKey[Boolean]("offline", "Configures sbt to work without a network connection where possible.", ASetting) val ivyPaths = SettingKey[IvyPaths]("ivy-paths", "Configures paths used by Ivy for dependency management.", DSetting) + val dependencyCacheDirectory = TaskKey[File]("dependency-cache-directory", "The base directory for cached dependencies.", DTask) val libraryDependencies = SettingKey[Seq[ModuleID]]("library-dependencies", "Declares managed dependencies.", APlusSetting) val dependencyOverrides = SettingKey[Set[ModuleID]]("dependency-overrides", "Declares managed dependency overrides.", BSetting) val allDependencies = TaskKey[Seq[ModuleID]]("all-dependencies", "Inter-project and library dependencies.", CTask) diff --git a/sbt/src/sbt-test/dependency-management/consolidated-resolution/a/A.java b/sbt/src/sbt-test/dependency-management/cached-resolution/a/A.java similarity index 100% rename from sbt/src/sbt-test/dependency-management/consolidated-resolution/a/A.java rename to sbt/src/sbt-test/dependency-management/cached-resolution/a/A.java diff --git a/sbt/src/sbt-test/dependency-management/consolidated-resolution/c/C.java b/sbt/src/sbt-test/dependency-management/cached-resolution/c/C.java similarity index 100% rename from sbt/src/sbt-test/dependency-management/consolidated-resolution/c/C.java rename to sbt/src/sbt-test/dependency-management/cached-resolution/c/C.java diff --git a/sbt/src/sbt-test/dependency-management/consolidated-resolution/multi.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution/multi.sbt similarity index 92% rename from sbt/src/sbt-test/dependency-management/consolidated-resolution/multi.sbt rename to sbt/src/sbt-test/dependency-management/cached-resolution/multi.sbt index 341ab792f..e8d0a7145 100644 --- a/sbt/src/sbt-test/dependency-management/consolidated-resolution/multi.sbt +++ b/sbt/src/sbt-test/dependency-management/cached-resolution/multi.sbt @@ -2,7 +2,8 @@ lazy val check = taskKey[Unit]("Runs the check") def commonSettings: Seq[Def.Setting[_]] = Seq( - ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), + ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((baseDirectory in LocalRootProject).value / "ivy-cache")), + dependencyCacheDirectory := (baseDirectory in LocalRootProject).value / "dependency", libraryDependencies := Seq( "net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15" intransitive(), "com.typesafe.akka" %% "akka-remote" % "2.3.4" exclude("com.typesafe.akka", "akka-actor_2.10"), diff --git a/sbt/src/sbt-test/dependency-management/consolidated-resolution/test b/sbt/src/sbt-test/dependency-management/cached-resolution/test similarity index 61% rename from sbt/src/sbt-test/dependency-management/consolidated-resolution/test rename to sbt/src/sbt-test/dependency-management/cached-resolution/test index 7e1f55e8e..bd1a58183 100644 --- a/sbt/src/sbt-test/dependency-management/consolidated-resolution/test +++ b/sbt/src/sbt-test/dependency-management/cached-resolution/test @@ -2,4 +2,6 @@ > check -# > c/run +> clean + +> check diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution2/multi.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution2/multi.sbt new file mode 100644 index 000000000..e106a7693 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/cached-resolution2/multi.sbt @@ -0,0 +1,46 @@ +lazy val check = taskKey[Unit]("Runs the check") + +def commonSettings: Seq[Def.Setting[_]] = + Seq( + ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((baseDirectory in LocalRootProject).value / "ivy-cache")), + dependencyCacheDirectory := (baseDirectory in LocalRootProject).value / "dependency", + libraryDependencies := Seq( + "org.springframework" % "spring-core" % "3.2.2.RELEASE" force() exclude("org.springframework", "spring-asm"), + "org.springframework" % "spring-context" % "4.0.3.RELEASE" exclude("org.springframework", "spring-asm") + ), + scalaVersion := "2.10.4", + resolvers += Resolver.sonatypeRepo("snapshots") + ) + +def cachedResolutionSettings: Seq[Def.Setting[_]] = + commonSettings ++ Seq( + updateOptions := updateOptions.value.withCachedResolution(true) + ) + +lazy val a = project. + settings(cachedResolutionSettings: _*) + +lazy val b = project. + settings(commonSettings: _*) + +lazy val c = project. + dependsOn(a). + settings(cachedResolutionSettings: _*) + +lazy val root = (project in file(".")). + aggregate(a, b, c). + settings( + 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} + val ccp = (externalDependencyClasspath in Compile in c).value.sortBy {_.data.getName} + if (acp == bcp && acp == ccp) () + else sys.error("Different classpaths are found:" + + "\n - a (consolidated) " + acp.toString + + "\n - b (plain) " + bcp.toString + + "\n - c (inter-project) " + ccp.toString) + } + ) diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution2/test b/sbt/src/sbt-test/dependency-management/cached-resolution2/test new file mode 100644 index 000000000..10f47e5cc --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/cached-resolution2/test @@ -0,0 +1,5 @@ +> check + +> clean + +> check