From f8c05d570ba8ee1d00c06148adbc9ca029e43f22 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:47 +0200 Subject: [PATCH 01/21] Dummy renaming in build --- build.sbt | 2 +- project/{CoursierSettings.scala => Settings.scala} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename project/{CoursierSettings.scala => Settings.scala} (99%) diff --git a/build.sbt b/build.sbt index a854bb232..68253c46f 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ import Aliases._ -import CoursierSettings._ +import Settings._ import Publish._ parallelExecution.in(Global) := false diff --git a/project/CoursierSettings.scala b/project/Settings.scala similarity index 99% rename from project/CoursierSettings.scala rename to project/Settings.scala index 2d8d406e3..565b75045 100644 --- a/project/CoursierSettings.scala +++ b/project/Settings.scala @@ -11,7 +11,7 @@ import xerial.sbt.Pack.{packAutoSettings, packExcludeArtifactTypes} import Aliases._ -object CoursierSettings { +object Settings { lazy val scalazBintrayRepository = { resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases" From 89c3b3544dc47ea539b642c19c8eadf8f9fbc7e3 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:48 +0200 Subject: [PATCH 02/21] Don't create too visible empty directories during build --- build.sbt | 4 +++- project/Aliases.scala | 6 ++++++ project/Settings.scala | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 68253c46f..d25c2fd64 100644 --- a/build.sbt +++ b/build.sbt @@ -137,7 +137,7 @@ lazy val web = project if (scalaBinaryVersion.value == "2.11") dir else - dir / "dummy" + dir / "target" / "dummy" }, noTests, webjarBintrayRepository, @@ -226,6 +226,7 @@ lazy val echo = project .settings(shared) lazy val jvm = project + .dummy .aggregate( coreJvm, testsJvm, @@ -248,6 +249,7 @@ lazy val jvm = project ) lazy val js = project + .dummy .aggregate( coreJs, `fetch-js`, diff --git a/project/Aliases.scala b/project/Aliases.scala index 838db5c9c..84a1967b6 100644 --- a/project/Aliases.scala +++ b/project/Aliases.scala @@ -18,4 +18,10 @@ object Aliases { def ShadingPlugin = coursier.ShadingPlugin + + implicit class ProjectOps(val proj: Project) extends AnyVal { + def dummy: Project = + proj.in(file(s"target/${proj.id}")) + } + } diff --git a/project/Settings.scala b/project/Settings.scala index 565b75045..fd5de4ad3 100644 --- a/project/Settings.scala +++ b/project/Settings.scala @@ -162,7 +162,7 @@ object Settings { if (sbtScalaVersionMatch.value) baseDirectory.value else - baseDirectory.value / "dummy" + baseDirectory.value / "target" / "dummy" }, publish := { if (sbtScalaVersionMatch.value) From 9c7168fbc7f65895112c436133806813e469ff32 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:48 +0200 Subject: [PATCH 03/21] Add alias --- build.sbt | 2 +- project/Aliases.scala | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index d25c2fd64..dd406499b 100644 --- a/build.sbt +++ b/build.sbt @@ -263,7 +263,7 @@ lazy val js = project ) lazy val coursier = project - .in(file(".")) + .in(root) .aggregate( coreJvm, coreJs, diff --git a/project/Aliases.scala b/project/Aliases.scala index 84a1967b6..342915c93 100644 --- a/project/Aliases.scala +++ b/project/Aliases.scala @@ -18,6 +18,8 @@ object Aliases { def ShadingPlugin = coursier.ShadingPlugin + def root = file(".") + implicit class ProjectOps(val proj: Project) extends AnyVal { def dummy: Project = From 5ca736b87a4048a0a2e432add12c1d3118566db8 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:48 +0200 Subject: [PATCH 04/21] Move property file under coursier namespace Should make it move along the rest when shading coursier --- .../main/scala/coursier/util/Properties.scala | 2 +- project/Settings.scala | 4 ++-- .../scala/coursier/test/PropertiesTests.scala | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/jvm/src/test/scala/coursier/test/PropertiesTests.scala diff --git a/core/jvm/src/main/scala/coursier/util/Properties.scala b/core/jvm/src/main/scala/coursier/util/Properties.scala index d521c1ed7..a742e6e53 100644 --- a/core/jvm/src/main/scala/coursier/util/Properties.scala +++ b/core/jvm/src/main/scala/coursier/util/Properties.scala @@ -9,7 +9,7 @@ object Properties { p.load( getClass .getClassLoader - .getResourceAsStream("coursier.properties") + .getResourceAsStream("coursier/coursier.properties") ) p } diff --git a/project/Settings.scala b/project/Settings.scala index fd5de4ad3..99ed26085 100644 --- a/project/Settings.scala +++ b/project/Settings.scala @@ -73,12 +73,12 @@ object Settings { resourceGenerators.in(Compile) += Def.task { import sys.process._ - val dir = target.value + val dir = classDirectory.in(Compile).value / "coursier" val ver = version.value val f = dir / "coursier.properties" dir.mkdirs() - + val p = new java.util.Properties p.setProperty("version", ver) diff --git a/tests/jvm/src/test/scala/coursier/test/PropertiesTests.scala b/tests/jvm/src/test/scala/coursier/test/PropertiesTests.scala new file mode 100644 index 000000000..c2b261ae9 --- /dev/null +++ b/tests/jvm/src/test/scala/coursier/test/PropertiesTests.scala @@ -0,0 +1,19 @@ +package coursier.test + +import coursier.util.Properties +import utest._ + +object PropertiesTests extends TestSuite { + + val tests = TestSuite { + + 'version - { + assert(Properties.version.nonEmpty) + } + + 'commitHash - { + assert(Properties.commitHash.nonEmpty) + } + } + +} From 2f350e058bdddc9275e68e5f6c4d9f8db0e63168 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:49 +0200 Subject: [PATCH 05/21] Add sbt-updates --- project/plugins.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/project/plugins.sbt b/project/plugins.sbt index f7a424eea..d12edca13 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -10,6 +10,7 @@ plugins_( "org.scoverage" % "sbt-scoverage" % "1.4.0", "io.get-coursier" % "sbt-shading" % coursierVersion, "org.xerial.sbt" % "sbt-sonatype" % "1.1", + "com.timushev.sbt" % "sbt-updates" % "0.3.0", "org.tpolecat" % "tut-plugin" % "0.4.8" ) From f62a110cfaa12765b91483ef37fea3be70843399 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:49 +0200 Subject: [PATCH 06/21] Bump dependencies --- build.sbt | 2 +- .../src/main/scala/coursier/HttpServer.scala | 24 +++++++++---------- project/CrossDeps.scala | 4 ++-- project/Deps.scala | 10 ++++---- project/SharedVersions.scala | 8 +++---- .../coursier_2.11/1.0.0-SNAPSHOT | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/build.sbt b/build.sbt index dd406499b..e8f93af4b 100644 --- a/build.sbt +++ b/build.sbt @@ -308,7 +308,7 @@ lazy val addBootstrapInProguardedJar = { } lazy val proguardedCli = Seq( - ProguardKeys.proguardVersion.in(Proguard) := "5.3", + ProguardKeys.proguardVersion.in(Proguard) := SharedVersions.proguard, ProguardKeys.options.in(Proguard) ++= Seq( "-dontwarn", "-keep class coursier.cli.Coursier {\n public static void main(java.lang.String[]);\n}", diff --git a/http-server/src/main/scala/coursier/HttpServer.scala b/http-server/src/main/scala/coursier/HttpServer.scala index 6ae36dd71..4c5ee8ada 100644 --- a/http-server/src/main/scala/coursier/HttpServer.scala +++ b/http-server/src/main/scala/coursier/HttpServer.scala @@ -19,13 +19,13 @@ import scalaz.concurrent.Task final case class AuthOptions( @ExtraName("u") @ValueDescription("user") - user: String, + user: String = "", @ExtraName("P") @ValueDescription("password") - password: String, + password: String = "", @ExtraName("r") @ValueDescription("realm") - realm: String + realm: String = "" ) { def checks(): Unit = { if (user.nonEmpty && password.isEmpty) @@ -50,21 +50,21 @@ final case class AuthOptions( final case class VerbosityOptions( @ExtraName("v") - verbose: Int @@ Counter, + verbose: Int @@ Counter = Tag.of(0), @ExtraName("q") - quiet: Boolean + quiet: Boolean = false ) { lazy val verbosityLevel = Tag.unwrap(verbose) - (if (quiet) 1 else 0) } final case class HttpServerOptions( @Recurse - auth: AuthOptions, + auth: AuthOptions = AuthOptions(), @Recurse - verbosity: VerbosityOptions, + verbosity: VerbosityOptions = VerbosityOptions(), @ExtraName("d") @ValueDescription("served directory") - directory: String, + directory: String = ".", @ExtraName("h") @ValueDescription("host") host: String = "0.0.0.0", @@ -72,15 +72,15 @@ final case class HttpServerOptions( @ValueDescription("port") port: Int = 8080, @ExtraName("s") - acceptPost: Boolean, + acceptPost: Boolean = false, @ExtraName("t") - acceptPut: Boolean, + acceptPut: Boolean = false, @ExtraName("w") @HelpMessage("Accept write requests. Equivalent to -s -t") - acceptWrite: Boolean, + acceptWrite: Boolean = false, @ExtraName("l") @HelpMessage("Generate content listing pages for directories") - listPages: Boolean + listPages: Boolean = false ) object HttpServer { diff --git a/project/CrossDeps.scala b/project/CrossDeps.scala index 863d2bd1d..04cf9e3a8 100644 --- a/project/CrossDeps.scala +++ b/project/CrossDeps.scala @@ -13,8 +13,8 @@ object CrossDeps { def fastParse = setting("com.lihaoyi" %%% "fastparse" % "0.4.2") def scalazCore = setting("org.scalaz" %%% "scalaz-core" % SharedVersions.scalaz) - def scalaJsDom = setting("org.scala-js" %%% "scalajs-dom" % "0.9.1") - def utest = setting("com.lihaoyi" %%% "utest" % "0.4.5") + def scalaJsDom = setting("org.scala-js" %%% "scalajs-dom" % "0.9.2") + def utest = setting("com.lihaoyi" %%% "utest" % "0.4.7") def scalaJsJquery = setting("be.doeraene" %%% "scalajs-jquery" % "0.9.1") def scalaJsReact = setting("com.github.japgolly.scalajs-react" %%% "core" % "0.9.0") } diff --git a/project/Deps.scala b/project/Deps.scala index d85772737..ababae96a 100644 --- a/project/Deps.scala +++ b/project/Deps.scala @@ -10,14 +10,14 @@ object Deps { def scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.6" def scalazConcurrent = "org.scalaz" %% "scalaz-concurrent" % SharedVersions.scalaz def caseApp = "com.github.alexarchambault" %% "case-app" % "1.1.3" - def caseApp12 = "com.github.alexarchambault" %% "case-app" % "1.2.0-M2" + def caseApp12 = "com.github.alexarchambault" %% "case-app" % "1.2.0-M3" def http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % SharedVersions.http4s def http4sDsl = "org.http4s" %% "http4s-dsl" % SharedVersions.http4s - def slf4jNop = "org.slf4j" % "slf4j-nop" % "1.7.22" + def slf4jNop = "org.slf4j" % "slf4j-nop" % "1.7.25" def okhttpUrlConnection = "com.squareup.okhttp" % "okhttp-urlconnection" % "2.7.5" def sbtLauncherInterface = "org.scala-sbt" % "launcher-interface" % "1.0.0" def typesafeConfig = "com.typesafe" % "config" % "1.3.1" - def argonautShapeless = "com.github.alexarchambault" %% "argonaut-shapeless_6.2" % "1.2.0-M4" + def argonautShapeless = "com.github.alexarchambault" %% "argonaut-shapeless_6.2" % "1.2.0-M5" def scalaAsync = Def.setting { @@ -56,6 +56,6 @@ object Deps { "com.google.code.findbugs" % "jsr305" % "2.0.2", "org.ow2.asm" % "asm-commons" % "5.0.3", "org.ow2.asm" % "asm-util" % "5.0.3", - "org.slf4j" % "slf4j-api" % "1.7.12" + "org.slf4j" % "slf4j-api" % "1.7.25" ) -} \ No newline at end of file +} diff --git a/project/SharedVersions.scala b/project/SharedVersions.scala index 1eecde8b2..0d282b606 100644 --- a/project/SharedVersions.scala +++ b/project/SharedVersions.scala @@ -1,8 +1,8 @@ object SharedVersions { - val scalaz = "7.2.8" + def http4s = "0.15.12a" + def proguard = "5.3.3" + def scalaz = "7.2.12" - val http4s = "0.15.9a" - -} \ No newline at end of file +} diff --git a/tests/shared/src/test/resources/resolutions/io.get-coursier/coursier_2.11/1.0.0-SNAPSHOT b/tests/shared/src/test/resources/resolutions/io.get-coursier/coursier_2.11/1.0.0-SNAPSHOT index eee9def25..2176051fe 100644 --- a/tests/shared/src/test/resources/resolutions/io.get-coursier/coursier_2.11/1.0.0-SNAPSHOT +++ b/tests/shared/src/test/resources/resolutions/io.get-coursier/coursier_2.11/1.0.0-SNAPSHOT @@ -1,4 +1,4 @@ io.get-coursier:coursier_2.11:1.0.0-SNAPSHOT:compile org.scala-lang:scala-library:2.11.11:default org.scala-lang.modules:scala-xml_2.11:1.0.6:default -org.scalaz:scalaz-core_2.11:7.2.8:default +org.scalaz:scalaz-core_2.11:7.2.12:default From 763106bf9639309ad59a9e0a92d8d17f943bd26e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:49 +0200 Subject: [PATCH 07/21] Switch to tut 0.5.1 --- build.sbt | 2 +- project/plugins.sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index e8f93af4b..313b35946 100644 --- a/build.sbt +++ b/build.sbt @@ -163,10 +163,10 @@ lazy val web = project lazy val doc = project .dependsOn(coreJvm, cache) + .enablePlugins(TutPlugin) .settings( shared, dontPublish, - tutSettings, tutSourceDirectory := baseDirectory.value, tutTargetDirectory := baseDirectory.in(LocalRootProject).value ) diff --git a/project/plugins.sbt b/project/plugins.sbt index d12edca13..29d0b968f 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -11,7 +11,7 @@ plugins_( "io.get-coursier" % "sbt-shading" % coursierVersion, "org.xerial.sbt" % "sbt-sonatype" % "1.1", "com.timushev.sbt" % "sbt-updates" % "0.3.0", - "org.tpolecat" % "tut-plugin" % "0.4.8" + "org.tpolecat" % "tut-plugin" % "0.5.1" ) libs ++= Seq( From 95289d96571728a32755a30b03e2bcf58f0a9712 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:50 +0200 Subject: [PATCH 08/21] Rename CONTRIBUTING.md to DEVELOP.md So that it doesn't appear as recommended reading before submitting PRs --- CONTRIBUTING.md => DEVELOP.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CONTRIBUTING.md => DEVELOP.md (100%) diff --git a/CONTRIBUTING.md b/DEVELOP.md similarity index 100% rename from CONTRIBUTING.md rename to DEVELOP.md From 70dad11384e690924027b75dc79e5575076d4c89 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:50 +0200 Subject: [PATCH 09/21] Enable sbt-updates for plugins --- project/Release.scala | 4 +++- project/project/plugins.sbt | 1 + project/project/project/plugins.sbt | 7 +++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 project/project/project/plugins.sbt diff --git a/project/Release.scala b/project/Release.scala index 911ecb3c1..f648a9a73 100644 --- a/project/Release.scala +++ b/project/Release.scala @@ -205,10 +205,12 @@ object Release { val baseDir = Project.extract(state).get(baseDirectory.in(ThisBuild)) val pluginsSbtFile = baseDir / "project" / "plugins.sbt" val projectPluginsSbtFile = baseDir / "project" / "project" / "plugins.sbt" + val projectProjectPluginsSbtFile = baseDir / "project" / "project" / "project" / "plugins.sbt" val files = Seq( pluginsSbtFile, - projectPluginsSbtFile + projectPluginsSbtFile, + projectProjectPluginsSbtFile ) for (f <- files) { diff --git a/project/project/plugins.sbt b/project/project/plugins.sbt index e16dcc4f4..728662586 100644 --- a/project/project/plugins.sbt +++ b/project/project/plugins.sbt @@ -1,4 +1,5 @@ addSbtPlugin("io.get-coursier" % "sbt-coursier" % coursierVersion) +addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.3.0") // important: this line is matched / substituted during releases (via sbt-release) def coursierVersion = "1.0.0-RC3" diff --git a/project/project/project/plugins.sbt b/project/project/project/plugins.sbt new file mode 100644 index 000000000..e16dcc4f4 --- /dev/null +++ b/project/project/project/plugins.sbt @@ -0,0 +1,7 @@ +addSbtPlugin("io.get-coursier" % "sbt-coursier" % coursierVersion) + +// important: this line is matched / substituted during releases (via sbt-release) +def coursierVersion = "1.0.0-RC3" + +// required for just released things +resolvers += Resolver.sonatypeRepo("releases") From 7c7f236bcc8a07a42e7c4c5c5007dd74132decef Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:50 +0200 Subject: [PATCH 10/21] Bump plugins --- project/plugins.sbt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 29d0b968f..e6a9de864 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,11 +1,11 @@ plugins_( "io.get-coursier" % "sbt-coursier" % coursierVersion, - "com.typesafe" % "sbt-mima-plugin" % "0.1.13", + "com.typesafe" % "sbt-mima-plugin" % "0.1.14", "org.xerial.sbt" % "sbt-pack" % "0.8.2", - "com.jsuereth" % "sbt-pgp" % "1.0.0", - "com.typesafe.sbt" % "sbt-proguard" % "0.2.2", - "com.github.gseitz" % "sbt-release" % "1.0.4", + "com.jsuereth" % "sbt-pgp" % "1.0.1", + "com.typesafe.sbt" % "sbt-proguard" % "0.2.3", + "com.github.gseitz" % "sbt-release" % "1.0.5", "org.scala-js" % "sbt-scalajs" % "0.6.16", "org.scoverage" % "sbt-scoverage" % "1.4.0", "io.get-coursier" % "sbt-shading" % coursierVersion, From 3656389fffdcc697034924aa33da27604e86640e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:51 +0200 Subject: [PATCH 11/21] Only compile sbt-launcher module in 2.11 So that we don't have to wait on its dependencies to add preliminary support for scala 2.13 --- build.sbt | 16 +++++++++++----- .../coursier/sbtlauncher/AppConfiguration.scala | 0 .../coursier/sbtlauncher/AppProvider.scala | 0 .../coursier/sbtlauncher/ApplicationID.scala | 0 .../coursier/sbtlauncher/ComponentProvider.scala | 0 .../coursier/sbtlauncher/DummyGlobalLock.scala | 0 .../coursier/sbtlauncher/Launcher.scala | 0 .../coursier/sbtlauncher/MainApp.scala | 0 .../coursier/sbtlauncher/Repository.scala | 0 .../coursier/sbtlauncher/SbtConfig.scala | 0 .../coursier/sbtlauncher/ScalaProvider.scala | 0 11 files changed, 11 insertions(+), 5 deletions(-) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/AppConfiguration.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/AppProvider.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/ApplicationID.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/ComponentProvider.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/DummyGlobalLock.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/Launcher.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/MainApp.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/Repository.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/SbtConfig.scala (100%) rename sbt-launcher/src/main/{scala => scala-2.11}/coursier/sbtlauncher/ScalaProvider.scala (100%) diff --git a/build.sbt b/build.sbt index 313b35946..be20db5fe 100644 --- a/build.sbt +++ b/build.sbt @@ -194,11 +194,17 @@ lazy val `sbt-launcher` = project .settings( shared, generatePack, - libs ++= Seq( - Deps.caseApp, - Deps.sbtLauncherInterface, - Deps.typesafeConfig - ) + dontPublishIn("2.10", "2.12"), + libs ++= { + if (scalaBinaryVersion.value == "2.11") + Seq( + Deps.caseApp, + Deps.sbtLauncherInterface, + Deps.typesafeConfig + ) + else + Nil + } ) lazy val `http-server` = project diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/AppConfiguration.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/AppConfiguration.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/AppConfiguration.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/AppConfiguration.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/AppProvider.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/AppProvider.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/AppProvider.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/AppProvider.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/ApplicationID.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ApplicationID.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/ApplicationID.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ApplicationID.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/ComponentProvider.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ComponentProvider.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/ComponentProvider.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ComponentProvider.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/DummyGlobalLock.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/DummyGlobalLock.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/DummyGlobalLock.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/DummyGlobalLock.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/Launcher.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/Launcher.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/MainApp.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/MainApp.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/MainApp.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/MainApp.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/Repository.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Repository.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/Repository.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Repository.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/SbtConfig.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/SbtConfig.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/SbtConfig.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/SbtConfig.scala diff --git a/sbt-launcher/src/main/scala/coursier/sbtlauncher/ScalaProvider.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ScalaProvider.scala similarity index 100% rename from sbt-launcher/src/main/scala/coursier/sbtlauncher/ScalaProvider.scala rename to sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/ScalaProvider.scala From 203e3fd477a7636b012da0b03a088be9c2a2958b Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:51 +0200 Subject: [PATCH 12/21] Only compile http-server module in 2.12 So that we don't have to wait on its dependencies to add preliminary support for scala 2.13 --- appveyor.yml | 3 ++- build.sbt | 18 ++++++++++++------ .../coursier/HttpServer.scala | 0 scripts/launch-test-repo.sh | 4 ++-- scripts/start-it-auth-server.ps1 | 2 +- scripts/start-it-no-listing-server.ps1 | 2 +- scripts/travis.sh | 4 +++- 7 files changed, 21 insertions(+), 12 deletions(-) rename http-server/src/main/{scala => scala-2.12}/coursier/HttpServer.scala (100%) diff --git a/appveyor.yml b/appveyor.yml index 1e2c1663a..2c5375ac4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -22,7 +22,8 @@ install: Set-Location -Path .. } build_script: - - sbt ++2.11.11 clean compile coreJVM/publishLocal http-server/publishLocal + - sbt ++2.11.11 clean compile coreJVM/publishLocal + - sbt ++2.12.1 http-server/publishLocal - sbt ++2.10.6 clean compile - sbt ++2.12.1 coreJVM/publishLocal cache/publishLocal extra/publishLocal # to make the scripted sbt 1.0 tests happy - sbt ++2.10.6 coreJVM/publishLocal cache/publishLocal extra/publishLocal # to make the scripted sbt 0.13 tests happy diff --git a/build.sbt b/build.sbt index be20db5fe..cf2c62d33 100644 --- a/build.sbt +++ b/build.sbt @@ -212,12 +212,18 @@ lazy val `http-server` = project shared, generatePack, name := "http-server", - libs ++= Seq( - Deps.http4sBlazeServer, - Deps.http4sDsl, - Deps.slf4jNop, - Deps.caseApp12 - ) + dontPublishIn("2.10", "2.11"), + libs ++= { + if (scalaBinaryVersion.value == "2.12") + Seq( + Deps.http4sBlazeServer, + Deps.http4sDsl, + Deps.slf4jNop, + Deps.caseApp12 + ) + else + Nil + } ) lazy val okhttp = project diff --git a/http-server/src/main/scala/coursier/HttpServer.scala b/http-server/src/main/scala-2.12/coursier/HttpServer.scala similarity index 100% rename from http-server/src/main/scala/coursier/HttpServer.scala rename to http-server/src/main/scala-2.12/coursier/HttpServer.scala diff --git a/scripts/launch-test-repo.sh b/scripts/launch-test-repo.sh index fca2ec105..fa6e55ddb 100755 --- a/scripts/launch-test-repo.sh +++ b/scripts/launch-test-repo.sh @@ -8,11 +8,11 @@ cd "$(dirname "$0")/.." # synchronously fill cache so that two runs of this script don't try to download # a same file at the same time (and one of them fail because of locks) ./coursier fetch \ - "io.get-coursier:http-server_2.11:$VERSION" \ + "io.get-coursier:http-server_2.12:$VERSION" \ -r https://dl.bintray.com/scalaz/releases ./coursier launch \ - "io.get-coursier:http-server_2.11:$VERSION" \ + "io.get-coursier:http-server_2.12:$VERSION" \ -- \ -d tests/jvm/src/test/resources/test-repo/http/abc.com \ -u user -P pass -r realm \ diff --git a/scripts/start-it-auth-server.ps1 b/scripts/start-it-auth-server.ps1 index d1c8456c9..6719c3b91 100644 --- a/scripts/start-it-auth-server.ps1 +++ b/scripts/start-it-auth-server.ps1 @@ -1,3 +1,3 @@ # see https://stackoverflow.com/questions/2224350/powershell-start-job-working-directory/2246542#2246542 Set-Location $args[0] -& java -jar -noverify coursier launch io.get-coursier:http-server_2.11:1.0.0-SNAPSHOT -- -d tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm --port 8080 --list-pages -v +& java -jar -noverify coursier launch io.get-coursier:http-server_2.12:1.0.0-SNAPSHOT -- -d tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm --port 8080 --list-pages -v diff --git a/scripts/start-it-no-listing-server.ps1 b/scripts/start-it-no-listing-server.ps1 index 8d0275bc1..b0a1c180f 100644 --- a/scripts/start-it-no-listing-server.ps1 +++ b/scripts/start-it-no-listing-server.ps1 @@ -1,3 +1,3 @@ # see https://stackoverflow.com/questions/2224350/powershell-start-job-working-directory/2246542#2246542 Set-Location $args[0] -& java -jar -noverify coursier launch io.get-coursier:http-server_2.11:1.0.0-SNAPSHOT -- -d tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm --port 8081 -v +& java -jar -noverify coursier launch io.get-coursier:http-server_2.12:1.0.0-SNAPSHOT -- -d tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm --port 8081 -v diff --git a/scripts/travis.sh b/scripts/travis.sh index b81098d0d..5084f56d3 100755 --- a/scripts/travis.sh +++ b/scripts/travis.sh @@ -26,7 +26,9 @@ launchTestRepo() { integrationTestsRequirements() { # Required for ~/.ivy2/local repo tests - sbt ++2.11.11 coreJVM/publishLocal http-server/publishLocal + sbt ++2.11.11 coreJVM/publishLocal + + sbt ++2.12.1 http-server/publishLocal # Required for HTTP authentication tests launchTestRepo --port 8080 --list-pages From 72fa824f36545c516295e854bc2d1d19ee550a7a Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:51 +0200 Subject: [PATCH 13/21] Tweak tag step in sbt-release process --- project/Release.scala | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/project/Release.scala b/project/Release.scala index f648a9a73..beb6cd1d0 100644 --- a/project/Release.scala +++ b/project/Release.scala @@ -5,6 +5,7 @@ import java.util.regex.Pattern import com.typesafe.sbt.pgp.PgpKeys import sbt._ import sbt.Keys._ +import sbt.Package.ManifestAttributes import sbtrelease.ReleasePlugin.autoImport._ import sbtrelease.ReleasePlugin.autoImport.ReleaseTransformations._ @@ -257,6 +258,40 @@ object Release { } ) + val addReleaseToManifest = ReleaseStep { state => + + val (releaseVer, _) = state.get(ReleaseKeys.versions).getOrElse { + sys.error(s"${ReleaseKeys.versions.label} key not set") + } + + val tag = "v" + releaseVer + + reapply( + Seq( + // Tag will be one commit after the one with which the publish was really made, because of the commit + // updating scripts / plugins. + packageOptions += ManifestAttributes("Vcs-Release-Tag" -> tag) + ), + state + ) + } + + // tagRelease from sbt-release seem to use the next version (snapshot one typically) rather than the released one :/ + val reallyTagRelease = ReleaseStep { state => + + val (releaseVer, _) = state.get(ReleaseKeys.versions).getOrElse { + sys.error(s"${ReleaseKeys.versions.label} key not set") + } + + val sign = Project.extract(state).get(releaseVcsSign) + + val tag = "v" + releaseVer + + state.vcs.tag(tag, s"Releasing $tag", sign).!(state.log) + + state + } + val settings = Seq( releaseProcess := Seq[ReleaseStep]( @@ -268,6 +303,7 @@ object Release { saveInitialVersion, setReleaseVersion, commitReleaseVersion, + addReleaseToManifest, publishArtifacts, releaseStepCommand("sonatypeRelease"), updateScripts, @@ -277,7 +313,7 @@ object Release { stageReadme, updatePluginsSbt, commitUpdates, - tagRelease, + reallyTagRelease, setNextVersion, commitNextVersion, ReleaseStep(_.reload), From a0bc58afa3d9eed0e862dafac18e56a8bee7002d Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:52 +0200 Subject: [PATCH 14/21] Dummy fix in release process --- project/HttpUtil.scala | 5 +++-- project/Travis.scala | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/project/HttpUtil.scala b/project/HttpUtil.scala index 1cc3637bf..60ce53818 100644 --- a/project/HttpUtil.scala +++ b/project/HttpUtil.scala @@ -21,7 +21,7 @@ object HttpUtil { buffer.toByteArray } - def fetch(url: String, log: Logger): String = { + def fetch(url: String, log: Logger, extraHeaders: Seq[(String, String)] = Nil): String = { val url0 = new URL(url) @@ -36,7 +36,8 @@ object HttpUtil { try { conn = url0.openConnection() httpConn = conn.asInstanceOf[HttpURLConnection] - httpConn.setRequestProperty("Accept", "application/vnd.travis-ci.2+json") + for ((k, v) <- extraHeaders) + httpConn.setRequestProperty(k, v) is = conn.getInputStream (readFully(is), httpConn.getResponseCode) diff --git a/project/Travis.scala b/project/Travis.scala index e6878d2b3..aab814192 100644 --- a/project/Travis.scala +++ b/project/Travis.scala @@ -51,11 +51,14 @@ object Travis { job: JobDetails ) + val extraHeaders = Seq( + "Accept" -> "application/vnd.travis-ci.2+json" + ) def builds(repo: String, log: Logger): List[Build] = { val url = s"https://api.travis-ci.org/repos/$repo/builds" - val resp = HttpUtil.fetch(url, log) + val resp = HttpUtil.fetch(url, log, extraHeaders) resp.decodeEither[Builds] match { case Left(err) => @@ -69,7 +72,7 @@ object Travis { def job(id: JobId, log: Logger): Job = { val url = s"https://api.travis-ci.org/jobs/${id.value}" - val resp = HttpUtil.fetch(url, log) + val resp = HttpUtil.fetch(url, log, extraHeaders) resp.decodeEither[Job] match { case Left(err) => From 4f0b26d7a7b84598167369bac4a863c49031737a Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:52 +0200 Subject: [PATCH 15/21] Add released versions to binary compatiblity versions --- project/Mima.scala | 13 +++++++++++-- project/Release.scala | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/project/Mima.scala b/project/Mima.scala index 4e5249491..8bf084a89 100644 --- a/project/Mima.scala +++ b/project/Mima.scala @@ -6,12 +6,21 @@ import com.typesafe.tools.mima.plugin.MimaKeys._ object Mima { - def binaryCompatibilityVersion = "1.0.0-RC1" + // Important: the line with the "binary compatibility versions" comment below is matched during releases + def binaryCompatibilityVersions = Set( + "1.0.0-RC1", + "1.0.0-RC2", + "1.0.0-RC3", + "" // binary compatibility versions + ) lazy val previousArtifacts = Seq( mimaPreviousArtifacts := { - Set(organization.value %% moduleName.value % binaryCompatibilityVersion) + binaryCompatibilityVersions.collect { + case ver if ver.nonEmpty => + organization.value %% moduleName.value % ver + } } ) diff --git a/project/Release.scala b/project/Release.scala index beb6cd1d0..2c914b6b6 100644 --- a/project/Release.scala +++ b/project/Release.scala @@ -231,6 +231,42 @@ object Release { state } + val mimaVersionsPattern = s"(?m)^(\\s+)${Pattern.quote("\"\" // binary compatibility versions")}$$".r + + val updateMimaVersions = ReleaseStep { state => + + val vcs = state.vcs + + val (releaseVer, _) = state.get(ReleaseKeys.versions).getOrElse { + sys.error(s"${ReleaseKeys.versions.label} key not set") + } + + val baseDir = Project.extract(state).get(baseDirectory.in(ThisBuild)) + val mimaScalaFile = baseDir / "project" / "Mima.scala" + + val content = Source.fromFile(mimaScalaFile)(Codec.UTF8).mkString + + mimaVersionsPattern.findAllIn(content).toVector match { + case Seq() => sys.error(s"Found no matches in $mimaScalaFile") + case Seq(_) => + case _ => sys.error(s"Found too many matches in $mimaScalaFile") + } + + val newContent = mimaVersionsPattern.replaceAllIn( + content, + m => { + val indent = m.group(1) + indent + "\"" + releaseVer + "\",\n" + + indent + "\"\" // binary compatibility versions" + } + ) + + Files.write(mimaScalaFile.toPath, newContent.getBytes(StandardCharsets.UTF_8)) + vcs.add(mimaScalaFile.getAbsolutePath).!!(state.log) + + state + } + val commitUpdates = ReleaseStep( action = { state => @@ -312,11 +348,13 @@ object Release { releaseStepCommand("tut"), stageReadme, updatePluginsSbt, + updateMimaVersions, commitUpdates, reallyTagRelease, setNextVersion, commitNextVersion, ReleaseStep(_.reload), + releaseStepCommand("mimaReportBinaryIssues"), pushChanges ), releasePublishArtifactsAction := PgpKeys.publishSigned.value From 12e9ca3e087e1d124f462290605b361cb5414264 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:52 +0200 Subject: [PATCH 16/21] Java-ize echo module --- build.sbt | 2 +- echo/src/main/java/coursier/echo/Echo.java | 22 ++++++++++++++++++++ echo/src/main/scala/coursier/echo/Echo.scala | 5 ----- scripts/travis.sh | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 echo/src/main/java/coursier/echo/Echo.java delete mode 100644 echo/src/main/scala/coursier/echo/Echo.scala diff --git a/build.sbt b/build.sbt index cf2c62d33..f1fa11c6f 100644 --- a/build.sbt +++ b/build.sbt @@ -235,7 +235,7 @@ lazy val okhttp = project ) lazy val echo = project - .settings(shared) + .settings(pureJava) lazy val jvm = project .dummy diff --git a/echo/src/main/java/coursier/echo/Echo.java b/echo/src/main/java/coursier/echo/Echo.java new file mode 100644 index 000000000..6d0afb9da --- /dev/null +++ b/echo/src/main/java/coursier/echo/Echo.java @@ -0,0 +1,22 @@ +package coursier.echo; + +public class Echo { + + public static void main(String[] args) { + + boolean isFirst = true; + + for (String arg : args) { + + if (isFirst) + isFirst = false; + else + System.out.print(" "); + + System.out.print(arg); + } + + System.out.println(); + } + +} diff --git a/echo/src/main/scala/coursier/echo/Echo.scala b/echo/src/main/scala/coursier/echo/Echo.scala deleted file mode 100644 index 60ab2894e..000000000 --- a/echo/src/main/scala/coursier/echo/Echo.scala +++ /dev/null @@ -1,5 +0,0 @@ - -object Echo { - def main(args: Array[String]): Unit = - println(args.mkString(" ")) -} diff --git a/scripts/travis.sh b/scripts/travis.sh index 5084f56d3..2bd4bf256 100755 --- a/scripts/travis.sh +++ b/scripts/travis.sh @@ -181,7 +181,7 @@ publish() { testBootstrap() { if is211; then sbt ++${SCALA_VERSION} echo/publishLocal cli/pack - cli/target/pack/bin/coursier bootstrap -o cs-echo io.get-coursier:echo_2.11:1.0.0-SNAPSHOT + cli/target/pack/bin/coursier bootstrap -o cs-echo io.get-coursier:echo:1.0.0-SNAPSHOT if [ "$(./cs-echo foo)" != foo ]; then echo "Error: unexpected output from bootstrapped echo command." 1>&2 exit 1 From 65a0b035d035e94ca90106cabce5a62c228e1192 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:53 +0200 Subject: [PATCH 17/21] Tweak build --- project/CrossDeps.scala | 2 +- project/Deps.scala | 2 +- project/Settings.scala | 2 +- project/SharedVersions.scala | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/project/CrossDeps.scala b/project/CrossDeps.scala index 04cf9e3a8..25707d903 100644 --- a/project/CrossDeps.scala +++ b/project/CrossDeps.scala @@ -11,7 +11,7 @@ object CrossDeps { // The setting / .value hoop-and-loop is necessary because of the expansion of the %%% macro, which references // other settings. - def fastParse = setting("com.lihaoyi" %%% "fastparse" % "0.4.2") + def fastParse = setting("com.lihaoyi" %%% "fastparse" % SharedVersions.fastParse) def scalazCore = setting("org.scalaz" %%% "scalaz-core" % SharedVersions.scalaz) def scalaJsDom = setting("org.scala-js" %%% "scalajs-dom" % "0.9.2") def utest = setting("com.lihaoyi" %%% "utest" % "0.4.7") diff --git a/project/Deps.scala b/project/Deps.scala index ababae96a..24281954e 100644 --- a/project/Deps.scala +++ b/project/Deps.scala @@ -5,7 +5,7 @@ import sbt.Keys._ object Deps { def quasiQuotes = "org.scalamacros" %% "quasiquotes" % "2.1.0" - def fastParse = "com.lihaoyi" %% "fastparse" % "0.4.2" + def fastParse = "com.lihaoyi" %% "fastparse" % SharedVersions.fastParse def jsoup = "org.jsoup" % "jsoup" % "1.10.2" def scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.6" def scalazConcurrent = "org.scalaz" %% "scalaz-concurrent" % SharedVersions.scalaz diff --git a/project/Settings.scala b/project/Settings.scala index 99ed26085..3dbf960fd 100644 --- a/project/Settings.scala +++ b/project/Settings.scala @@ -88,7 +88,7 @@ object Settings { p.store(w, "Coursier properties") w.close() - println(s"Wrote $f") + state.value.log.info(s"Wrote $f") Seq(f) } diff --git a/project/SharedVersions.scala b/project/SharedVersions.scala index 0d282b606..359ed9abb 100644 --- a/project/SharedVersions.scala +++ b/project/SharedVersions.scala @@ -1,6 +1,7 @@ object SharedVersions { + def fastParse = "0.4.2" def http4s = "0.15.12a" def proguard = "5.3.3" def scalaz = "7.2.12" From 334cc1b01a799c6d1ec8225c801bdf156c420ca7 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:53 +0200 Subject: [PATCH 18/21] Address some compilation warnings --- .../src/main/scala/coursier/FromSbt.scala | 32 ++++++++++++++--- .../src/main/scala/coursier/Tasks.scala | 34 +++++++++---------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/sbt-coursier/src/main/scala/coursier/FromSbt.scala b/sbt-coursier/src/main/scala/coursier/FromSbt.scala index 40653e3e9..9c50d9aa9 100644 --- a/sbt-coursier/src/main/scala/coursier/FromSbt.scala +++ b/sbt-coursier/src/main/scala/coursier/FromSbt.scala @@ -7,6 +7,8 @@ import java.net.{MalformedURLException, URL} import coursier.core.Authentication import sbt.{CrossVersion, ModuleID, Resolver} +import scalaz.{-\/, \/-} + import SbtCompatibility._ object FromSbt { @@ -189,14 +191,25 @@ object FromSbt { mavenCompatibleBaseOpt0 match { case None => - Some(IvyRepository( + + val repo = IvyRepository.parse( "file://" + r.patterns.artifactPatterns.head, metadataPatternOpt = Some("file://" + r.patterns.ivyPatterns.head), changing = Some(true), properties = ivyProperties, dropInfoAttributes = true, authentication = authentication - )) + ) match { + case -\/(err) => + sys.error( + s"Cannot parse Ivy patterns ${r.patterns.artifactPatterns.head} and ${r.patterns.ivyPatterns.head}: $err" + ) + case \/-(repo) => + repo + } + + Some(repo) + case Some(mavenCompatibleBase) => mavenRepositoryOpt("file://" + mavenCompatibleBase, log, authentication) } @@ -209,14 +222,25 @@ object FromSbt { mavenCompatibleBaseOpt0 match { case None => - Some(IvyRepository( + + val repo = IvyRepository.parse( r.patterns.artifactPatterns.head, metadataPatternOpt = Some(r.patterns.ivyPatterns.head), changing = None, properties = ivyProperties, dropInfoAttributes = true, authentication = authentication - )) + ) match { + case -\/(err) => + sys.error( + s"Cannot parse Ivy patterns ${r.patterns.artifactPatterns.head} and ${r.patterns.ivyPatterns.head}: $err" + ) + case \/-(repo) => + repo + } + + Some(repo) + case Some(mavenCompatibleBase) => mavenRepositoryOpt(mavenCompatibleBase, log, authentication) } diff --git a/sbt-coursier/src/main/scala/coursier/Tasks.scala b/sbt-coursier/src/main/scala/coursier/Tasks.scala index 2b80cb095..db6d1911e 100644 --- a/sbt-coursier/src/main/scala/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala/coursier/Tasks.scala @@ -47,24 +47,24 @@ object Tasks { structure(state).allProjectRefs.filter(p => deps(p.project)) } - def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = - ( - externalResolvers, - sbtPlugin, - sbtResolver, - bootResolvers, - overrideBuildResolvers - ).map { (extRes, isSbtPlugin, sbtRes, bootResOpt, overrideFlag) => - bootResOpt.filter(_ => overrideFlag).getOrElse { - var resolvers = extRes - if (isSbtPlugin) - resolvers = Seq( - sbtRes, - Classpaths.sbtPluginReleases - ) ++ resolvers - resolvers - } + def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task { + + val extRes = externalResolvers.value + val isSbtPlugin = sbtPlugin.value + val sbtRes = sbtResolver.value + val bootResOpt = bootResolvers.value + val overrideFlag = overrideBuildResolvers.value + + bootResOpt.filter(_ => overrideFlag).getOrElse { + var resolvers = extRes + if (isSbtPlugin) + resolvers = Seq( + sbtRes, + Classpaths.sbtPluginReleases + ) ++ resolvers + resolvers } + } def coursierRecursiveResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = ( From c4d3918792e34aaed6f66ddf71fdda789c70de4e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:53 +0200 Subject: [PATCH 19/21] Remove unused imports --- sbt-coursier/src/main/scala/coursier/Tasks.scala | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sbt-coursier/src/main/scala/coursier/Tasks.scala b/sbt-coursier/src/main/scala/coursier/Tasks.scala index db6d1911e..f5a1dab44 100644 --- a/sbt-coursier/src/main/scala/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala/coursier/Tasks.scala @@ -1,6 +1,6 @@ package coursier -import java.io.{File, InputStream, OutputStreamWriter} +import java.io.{File, OutputStreamWriter} import java.net.URL import java.util.concurrent.{ExecutorService, Executors} @@ -9,14 +9,11 @@ import coursier.extra.Typelevel import coursier.ivy.{IvyRepository, PropertiesPattern} import coursier.Keys._ import coursier.Structure._ -import coursier.internal.FileUtil import coursier.util.{Config, Print} -import org.apache.ivy.core.module.id.ModuleRevisionId -import sbt.{ClasspathDep, Classpaths, Def, ProjectRef, Resolver, UpdateReport} +import sbt.{Classpaths, Def, Resolver, UpdateReport} import sbt.Keys._ import scala.collection.mutable -import scala.collection.JavaConverters._ import scala.collection.mutable.ArrayBuffer import scala.util.Try import scalaz.{-\/, \/-} From 6e0c6c35153c3be04cba4fc59767438f4ff5c28f Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 15 May 2017 15:32:54 +0200 Subject: [PATCH 20/21] Always use same Function1 instance for Resolution fields Allows to use the resolution as cache key --- sbt-coursier/src/main/scala/coursier/Tasks.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sbt-coursier/src/main/scala/coursier/Tasks.scala b/sbt-coursier/src/main/scala/coursier/Tasks.scala index f5a1dab44..da58bafb8 100644 --- a/sbt-coursier/src/main/scala/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala/coursier/Tasks.scala @@ -425,6 +425,9 @@ object Tasks { } } + private val noOptionalFilter: Option[Dependency => Boolean] = Some(dep => !dep.optional) + private val typelevelOrgSwap: Option[Dependency => Dependency] = Some(Typelevel.swap(_)) + def resolutionTask( sbtClassifiers: Boolean = false @@ -506,7 +509,7 @@ object Tasks { val startRes = Resolution( currentProject.dependencies.map(_._2).toSet, - filter = Some(dep => !dep.optional), + filter = noOptionalFilter, userActivations = if (userEnabledProfiles.isEmpty) None @@ -518,7 +521,7 @@ object Tasks { forcedScalaModules(so, sv) ++ interProjectDependencies.map(_.moduleVersion), projectCache = parentProjectCache, - mapDependencies = if (typelevel) Some(Typelevel.swap(_)) else None + mapDependencies = if (typelevel) typelevelOrgSwap else None ) if (verbosityLevel >= 2) { @@ -1060,7 +1063,7 @@ object Tasks { reportsCache.getOrElseUpdate( ReportCacheKey( currentProject, - res.copy(filter = None), + res, withClassifiers, sbtClassifiers ), From f23fbda1bad487e334e27e470d9b3197d437f6ac Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Tue, 16 May 2017 17:06:35 +0200 Subject: [PATCH 21/21] Address more warnings --- .../src/main/scala/coursier/Tasks.scala | 79 +++++++++++-------- .../scala/coursier/test/ResolutionTests.scala | 12 ++- web/src/main/resources/index.html | 2 +- web/src/main/scala/coursier/web/Main.scala | 5 +- 4 files changed, 60 insertions(+), 38 deletions(-) diff --git a/sbt-coursier/src/main/scala/coursier/Tasks.scala b/sbt-coursier/src/main/scala/coursier/Tasks.scala index da58bafb8..52e47cec2 100644 --- a/sbt-coursier/src/main/scala/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala/coursier/Tasks.scala @@ -64,23 +64,25 @@ object Tasks { } def coursierRecursiveResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = - ( - sbt.Keys.state, - sbt.Keys.thisProjectRef - ).flatMap { (state, projectRef) => + Def.taskDyn { + + val state = sbt.Keys.state.value + val projectRef = sbt.Keys.thisProjectRef.value val projects = allRecursiveInterDependencies(state, projectRef) - coursierResolvers + val t = coursierResolvers .forAllProjects(state, projectRef +: projects) .map(_.values.toVector.flatten) + + Def.task(t.value) } def coursierFallbackDependenciesTask: Def.Initialize[sbt.Task[Seq[(Module, String, URL, Boolean)]]] = - ( - sbt.Keys.state, - sbt.Keys.thisProjectRef - ).flatMap { (state, projectRef) => + Def.taskDyn { + + val state = sbt.Keys.state.value + val projectRef = sbt.Keys.thisProjectRef.value val projects = allRecursiveInterDependencies(state, projectRef) @@ -88,9 +90,8 @@ object Tasks { .forAllProjects(state, projectRef +: projects) .map(_.values.toVector.flatten) - for { - allDependencies <- allDependenciesTask - } yield { + Def.task { + val allDependencies = allDependenciesTask.value FromSbt.fallbackDependencies( allDependencies, @@ -101,10 +102,10 @@ object Tasks { } def coursierProjectTask: Def.Initialize[sbt.Task[Project]] = - ( - sbt.Keys.state, - sbt.Keys.thisProjectRef - ).flatMap { (state, projectRef) => + Def.taskDyn { + + val state = sbt.Keys.state.value + val projectRef = sbt.Keys.thisProjectRef.value // should projectID.configurations be used instead? val configurations = ivyConfigurations.in(projectRef).get(state) @@ -140,9 +141,9 @@ object Tasks { res } - for { - allDependencies <- allDependenciesTask - } yield { + Def.task { + + val allDependencies = allDependenciesTask.value val configMap = configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap @@ -164,14 +165,16 @@ object Tasks { } def coursierInterProjectDependenciesTask: Def.Initialize[sbt.Task[Seq[Project]]] = - ( - sbt.Keys.state, - sbt.Keys.thisProjectRef - ).flatMap { (state, projectRef) => + Def.taskDyn { + + val state = sbt.Keys.state.value + val projectRef = sbt.Keys.thisProjectRef.value val projects = allRecursiveInterDependencies(state, projectRef) - coursierProject.forAllProjects(state, projects).map(_.values.toVector) + val t = coursierProject.forAllProjects(state, projects).map(_.values.toVector) + + Def.task(t.value) } def coursierPublicationsTask( @@ -405,8 +408,10 @@ object Tasks { } def parentProjectCacheTask: Def.Initialize[sbt.Task[Map[Seq[sbt.Resolver],Seq[coursier.ProjectCache]]]] = - (sbt.Keys.state, - sbt.Keys.thisProjectRef).flatMap{ (state, projectRef) => + Def.taskDyn { + + val state = sbt.Keys.state.value + val projectRef = sbt.Keys.thisProjectRef.value val projectDeps = structure(state).allProjects .find(_.id == projectRef.project) @@ -415,14 +420,22 @@ object Tasks { val projects = structure(state).allProjectRefs.filter(p => projectDeps(p.project)) - coursierRecursiveResolvers.forAllProjects(state, projects).flatMap{ m => - coursierResolution.forAllProjects(state, m.keys.toSeq).map{ n => - n.foldLeft(Map.empty[Seq[Resolver], Seq[ProjectCache]]){ case (caches, (ref, resolution)) => - m.get(ref).fold(caches)(resolvers => - caches.updated(resolvers, resolution.projectCache +: caches.getOrElse(resolvers, Seq.empty))) + val t = + for { + m <- coursierRecursiveResolvers.forAllProjects(state, projects) + n <- coursierResolution.forAllProjects(state, m.keys.toSeq) + } yield + n.foldLeft(Map.empty[Seq[Resolver], Seq[ProjectCache]]) { + case (caches, (ref, resolution)) => + m.get(ref).fold(caches) { resolvers => + caches.updated( + resolvers, + resolution.projectCache +: caches.getOrElse(resolvers, Nil) + ) + } } - } - } + + Def.task(t.value) } private val noOptionalFilter: Option[Dependency => Boolean] = Some(dep => !dep.optional) diff --git a/tests/shared/src/test/scala/coursier/test/ResolutionTests.scala b/tests/shared/src/test/scala/coursier/test/ResolutionTests.scala index 8a6458901..ebf24abf6 100644 --- a/tests/shared/src/test/scala/coursier/test/ResolutionTests.scala +++ b/tests/shared/src/test/scala/coursier/test/ResolutionTests.scala @@ -239,8 +239,16 @@ object ResolutionTests extends TestSuite { Set(dep) )) - // A missing POM dependency is not reported correctly. That's why the method is deprecated. - assert(res.errors == Seq.empty) + val directDependencyErrors = + for { + dep <- res.dependencies.toSeq + err <- res.errorCache + .get(dep.moduleVersion) + .toSeq + } yield (dep, err) + + // Error originates from a dependency import, not directly from a dependency + assert(directDependencyErrors.isEmpty) // metadataErrors have that assert(res.metadataErrors == Seq((Module("acme", "missing-pom"), "1.0.0") -> List("Not found"))) diff --git a/web/src/main/resources/index.html b/web/src/main/resources/index.html index a478079bd..65e7975b0 100644 --- a/web/src/main/resources/index.html +++ b/web/src/main/resources/index.html @@ -126,7 +126,7 @@ $('.nav-tabs a').on('shown.bs.tab', function (e) { diff --git a/web/src/main/scala/coursier/web/Main.scala b/web/src/main/scala/coursier/web/Main.scala index f5e9e0831..2fa379284 100644 --- a/web/src/main/scala/coursier/web/Main.scala +++ b/web/src/main/scala/coursier/web/Main.scala @@ -1,10 +1,11 @@ package coursier.web import japgolly.scalajs.react.React -import scala.scalajs.js.annotation.JSExport + +import scala.scalajs.js.annotation.{JSExport, JSExportTopLevel} import org.scalajs.dom.document -@JSExport +@JSExportTopLevel("CoursierWeb") object Main { @JSExport def main(): Unit = {