From 268ae565f6e81f1c7e4041882990c297269cb249 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Tue, 4 Jun 2013 10:33:23 -0400 Subject: [PATCH] Fix regression in 0.12.3 where artifacts without an explicit configuration wouldn't be listed in ivy.xml. --- ivy/src/main/scala/sbt/Ivy.scala | 29 +++++++------------ .../deliver-artifacts/a/A.java | 3 ++ .../deliver-artifacts/b/B.java | 5 ++++ .../deliver-artifacts/build.sbt | 8 +++-- .../deliver-artifacts/test | 4 ++- 5 files changed, 27 insertions(+), 22 deletions(-) create mode 100644 sbt/src/sbt-test/dependency-management/deliver-artifacts/a/A.java create mode 100644 sbt/src/sbt-test/dependency-management/deliver-artifacts/b/B.java diff --git a/ivy/src/main/scala/sbt/Ivy.scala b/ivy/src/main/scala/sbt/Ivy.scala index 5d30520da..9637c232f 100644 --- a/ivy/src/main/scala/sbt/Ivy.scala +++ b/ivy/src/main/scala/sbt/Ivy.scala @@ -437,10 +437,10 @@ private object IvySbt } } - private def toIvyArtifact(moduleID: ModuleDescriptor, a: Artifact, configurations: Iterable[String]): MDArtifact = + private def toIvyArtifact(moduleID: ModuleDescriptor, a: Artifact, allConfigurations: Iterable[String]): MDArtifact = { val artifact = new MDArtifact(moduleID, a.name, a.`type`, a.extension, null, extra(a, false)) - copyConfigurations(a, artifact.addConfiguration) + copyConfigurations(a, artifact.addConfiguration, allConfigurations) artifact } def getExtraAttributes(revID: ExtendableItem): Map[String,String] = @@ -597,10 +597,13 @@ private object IvySbt dependencyDescriptor } def copyConfigurations(artifact: Artifact, addConfiguration: String => Unit): Unit = - if(artifact.configurations.isEmpty) - addConfiguration("*") - else - artifact.configurations.foreach(c => addConfiguration(c.name)) + copyConfigurations(artifact, addConfiguration, "*" :: Nil) + + private[this] def copyConfigurations(artifact: Artifact, addConfiguration: String => Unit, allConfigurations: Iterable[String]): Unit = + { + val confs = if(artifact.configurations.isEmpty) allConfigurations else artifact.configurations.map(_.name) + confs foreach addConfiguration + } def addOverrides(moduleID: DefaultModuleDescriptor, overrides: Set[ModuleID], matcher: PatternMatcher): Unit = overrides foreach addOverride(moduleID, matcher) @@ -627,7 +630,7 @@ private object IvySbt /** This method is used to add inline artifacts to the provided module. */ def addArtifacts(moduleID: DefaultModuleDescriptor, artifacts: Iterable[Artifact]): Unit = - for(art <- mapArtifacts(moduleID, artifacts.toSeq); c <- art.getConfigurations if c != "*") + for(art <- mapArtifacts(moduleID, artifacts.toSeq); c <- art.getConfigurations) moduleID.addArtifact(c, art) def addConfigurations(mod: DefaultModuleDescriptor, configurations: Iterable[Configuration]): Unit = @@ -637,17 +640,7 @@ private object IvySbt { lazy val allConfigurations = moduleID.getPublicConfigurationsNames for(artifact <- artifacts) yield - { - val configurationStrings: Iterable[String] = - { - val artifactConfigurations = artifact.configurations - if(artifactConfigurations.isEmpty) - allConfigurations - else - artifactConfigurations.map(_.name) - } - toIvyArtifact(moduleID, artifact, configurationStrings) - } + toIvyArtifact(moduleID, artifact, allConfigurations) } diff --git a/sbt/src/sbt-test/dependency-management/deliver-artifacts/a/A.java b/sbt/src/sbt-test/dependency-management/deliver-artifacts/a/A.java new file mode 100644 index 000000000..c668f8fb1 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/deliver-artifacts/a/A.java @@ -0,0 +1,3 @@ +public class A { + public static final int x = 3; +} diff --git a/sbt/src/sbt-test/dependency-management/deliver-artifacts/b/B.java b/sbt/src/sbt-test/dependency-management/deliver-artifacts/b/B.java new file mode 100644 index 000000000..6b0375d92 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/deliver-artifacts/b/B.java @@ -0,0 +1,5 @@ +public final class B { + public static void main(String[] args) { + System.out.println(A.x); + } +} diff --git a/sbt/src/sbt-test/dependency-management/deliver-artifacts/build.sbt b/sbt/src/sbt-test/dependency-management/deliver-artifacts/build.sbt index caec21b61..b95cda3c2 100644 --- a/sbt/src/sbt-test/dependency-management/deliver-artifacts/build.sbt +++ b/sbt/src/sbt-test/dependency-management/deliver-artifacts/build.sbt @@ -1,7 +1,9 @@ -// verifies that a can be published as an ivy.xml file and preserve the extra artifact information, -// such as a classifier lazy val a = project.settings(common: _*).settings( - libraryDependencies := Seq("net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15" intransitive()) + // verifies that a can be published as an ivy.xml file and preserve the extra artifact information, + // such as a classifier + libraryDependencies := Seq("net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15" intransitive()), + // verifies that an artifact without an explicit configuration gets published in all public configurations + artifact in (Compile,packageBin) := Artifact("demo") ) lazy val b = project.settings(common: _*).settings( diff --git a/sbt/src/sbt-test/dependency-management/deliver-artifacts/test b/sbt/src/sbt-test/dependency-management/deliver-artifacts/test index ce76ad583..3e3547aeb 100644 --- a/sbt/src/sbt-test/dependency-management/deliver-artifacts/test +++ b/sbt/src/sbt-test/dependency-management/deliver-artifacts/test @@ -1,2 +1,4 @@ > a/publish-local -> b/update \ No newline at end of file +> b/update +# verify that A's artifact was published and available for B to compile/run against +> b/run \ No newline at end of file