diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/build.sbt b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/build.sbt new file mode 100644 index 000000000..61edd91f0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/build.sbt @@ -0,0 +1,44 @@ +def customIvyPaths: Seq[Def.Setting[_]] = Seq( + ivyPaths := new IvyPaths((baseDirectory in ThisBuild).value, Some((baseDirectory in ThisBuild).value / "ivy-cache")) +) + +lazy val packageTests = taskKey[File]("package tests") + +lazy val common = project. + settings(customIvyPaths: _*). + settings( + organization := "com.badexample", + name := "badexample", + version := "1.0-SNAPSHOT", + publishTo := { + val p = ivyPaths.value.ivyHome.get + Some(Resolver.file("maven-share-publish", p / "shared").mavenStyle()) + }, + crossVersion := CrossVersion.Disabled, + publishMavenStyle := true, + packageTests in Compile := (packageBin in Test).value, + artifact in (Compile, packageTests) := Artifact(name.value, "tests"), + addArtifact(artifact in (Compile, packageTests), packageTests in Compile) + ) + +lazy val dependent = project. + settings(customIvyPaths: _*). + settings( + // sharedResolver didn't work. + resolvers += { + val p = ivyPaths.value.ivyHome.get + new MavenRepository("maven-share", p.toURL.toString + "/shared") + }, + // Ignore the inter-project resolver, so we force to look remotely. + fullResolvers := fullResolvers.value.filterNot(_==projectResolver.value), + libraryDependencies += "com.badexample" % "badexample" % "1.0-SNAPSHOT" classifier("tests"), + libraryDependencies += "com.badexample" % "badexample" % "1.0-SNAPSHOT" + // updateOptions := updateOptions.value.withLatestSnapshots(true) + ) + +TaskKey[Unit]("dumpResolvers") := { + streams.value.log.info(s" -- dependent/fullResolvers -- ") + (fullResolvers in dependent).value foreach { r => + streams.value.log.info(s" * ${r}") + } +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadCommon.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadCommon.scala new file mode 100644 index 000000000..1165a299e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadCommon.scala @@ -0,0 +1,2 @@ +object Common { +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadTest.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadTest.scala new file mode 100644 index 000000000..e6070835d --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/BadTest.scala @@ -0,0 +1,2 @@ +object Test { +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodCommon.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodCommon.scala new file mode 100644 index 000000000..3f9b39258 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodCommon.scala @@ -0,0 +1,3 @@ +object Common { + def name = "common" +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodTest.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodTest.scala new file mode 100644 index 000000000..8c5ae6df4 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/changes/GoodTest.scala @@ -0,0 +1,3 @@ +object Test { + def name = "test" +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/main/scala/Common.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/main/scala/Common.scala new file mode 100644 index 000000000..d6175ce12 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/main/scala/Common.scala @@ -0,0 +1,3 @@ +object Common { + +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/test/scala/Test.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/test/scala/Test.scala new file mode 100644 index 000000000..e6070835d --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/common/src/test/scala/Test.scala @@ -0,0 +1,2 @@ +object Test { +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/dependent/src/main/scala/User.scala b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/dependent/src/main/scala/User.scala new file mode 100644 index 000000000..b866db1a8 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/dependent/src/main/scala/User.scala @@ -0,0 +1,4 @@ +object User { + println(Common.name) + println(Test.name) +} diff --git a/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/test b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/test new file mode 100644 index 000000000..2f8703a78 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-classifier-resolution/test @@ -0,0 +1,19 @@ +# Validate that a bad dependency fails the compile +$ copy-file changes/BadCommon.scala common/src/main/scala/Common.scala +$ copy-file changes/BadTest.scala common/src/test/scala/Test.scala +> common/publish + +# Force dep resolution to be successful, then compilation to fail +> dependent/update +-> dependent/compile + +# Push new good change. +$ copy-file changes/GoodCommon.scala common/src/main/scala/Common.scala +$ copy-file changes/GoodTest.scala common/src/test/scala/Test.scala +# Sleep to ensure timestamp change +$ sleep 1000 +> common/publish + +# This should compile now. +> dependent/update +> dependent/compile