From 2986a3bcbb7df02eccd21c5d1ba192293297d84a Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 7 Mar 2016 11:37:39 +0100 Subject: [PATCH 1/3] Pending test for sbt/sbt#2431 --- .../default-artifact/build.sbt | 12 ++++++++++++ .../default-artifact/pending | 5 +++++ .../default-artifact/repo/a/b/1.0.0/b1.jar | Bin 0 -> 718 bytes .../default-artifact/repo/a/b/1.0.0/b2.jar | Bin 0 -> 718 bytes .../default-artifact/repo/a/b/1.0.0/ivy.xml | 14 ++++++++++++++ 5 files changed, 31 insertions(+) create mode 100644 sbt/src/sbt-test/dependency-management/default-artifact/build.sbt create mode 100644 sbt/src/sbt-test/dependency-management/default-artifact/pending create mode 100644 sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar create mode 100644 sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar create mode 100644 sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt b/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt new file mode 100644 index 000000000..89ca8a589 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt @@ -0,0 +1,12 @@ +resolvers += Resolver.file("buggy", file("repo"))( + Patterns( + ivyPatterns = Seq("[organization]/[module]/[revision]/ivy.xml"), + artifactPatterns = Seq("[organization]/[module]/[revision]/[artifact].[ext]"), + isMavenCompatible = false, + descriptorOptional = true, + skipConsistencyCheck = true + ) +) + +libraryDependencies += "a" % "b" % "1.0.0" % "compile->runtime" artifacts(Artifact("b1", "jar", "jar")) +libraryDependencies += "a" % "b" % "1.0.0" % "test->runtime" artifacts(Artifact("b1", "jar", "jar")) diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/pending b/sbt/src/sbt-test/dependency-management/default-artifact/pending new file mode 100644 index 000000000..cd1752ba7 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/pending @@ -0,0 +1,5 @@ +# Verify that we successfully get the artifacts. +# This project depends on a module for which we cannot generate a "default artifact", +# because no such artifact exists. + +> update \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar new file mode 100644 index 0000000000000000000000000000000000000000..619fa9368613a1a6314479f29f8b0ca95e9930cc GIT binary patch literal 718 zcmWIWW@Zs#;Nak3U=J|yU_b&Q3@i-3t|5-Po_=onzK(vLZmz*0dcJP|PBAci_C0gj z$6HtLBCofu*10q1HwPJ9F@Es$(;3|po@af}YJ2K1axtlX4*Jx+MnuRk#mUIKC}^Xn z!WmJ6Ptwz3#dw$hAW5{cMfv_k+GIt~~lIEjM)M>95sI z5r1_`9X+zXWa>B<)bzcAa+s@ky=LIN#I`{njqtlt@1%0XgF_Gmg?Ca)AW}o7>Idt;nB3Ajc zYBnq^>+eYTDJGpew{nkX*<#MW7LWIEPnF*4^|h3>rTIq0-_q@|FaPYnG$(zx%|-EL zN{4Tro0hg(e3`);uk6i1Q`I*Asd-#j(^Bx`ah72Ixq}r4bZ!+p?D^4qO+QbjL^7IR z>DG&aw;xx&6_sQ8`&YM7J%%|*+4F4EG@iP7Y^|gtN3=F%0IKZ2cNrVBB uc#z`^lz319uB3!)3MhV&Z2-kD0xSkH;jtay&B_LnVgkZiAZ^VA;sF3jz6q58 literal 0 HcmV?d00001 diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar new file mode 100644 index 0000000000000000000000000000000000000000..619fa9368613a1a6314479f29f8b0ca95e9930cc GIT binary patch literal 718 zcmWIWW@Zs#;Nak3U=J|yU_b&Q3@i-3t|5-Po_=onzK(vLZmz*0dcJP|PBAci_C0gj z$6HtLBCofu*10q1HwPJ9F@Es$(;3|po@af}YJ2K1axtlX4*Jx+MnuRk#mUIKC}^Xn z!WmJ6Ptwz3#dw$hAW5{cMfv_k+GIt~~lIEjM)M>95sI z5r1_`9X+zXWa>B<)bzcAa+s@ky=LIN#I`{njqtlt@1%0XgF_Gmg?Ca)AW}o7>Idt;nB3Ajc zYBnq^>+eYTDJGpew{nkX*<#MW7LWIEPnF*4^|h3>rTIq0-_q@|FaPYnG$(zx%|-EL zN{4Tro0hg(e3`);uk6i1Q`I*Asd-#j(^Bx`ah72Ixq}r4bZ!+p?D^4qO+QbjL^7IR z>DG&aw;xx&6_sQ8`&YM7J%%|*+4F4EG@iP7Y^|gtN3=F%0IKZ2cNrVBB uc#z`^lz319uB3!)3MhV&Z2-kD0xSkH;jtay&B_LnVgkZiAZ^VA;sF3jz6q58 literal 0 HcmV?d00001 diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml new file mode 100644 index 000000000..53fe74fc9 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml @@ -0,0 +1,14 @@ + + + a + + + + + + + + + + + From fed478cc6b5f15c7911b94c12c42688cf3115c7e Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 7 Mar 2016 11:44:34 +0100 Subject: [PATCH 2/3] Check that default artifact exists when trying to retrieve it. When concatenating the artifacts coming from two modules, we sometimes attempted to create a default artifact from the organization and name of the module. However, this may fail because a module a % b "1.0" may not have an artifact named "b.jar" (see sbt/sbt#2431). Fixes sbt/sbt#2431. --- ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala | 8 ++++---- .../default-artifact/{pending => test} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename sbt/src/sbt-test/dependency-management/default-artifact/{pending => test} (100%) diff --git a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala index 76bb4d2af..c1010e90f 100644 --- a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala +++ b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala @@ -79,8 +79,8 @@ private final class MergedDescriptors(a: DependencyDescriptor, b: DependencyDesc { if (as.isEmpty) if (bs.isEmpty) as - else defaultArtifact(a) +: explicitConfigurations(b, bs) - else if (bs.isEmpty) explicitConfigurations(a, as) :+ defaultArtifact(b) + else defaultArtifact(a) ++ explicitConfigurations(b, bs) + else if (bs.isEmpty) explicitConfigurations(a, as) ++ defaultArtifact(b) else concat(explicitConfigurations(a, as), explicitConfigurations(b, bs)) } private[this] def explicitConfigurations(base: DependencyDescriptor, arts: Array[DependencyArtifactDescriptor]): Array[DependencyArtifactDescriptor] = @@ -93,11 +93,11 @@ private final class MergedDescriptors(a: DependencyDescriptor, b: DependencyDesc else art } - private[this] def defaultArtifact(a: DependencyDescriptor): DependencyArtifactDescriptor = + private[this] def defaultArtifact(a: DependencyDescriptor): Array[DependencyArtifactDescriptor] = { val dd = new DefaultDependencyArtifactDescriptor(a, a.getDependencyRevisionId.getName, "jar", "jar", null, null) addConfigurations(dd, a.getModuleConfigurations) - dd + a.getAllDependencyArtifacts.filter(_ == dd) } private[this] def copyWithConfigurations(dd: DependencyArtifactDescriptor, confs: Seq[String]): DependencyArtifactDescriptor = { diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/pending b/sbt/src/sbt-test/dependency-management/default-artifact/test similarity index 100% rename from sbt/src/sbt-test/dependency-management/default-artifact/pending rename to sbt/src/sbt-test/dependency-management/default-artifact/test From 1e96936c08c3032e329cf04d21f3b0f2ed691b80 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 14 Mar 2016 08:51:25 +0100 Subject: [PATCH 3/3] Create default artifact for deps from POM files Dependency descriptors that are created from POM files do not specify their artifacts. In those cases, it is correct to create a default artifact. --- ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala index c1010e90f..413583066 100644 --- a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala +++ b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala @@ -97,7 +97,10 @@ private final class MergedDescriptors(a: DependencyDescriptor, b: DependencyDesc { val dd = new DefaultDependencyArtifactDescriptor(a, a.getDependencyRevisionId.getName, "jar", "jar", null, null) addConfigurations(dd, a.getModuleConfigurations) - a.getAllDependencyArtifacts.filter(_ == dd) + // If the dependency descriptor is empty, then it means that it has been created from a POM file. In this case, + // it is correct to create a seemingly non-existent dependency artifact. + if (a.getAllDependencyArtifacts.isEmpty) Array(dd) + else a.getAllDependencyArtifacts filter (_ == dd) } private[this] def copyWithConfigurations(dd: DependencyArtifactDescriptor, confs: Seq[String]): DependencyArtifactDescriptor = {