diff --git a/ivy/src/main/scala/sbt/UpdateOptions.scala b/ivy/src/main/scala/sbt/UpdateOptions.scala
index 3a710026c..3f640867d 100644
--- a/ivy/src/main/scala/sbt/UpdateOptions.scala
+++ b/ivy/src/main/scala/sbt/UpdateOptions.scala
@@ -75,7 +75,7 @@ object UpdateOptions {
def apply(): UpdateOptions =
new UpdateOptions(
circularDependencyLevel = CircularDependencyLevel.Warn,
- latestSnapshots = false,
+ latestSnapshots = true,
consolidatedResolution = false,
cachedResolution = false,
resolverConverter = PartialFunction.empty)
diff --git a/ivy/src/main/scala/sbt/ivyint/SbtChainResolver.scala b/ivy/src/main/scala/sbt/ivyint/SbtChainResolver.scala
index 6b1f59a15..7323f4aec 100644
--- a/ivy/src/main/scala/sbt/ivyint/SbtChainResolver.scala
+++ b/ivy/src/main/scala/sbt/ivyint/SbtChainResolver.scala
@@ -183,15 +183,11 @@ private[sbt] case class SbtChainResolver(
// Now that we know the real latest revision, let's force Ivy to use it
val artifactOpt = findFirstArtifactRef(rmr.getDescriptor, dd, data, resolver)
artifactOpt match {
- case None if resolver.getName == "inter-project" => // do nothing
- case None if resolver.isInstanceOf[CustomMavenResolver] =>
- // do nothing for now....
- // We want to see if the maven caching is sufficient and we do not need to duplicate within the ivy cache...
- case None => throw new RuntimeException(s"\t${resolver.getName}: no ivy file nor artifact found for $rmr")
case Some(artifactRef) =>
val systemMd = toSystem(rmr.getDescriptor)
getRepositoryCacheManager.cacheModuleDescriptor(resolver, artifactRef,
toSystem(dd), systemMd.getAllArtifacts.head, None.orNull, getCacheOptions(data))
+ case None => // do nothing. There are modules without artifacts
}
rmr
}
diff --git a/notes/0.13.10/fix-snapshots.md b/notes/0.13.10/fix-snapshots.md
new file mode 100644
index 000000000..59e946757
--- /dev/null
+++ b/notes/0.13.10/fix-snapshots.md
@@ -0,0 +1,14 @@
+
+ [@eed3si9n]: https://github.com/eed3si9n
+ [1514]: https://github.com/sbt/sbt/issues/1514
+ [1616]: https://github.com/sbt/sbt/issues/1616
+ [2313]: https://github.com/sbt/sbt/pull/2313
+
+### Fixes with compatibility implications
+
+- Fixes update option's `withLatestSnapshots` so it handles modules without an artifact. This flag will be enabled by default.
+ [#1514][1514]/[#1616][1616]/[#2313][2313] by [@eed3si9n][@eed3si9n]
+
+### Improvements
+
+### Bug fixes
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 6a3d7633b..90f875ec3 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -9,7 +9,7 @@ object Dependencies {
lazy val scala211 = "2.11.7"
lazy val jline = "jline" % "jline" % "2.13"
- lazy val ivy = "org.scala-sbt.ivy" % "ivy" % "2.3.0-sbt-d592b1b0f77cf706e882b1b8e0162dee28165fb2"
+ lazy val ivy = "org.scala-sbt.ivy" % "ivy" % "2.3.0-sbt-2cc8d2761242b072cedb0a04cb39435c4fa24f9a"
lazy val jsch = "com.jcraft" % "jsch" % "0.1.46" intransitive ()
lazy val sbinary = "org.scala-tools.sbinary" %% "sbinary" % "0.4.2"
lazy val sbtSerialization = "org.scala-sbt" %% "serialization" % "0.1.2"
diff --git a/sbt/src/sbt-test/dependency-management/pom-parent-pom/build.sbt b/sbt/src/sbt-test/dependency-management/pom-parent-pom/build.sbt
index d0fb533bb..e190be9b2 100644
--- a/sbt/src/sbt-test/dependency-management/pom-parent-pom/build.sbt
+++ b/sbt/src/sbt-test/dependency-management/pom-parent-pom/build.sbt
@@ -1,44 +1,31 @@
-name := "test-parent-pom"
-
-val localMavenRepo = file("local-repo")
- val cleanExampleCache = taskKey[Unit]("Cleans the example cache.")
-
-resolvers +=
- MavenRepository("Maven2 Local Test", localMavenRepo.toURI.toString)
-
-
-libraryDependencies +=
- "com.example" % "example-child" % "1.0-SNAPSHOT"
-
-libraryDependencies += "org.apache.geronimo.specs" % "geronimo-jta_1.1_spec" % "1.1.1"
-
-version := "1.0-SNAPSHOT"
-
-
-cleanExampleCache := {
- ivySbt.value.withIvy(streams.value.log) { ivy =>
- val cacheDir = ivy.getSettings.getDefaultRepositoryCacheBasedir
- // TODO - Is this actually ok?
- IO.delete(cacheDir / "com.example")
- }
-}
-
val checkIvyXml = taskKey[Unit]("Checks the ivy.xml transform was correct")
+lazy val root = (project in file(".")).
+ settings(
+ name := "test-parent-pom",
+ ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")),
+ resolvers += MavenCache("Maven2 Local Test", baseDirectory.value / "local-repo"),
+ libraryDependencies += "com.example" % "example-child" % "1.0-SNAPSHOT",
+ libraryDependencies += "org.apache.geronimo.specs" % "geronimo-jta_1.1_spec" % "1.1.1",
+ version := "1.0-SNAPSHOT",
+ autoScalaLibrary := false,
+ checkIvyXml := {
+ ivySbt.value.withIvy(streams.value.log) { ivy =>
+ val cacheDir = ivy.getSettings.getDefaultRepositoryCacheBasedir
+ val xmlFile =
+ cacheDir / "org.apache.geronimo.specs" / "geronimo-jta_1.1_spec" / "ivy-1.1.1.xml"
+ val lines = IO.read(xmlFile)
+ if(lines.isEmpty) sys.error(s"Unable to read $xmlFile, could not resolve geronimo...")
+ // Note: We do not do this if the maven plguin is enabled, because there is no rewrite of ivy.xml, extra attribtues
+ // are handled in a different mechanism. This is a hacky mechanism to detect that.
+ val isMavenResolver = updateOptions.value.resolverConverter != PartialFunction.empty
+ if(!isMavenResolver) assert(lines contains "xmlns:e", s"Failed to appropriately modify ivy.xml file for sbt extra attributes!\n$lines")
-
-checkIvyXml := {
- ivySbt.value.withIvy(streams.value.log) { ivy =>
- val cacheDir = ivy.getSettings.getDefaultRepositoryCacheBasedir
- // TODO - Is this actually ok?
- val xmlFile =
- cacheDir / "org.apache.geronimo.specs" / "geronimo-jta_1.1_spec" / "ivy-1.1.1.xml"
- //cacheDir / "com.example" / "example-child" / "ivy-1.0-SNAPSHOT.xml"
- val lines = IO.read(xmlFile)
- if(lines.isEmpty) sys.error(s"Unable to read $xmlFile, could not resolve geronimo...")
- // Note: We do not do this if the maven plguin is enabled, because there is no rewrite of ivy.xml, extra attribtues
- // are handled in a different mechanism. This is a hacky mechanism to detect that.
- val isMavenResolver = updateOptions.value.resolverConverter != PartialFunction.empty
- if(!isMavenResolver) assert(lines contains "xmlns:e", s"Failed to appropriately modify ivy.xml file for sbt extra attributes!\n$lines")
- }
-}
+ val xmlFile2 = cacheDir / "com.example" / "example-child" / "ivy-1.0-SNAPSHOT.xml"
+ val lines2 = IO.read(xmlFile2)
+ if (!isMavenResolver) {
+ assert(lines2 contains "Apache-2.0", s"Failed to roll up license from the parent POM!\n$lines2")
+ }
+ }
+ }
+ )
diff --git a/sbt/src/sbt-test/dependency-management/pom-parent-pom/local-repo/com/example/example-parent/1.0-SNAPSHOT/example-parent-1.0-SNAPSHOT.pom b/sbt/src/sbt-test/dependency-management/pom-parent-pom/local-repo/com/example/example-parent/1.0-SNAPSHOT/example-parent-1.0-SNAPSHOT.pom
index 364d37255..aebdda9d0 100644
--- a/sbt/src/sbt-test/dependency-management/pom-parent-pom/local-repo/com/example/example-parent/1.0-SNAPSHOT/example-parent-1.0-SNAPSHOT.pom
+++ b/sbt/src/sbt-test/dependency-management/pom-parent-pom/local-repo/com/example/example-parent/1.0-SNAPSHOT/example-parent-1.0-SNAPSHOT.pom
@@ -6,5 +6,10 @@
example-parent
1.0-SNAPSHOT
pom
-
+
+
+ Apache-2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
diff --git a/sbt/src/sbt-test/dependency-management/pom-parent-pom/test b/sbt/src/sbt-test/dependency-management/pom-parent-pom/test
index 68a7fec1c..69fa45aff 100644
--- a/sbt/src/sbt-test/dependency-management/pom-parent-pom/test
+++ b/sbt/src/sbt-test/dependency-management/pom-parent-pom/test
@@ -1,3 +1,2 @@
-> cleanExampleCache
> update
> checkIvyXml
diff --git a/sbt/src/sbt-test/dependency-management/snapshot-resolution/build.sbt b/sbt/src/sbt-test/dependency-management/snapshot-resolution/build.sbt
index 0b9106118..4eac19855 100644
--- a/sbt/src/sbt-test/dependency-management/snapshot-resolution/build.sbt
+++ b/sbt/src/sbt-test/dependency-management/snapshot-resolution/build.sbt
@@ -25,8 +25,8 @@ lazy val common = project.
case _ => false // TODO - Handle chain repository?
}
case _ => true
- }),
- updateOptions := updateOptions.value.withLatestSnapshots(true)
+ })
+ // updateOptions := updateOptions.value.withLatestSnapshots(true)
)
lazy val dependent = project.
@@ -37,9 +37,9 @@ lazy val dependent = project.
// Ignore the inter-project resolver, so we force to look remotely.
resolvers += sharedResolver,
fullResolvers := fullResolvers.value.filterNot(_==projectResolver.value),
- libraryDependencies += "com.badexample" % "badexample" % "1.0-SNAPSHOT",
+ libraryDependencies += "com.badexample" % "badexample" % "1.0-SNAPSHOT"
// Setting this to false fails the test
- updateOptions := updateOptions.value.withLatestSnapshots(true)
+ // updateOptions := updateOptions.value.withLatestSnapshots(true)
)
TaskKey[Unit]("dumpResolvers") := {