From 9d300fe3b3b7559ec211f46f4e7e492b6f9c82fb Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 22 Apr 2017 15:22:43 +0200 Subject: [PATCH] Publish sources / javadoc under the right conf Before that commit, sources / javadoc were put under the "compile" config when running "publishLocal". This commit puts them under the "sources" and "docs" configs. --- .../src/main/scala-2.10/coursier/Tasks.scala | 63 ++++++++++++++--- .../build.sbt | 68 +++++++++++++++++++ .../project/plugins.sbt | 11 +++ .../publish-local-sources-javadoc-conf/test | 2 + 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/build.sbt create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/project/plugins.sbt create mode 100644 sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/test diff --git a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala index 62a5d538b..23883a39c 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala @@ -158,21 +158,68 @@ object Tasks { sbt.Keys.ivyConfigurations ).map { (state, projectRef, projId, sv, sbv, ivyConfs) => - val packageTasks = Seq(packageBin, packageSrc, packageDoc) + val sbtBinArtifacts = + for ((config, targetConfig) <- configsMap) yield { + + val publish = publishArtifact + .in(projectRef) + .in(packageBin) + .in(config) + .getOrElse(state, false) - val sbtArtifacts = - for { - pkgTask <- packageTasks - (config, targetConfig) <- configsMap - } yield { - val publish = publishArtifact.in(projectRef).in(pkgTask).in(config).getOrElse(state, false) if (publish) - artifact.in(projectRef).in(pkgTask).in(config).find(state) + artifact + .in(projectRef) + .in(packageBin) + .in(config) + .find(state) .map(targetConfig -> _) else None } + val sbtSourceArtifacts = + for ((config, _) <- configsMap) yield { + + val publish = publishArtifact + .in(projectRef) + .in(packageSrc) + .in(config) + .getOrElse(state, false) + + if (publish) + artifact + .in(projectRef) + .in(packageSrc) + .in(config) + .find(state) + .map("sources" -> _) + else + None + } + + val sbtDocArtifacts = + for ((config, _) <- configsMap) yield { + + val publish = publishArtifact + .in(projectRef) + .in(packageDoc) + .in(config) + .getOrElse(state, false) + + if (publish) + artifact + .in(projectRef) + .in(packageDoc) + .in(config) + .find(state) + .map("docs" -> _) + else + None + } + + val sbtArtifacts = sbtBinArtifacts ++ sbtSourceArtifacts ++ sbtDocArtifacts + def artifactPublication(artifact: sbt.Artifact) = { val name = FromSbt.sbtCrossVersionName( diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/build.sbt new file mode 100644 index 000000000..ad77e0f29 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/build.sbt @@ -0,0 +1,68 @@ + +val org = "io.get-coursier.scriptedtest" +val ver = "0.1.0-SNAPSHOT" + +lazy val foo = project + .settings( + shared + ) + +lazy val bar = project + .settings( + shared, + libraryDependencies += org %% "foo" % ver + ) + + +lazy val shared = Seq( + organization := org, + version := ver, + scalaVersion := "2.11.8", + confCheck := { + + val updateReport = update.value + val updateClassifiersReport = updateClassifiers.value + + def artifacts(config: String, classifier: Option[String], useClassifiersReport: Boolean = false) = { + + val configReport = (if (useClassifiersReport) updateClassifiersReport else updateReport) + .configuration(config) + .getOrElse { + throw new Exception( + s"$config configuration not found in update report" + ) + } + + val artifacts = configReport + .modules + .flatMap(_.artifacts) + .collect { + case (a, _) if a.classifier == classifier => + a + } + + streams.value.log.info( + s"Found ${artifacts.length} artifacts for config $config / classifier $classifier" + + (if (useClassifiersReport) " in classifiers report" else "") + ) + for (a <- artifacts) + streams.value.log.info(" " + a) + + artifacts + } + + val compileSourceArtifacts = artifacts("compile", Some("sources")) + val sourceArtifacts = artifacts("compile", Some("sources"), useClassifiersReport = true) + + val compileDocArtifacts = artifacts("compile", Some("javadoc")) + val docArtifacts = artifacts("compile", Some("javadoc"), useClassifiersReport = true) + + assert(compileSourceArtifacts.isEmpty) + assert(sourceArtifacts.length == 2) + assert(compileDocArtifacts.isEmpty) + assert(docArtifacts.length == 2) + } +) + + +lazy val confCheck = TaskKey[Unit]("confCheck") diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/project/plugins.sbt new file mode 100644 index 000000000..8d902e4dc --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/project/plugins.sbt @@ -0,0 +1,11 @@ +{ + val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin + ) + ) + + addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion) +} \ No newline at end of file diff --git a/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/test b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/test new file mode 100644 index 000000000..6df8db773 --- /dev/null +++ b/sbt-coursier/src/sbt-test/sbt-coursier/publish-local-sources-javadoc-conf/test @@ -0,0 +1,2 @@ +> foo/publishLocal +> bar/confCheck