From 464325ad1dbc94e00a6a7107c3a1b0b6f328e370 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 20 Apr 2019 02:31:44 -0400 Subject: [PATCH] add a simpler version of snapshot-resolution Ivy is able to check for SNAPSHOT across different resolvers. Coursier seems to be sticky about the resolver within the TTL (24h). --- .../snapshot-local/build.sbt | 38 +++++++++++++++++++ .../snapshot-local/changes/BadCommon.scala | 2 + .../snapshot-local/changes/GoodCommon.scala | 3 ++ .../common/src/main/scala/Common.scala | 3 ++ .../dependent/src/main/scala/User.scala | 3 ++ .../dependency-management/snapshot-local/test | 21 ++++++++++ .../sbt/scriptedtest/ScriptedTests.scala | 1 + 7 files changed, 71 insertions(+) create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/build.sbt create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/changes/BadCommon.scala create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/changes/GoodCommon.scala create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/common/src/main/scala/Common.scala create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/dependent/src/main/scala/User.scala create mode 100644 sbt/src/sbt-test/dependency-management/snapshot-local/test diff --git a/sbt/src/sbt-test/dependency-management/snapshot-local/build.sbt b/sbt/src/sbt-test/dependency-management/snapshot-local/build.sbt new file mode 100644 index 000000000..d87463465 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/build.sbt @@ -0,0 +1,38 @@ +ThisBuild / organization := "com.example" +ThisBuild / scalaVersion := "2.12.8" + +def customIvyPaths: Seq[Def.Setting[_]] = Seq( + ivyPaths := IvyPaths((baseDirectory in ThisBuild).value, Some((baseDirectory in ThisBuild).value / "ivy-cache")) +) + +lazy val sharedResolver: Resolver = { + val r = Resolver.defaultShared + r withConfiguration (r.configuration withIsLocal false) + //MavenRepository("example-shared-repo", "file:///tmp/shared-maven-repo-bad-example") + //Resolver.file("example-shared-repo", repoDir)(Resolver.defaultPatterns) +} + +lazy val common = project + .settings(customIvyPaths) + .settings( + organization := "com.badexample", + name := "badexample", + version := "1.0-SNAPSHOT", + publishTo := Some(sharedResolver), + crossVersion := Disabled(), + publishMavenStyle := (sharedResolver match { + case repo: PatternsBasedRepository => repo.patterns.isMavenCompatible + case _: RawRepository => false // TODO - look deeper + case _: MavenRepository => true + case _ => false // TODO - Handle chain repository? + }) + ) + +lazy val dependent = project + .settings(customIvyPaths) + .settings( + // 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" + ) diff --git a/sbt/src/sbt-test/dependency-management/snapshot-local/changes/BadCommon.scala b/sbt/src/sbt-test/dependency-management/snapshot-local/changes/BadCommon.scala new file mode 100644 index 000000000..4df4235d5 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/changes/BadCommon.scala @@ -0,0 +1,2 @@ +object Common { +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/snapshot-local/changes/GoodCommon.scala b/sbt/src/sbt-test/dependency-management/snapshot-local/changes/GoodCommon.scala new file mode 100644 index 000000000..3f9b39258 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/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-local/common/src/main/scala/Common.scala b/sbt/src/sbt-test/dependency-management/snapshot-local/common/src/main/scala/Common.scala new file mode 100644 index 000000000..d6175ce12 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/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-local/dependent/src/main/scala/User.scala b/sbt/src/sbt-test/dependency-management/snapshot-local/dependent/src/main/scala/User.scala new file mode 100644 index 000000000..8bc6103c8 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/dependent/src/main/scala/User.scala @@ -0,0 +1,3 @@ +object User { + println(Common.name) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/snapshot-local/test b/sbt/src/sbt-test/dependency-management/snapshot-local/test new file mode 100644 index 000000000..9fa3d37ba --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/snapshot-local/test @@ -0,0 +1,21 @@ +# Ivy is able to check for SNAPSHOT across different resolvers +# Coursier seems to be sticky about the resolver within the TTL + +> show dependent/fullResolvers + +# Validate that a bad dependency fails the compile +$ copy-file changes/BadCommon.scala common/src/main/scala/Common.scala +> common/publishLocal + +# Force dep resolution to be successful, then compilation to fail +> dependent/update +-> dependent/compile + +# Push new good change to the same repository. +$ copy-file changes/GoodCommon.scala common/src/main/scala/Common.scala +$ sleep 1000 +> common/publishLocal + +# This should compile now because Coursier checks for local update +> show dependent/update +> dependent/compile diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index db1727a2a..bc71ce893 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -212,6 +212,7 @@ final class ScriptedTests( case "dependency-management/pom-parent-pom" => LauncherBased // tbd case "dependency-management/publish-to-maven-local-file" => LauncherBased // sbt/Package$ case "dependency-management/snapshot-resolution" => LauncherBased // tbd + case "dependency-management/snapshot-local" => LauncherBased // tbd case "dependency-management/test-artifact" => LauncherBased // sbt/Package$ case "dependency-management/transitive-version-range" => LauncherBased // tbd case "dependency-management/update-sbt-classifiers" => LauncherBased // tbd