From fc0a1ccec752d1be4aad075f9de5663da0311338 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 15 Jul 2017 17:19:09 +0200 Subject: [PATCH] Really filter out optional artifacts by default --- .../main/scala/coursier/core/Resolution.scala | 1 + .../test/scala/coursier/test/IvyTests.scala | 6 ++- .../test/scala/coursier/test/MavenTests.scala | 6 ++- tests/metadata | 2 +- .../resolutions/io.monix/monix_2.12/2.3.0 | 8 ++++ .../scala/coursier/test/CentralTests.scala | 43 +++++++++++++++---- 6 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 tests/shared/src/test/resources/resolutions/io.monix/monix_2.12/2.3.0 diff --git a/core/shared/src/main/scala/coursier/core/Resolution.scala b/core/shared/src/main/scala/coursier/core/Resolution.scala index 5030f171a..99609dc9c 100644 --- a/core/shared/src/main/scala/coursier/core/Resolution.scala +++ b/core/shared/src/main/scala/coursier/core/Resolution.scala @@ -1059,6 +1059,7 @@ final case class Resolution( .toSeq artifact <- source .artifacts(dep, proj, overrideClassifiers) + if optional || !artifact.isOptional } yield dep -> artifact def dependencyArtifacts: Seq[(Dependency, Artifact)] = diff --git a/tests/jvm/src/test/scala/coursier/test/IvyTests.scala b/tests/jvm/src/test/scala/coursier/test/IvyTests.scala index 207f460b6..01f679bf0 100644 --- a/tests/jvm/src/test/scala/coursier/test/IvyTests.scala +++ b/tests/jvm/src/test/scala/coursier/test/IvyTests.scala @@ -74,7 +74,8 @@ object IvyTests extends TestSuite { dep = dep, artifactType = "jar", extraRepos = Seq(repo), - classifierOpt = None + classifierOpt = None, + optional = true ) { case Seq(artifact) => assert(artifact.url == mainJarUrl) @@ -86,7 +87,8 @@ object IvyTests extends TestSuite { dep = dep.copy(configuration = "test"), artifactType = "jar", extraRepos = Seq(repo), - classifierOpt = None + classifierOpt = None, + optional = true ) { case Seq(artifact1, artifact2) => val urls = Set( diff --git a/tests/jvm/src/test/scala/coursier/test/MavenTests.scala b/tests/jvm/src/test/scala/coursier/test/MavenTests.scala index 67b0abbd8..93cf7dce1 100644 --- a/tests/jvm/src/test/scala/coursier/test/MavenTests.scala +++ b/tests/jvm/src/test/scala/coursier/test/MavenTests.scala @@ -29,7 +29,8 @@ object MavenTests extends TestSuite { dep = dep, artifactType = "jar", extraRepos = Seq(repo), - classifierOpt = None + classifierOpt = None, + optional = true ) { case Seq(artifact) => assert(artifact.url == mainJarUrl) @@ -41,7 +42,8 @@ object MavenTests extends TestSuite { dep = dep, artifactType = "src", extraRepos = Seq(repo), - classifierOpt = Some("sources") + classifierOpt = Some("sources"), + optional = true ) { case Seq(artifact) => assert(artifact.url == sourcesJarUrl) diff --git a/tests/metadata b/tests/metadata index 9a00b31af..ac3871c92 160000 --- a/tests/metadata +++ b/tests/metadata @@ -1 +1 @@ -Subproject commit 9a00b31af466454fbf2604e871c273ba9c1c9938 +Subproject commit ac3871c925e035157203d6d799a9a2c7c2578d67 diff --git a/tests/shared/src/test/resources/resolutions/io.monix/monix_2.12/2.3.0 b/tests/shared/src/test/resources/resolutions/io.monix/monix_2.12/2.3.0 new file mode 100644 index 000000000..de1bd0c77 --- /dev/null +++ b/tests/shared/src/test/resources/resolutions/io.monix/monix_2.12/2.3.0 @@ -0,0 +1,8 @@ +io.monix:monix-eval_2.12:2.3.0:compile +io.monix:monix-execution_2.12:2.3.0:compile +io.monix:monix-reactive_2.12:2.3.0:compile +io.monix:monix-types_2.12:2.3.0:compile +io.monix:monix_2.12:2.3.0:compile +org.jctools:jctools-core:2.0.1:compile +org.reactivestreams:reactive-streams:1.0.0:compile +org.scala-lang:scala-library:2.12.2:compile \ No newline at end of file diff --git a/tests/shared/src/test/scala/coursier/test/CentralTests.scala b/tests/shared/src/test/scala/coursier/test/CentralTests.scala index cd29d7c91..281b60907 100644 --- a/tests/shared/src/test/scala/coursier/test/CentralTests.scala +++ b/tests/shared/src/test/scala/coursier/test/CentralTests.scala @@ -148,29 +148,32 @@ abstract class CentralTests extends TestSuite { attributes: Attributes = Attributes(), extraRepos: Seq[Repository] = Nil, classifierOpt: Option[String] = None, - transitive: Boolean = false + transitive: Boolean = false, + optional: Boolean = true )( f: Seq[Artifact] => T ): Future[T] = { val dep = Dependency(module, version, transitive = transitive, attributes = attributes) - withArtifacts(dep, artifactType, extraRepos, classifierOpt)(f) + withArtifacts(dep, artifactType, extraRepos, classifierOpt, optional)(f) } def withArtifacts[T]( dep: Dependency, artifactType: String, extraRepos: Seq[Repository], - classifierOpt: Option[String] + classifierOpt: Option[String], + optional: Boolean )( f: Seq[Artifact] => T ): Future[T] = - withArtifacts(Set(dep), artifactType, extraRepos, classifierOpt)(f) + withArtifacts(Set(dep), artifactType, extraRepos, classifierOpt, optional)(f) def withArtifacts[T]( deps: Set[Dependency], artifactType: String, extraRepos: Seq[Repository], - classifierOpt: Option[String] + classifierOpt: Option[String], + optional: Boolean )( f: Seq[Artifact] => T ): Future[T] = async { @@ -181,7 +184,7 @@ abstract class CentralTests extends TestSuite { assert(res.isDone) val artifacts = classifierOpt - .fold(res.dependencyArtifacts)(c => res.dependencyClassifiersArtifacts(Seq(c))) + .fold(res.dependencyArtifacts(withOptional = optional))(c => res.dependencyClassifiersArtifacts(Seq(c))) .map(_._2) .filter { if (artifactType == "*") _ => true @@ -431,7 +434,8 @@ abstract class CentralTests extends TestSuite { ), "jar", extraRepos = Nil, - classifierOpt = None + classifierOpt = None, + optional = true ) { case Seq() => throw new Exception("Expected one JAR") @@ -552,7 +556,7 @@ abstract class CentralTests extends TestSuite { assert(res.conflicts.isEmpty) assert(res.isDone) - val dependencyArtifacts = res.dependencyArtifacts + val dependencyArtifacts = res.dependencyArtifacts(withOptional = true) val zookeeperTestArtifacts = dependencyArtifacts.collect { case (dep, artifact) @@ -778,6 +782,29 @@ abstract class CentralTests extends TestSuite { * - resolutionCheck(mod, ver) } + + 'optionalArtifacts - { + val mod = Module("io.monix", "monix_2.12") + val ver = "2.3.0" + + val mainUrl = "https://repo1.maven.org/maven2/io/monix/monix_2.12/2.3.0/monix_2.12-2.3.0.jar" + + * - resolutionCheck(mod, ver) + + * - { + if (isActualCentral) + withArtifacts(mod, ver, "jar") { artifacts => + val mainArtifactOpt = artifacts.find(_.url == mainUrl) + assert(mainArtifactOpt.nonEmpty) + assert(mainArtifactOpt.forall(_.isOptional)) + } + } + + * - withArtifacts(mod, ver, "jar", optional = false) { artifacts => + val mainArtifactOpt = artifacts.find(_.url == mainUrl) + assert(mainArtifactOpt.isEmpty) + } + } } }