From 5f16f6aace28d7edbc3ece96c8687fb47301f034 Mon Sep 17 00:00:00 2001 From: Amina Adewusi Date: Mon, 26 Apr 2021 08:48:29 +0100 Subject: [PATCH 01/39] add additional instructions for new contributors --- DEVELOPING.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/DEVELOPING.md b/DEVELOPING.md index 691720ea2..020f81992 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -1,6 +1,10 @@ Developer guide =============== +### Getting started + +Create a [fork](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) of the repository and [clone](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository) it to create a local copy. + ### Branch to work against sbt uses two branches for development: @@ -8,10 +12,13 @@ sbt uses two branches for development: - Development branch: `develop` (this is also called "master") - Stable branch: `1.$MINOR.x`, where `$MINOR` is current minor version (e.g. `1.1.x` during 1.1.x series) +The `develop` branch represents the next major version of sbt. Only new features are pushed to the `develop` branch. This is the branch that you will branch off of to make your changes. +The `stable` branch represents the current stable sbt release. Only bug fixes are back-ported to the stable branch. ### Instruction to build just sbt -If the change you are making is contained in sbt/sbt, you could publishLocal on sbt/sbt: +Sbt has a number of sub-modules. If the change you are making is just contained in sbt/sbt (not one of the sub-modules), +you can use the `publishLocal` command to publish the sbt project to your local machine. This is helpful for testing your changes. ``` $ sbt @@ -20,6 +27,9 @@ sbt:sbtRoot> publishLocal ### Instruction to build all modules from source +When working on a change that requires changing one or more sub modules, the source code for these modules can be pulled in by running the following script +(instead of building them from Maven for example and not being able to change the source code for these sub-modules). + 1. Install the current stable binary release of sbt (see [Setup]), which will be used to build sbt from source. 2. Get the source code. @@ -42,7 +52,7 @@ sbt:sbtRoot> publishLocal ### Using the locally built sbt -The `publishLocal` above will build and publish version `1.$MINOR.$PATCH-SNAPSHOT` (e.g. 1.1.2-SNAPSHOT) to your local ivy repository. +The `publishLocal` command above will build and publish version `1.$MINOR.$PATCH-SNAPSHOT` (e.g. 1.1.2-SNAPSHOT) to your local ivy repository. To use the locally built sbt, set the version in `build.properties` file in your project to `1.$MINOR.$PATCH-SNAPSHOT` then launch `sbt` (this can be the `sbt` launcher installed in your machine). @@ -54,6 +64,8 @@ $ sbt ### Nightly builds +_Note: The following section may require an update._ + The latest development versions are available as nightly builds on sbt-maven-snapshots () repo, which is a redirect proxy whose underlying repository is subject to change it could be Bintray, Linux box, etc. To use a nightly build: @@ -75,9 +87,16 @@ If you're overriding the repositories via `~/.sbt/repositories`, make sure that ### Clearing out boot and local cache -When you run a locally built sbt, the JAR artifacts will be now cached under `$HOME/.sbt/boot/scala-2.12.6/org.scala-sbt/sbt/1.$MINOR.$PATCH-SNAPSHOT` directory. To clear this out run: `reboot dev` command from sbt's session of your test application. +sbt consists of lots of JAR files. When running sbt locally, these JAR artifacts are cached in the `boot` directory under `$HOME/.sbt/boot/scala-2.12.6/org.scala-sbt/sbt/1.$MINOR.$PATCH-SNAPSHOT` directory. -One drawback of `-SNAPSHOT` version is that it's slow to resolve as it tries to hit all the resolvers. You can workaround that by using a version name like `1.$MINOR.$PATCH-LOCAL1`. A non-SNAPSHOT artifacts will now be cached under `$HOME/.ivy/cache/` directory, so you need to clear that out using [sbt-dirty-money](https://github.com/sbt/sbt-dirty-money)'s `cleanCache` task. +In order to see a change you've made to sbt's source code, this cache should be cleared. To clear this out run: `reboot dev` command from sbt's session of your test application. + +By default sbt uses a snapshot version (this is a scala convention for quick local changes- it tells users that this version could change). +One drawback of `-SNAPSHOT` version is that it's slow to resolve as it tries to hit all the resolvers. +This is important when testing perfomance, so that the slowness of the resolution does not impact sbt. + +You can workaround that by using a version name like `1.$MINOR.$PATCH-LOCAL1`. +A non-SNAPSHOT artifacts will now be cached under `$HOME/.ivy/cache/` directory, so you need to clear that out using [sbt-dirty-money](https://github.com/sbt/sbt-dirty-money)'s `cleanCache` task. ### Running sbt "from source" - `sbtOn` From b27ea623a554e8d21bb60a8b014e9cfaf6f0ff14 Mon Sep 17 00:00:00 2001 From: Amina Adewusi Date: Fri, 30 Apr 2021 16:37:07 +0100 Subject: [PATCH 02/39] Fixes failing tests Tests were failing because of bintray migration. Lightbend forgot to move dependencies. This fixes it by upgrading to more modern library dependencies. --- .../build.sbt | 67 +++++++++---------- .../{disabled => test} | 0 .../dependency-graph/whatDependsOn/build.sbt | 61 ++++++++--------- .../whatDependsOn/{disabled => test} | 0 4 files changed, 59 insertions(+), 69 deletions(-) rename sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/{disabled => test} (100%) rename sbt-app/src/sbt-test/dependency-graph/whatDependsOn/{disabled => test} (100%) diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt index 0586054cd..4826145e5 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt @@ -1,18 +1,11 @@ -ThisBuild / useCoursier := false - -version := "0.1.0-SNAPSHOT" - -organization := "default" +ThisBuild / version := "0.1.0-SNAPSHOT" +ThisBuild / scalaVersion := "2.13.5" name := "whatDependsOn" -scalaVersion := "2.9.1" - -resolvers += "typesafe maven" at "https://repo.typesafe.com/typesafe/maven-releases/" - libraryDependencies ++= Seq( - "com.codahale" % "jerkson_2.9.1" % "0.5.0", - "org.codehaus.jackson" % "jackson-mapper-asl" % "1.9.10" // as another version of asl + "co.fs2" %% "fs2-core" % "1.0.4", + "org.typelevel" %% "cats-effect" % "3.1.0" ) val check = TaskKey[Unit]("check") @@ -23,36 +16,36 @@ check := { require(sanitize(expected) == sanitize(output), s"Tree should have been [\n${sanitize(expected)}\n] but was [\n${sanitize(output)}\n]") val withVersion = - (whatDependsOn in Compile) - .toTask(" org.codehaus.jackson jackson-core-asl 1.9.11") + (Compile / whatDependsOn) + .toTask(" org.typelevel cats-core_2.13 2.6.0") .value - val expectedGraphWithVersion = - """org.codehaus.jackson:jackson-core-asl:1.9.11 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-org.codehaus.jackson:jackson-mapper-asl:1.9.11 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | """.stripMargin + val expectedGraphWithVersion = { + """org.typelevel:cats-core_2.13:2.6.0 [S] + |+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S] + |+-org.typelevel:cats-effect-std_2.13:3.1.0 [S] + || +-org.typelevel:cats-effect_2.13:3.1.0 [S] + || +-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S] + || + |+-org.typelevel:cats-effect_2.13:3.1.0 [S] + |+-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S]""".stripMargin + } - checkOutput(withVersion, expectedGraphWithVersion) + checkOutput(withVersion.trim, expectedGraphWithVersion.trim) val withoutVersion = - (whatDependsOn in Compile) - .toTask(" org.codehaus.jackson jackson-mapper-asl") + (Compile / whatDependsOn) + .toTask(" org.typelevel cats-core_2.13") .value val expectedGraphWithoutVersion = - """org.codehaus.jackson:jackson-mapper-asl:1.9.11 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | - |org.codehaus.jackson:jackson-mapper-asl:1.9.10 (evicted by: 1.9.11) - | +-default:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | """.stripMargin - checkOutput(withoutVersion, expectedGraphWithoutVersion) + """org.typelevel:cats-core_2.13:2.6.0 [S] + |+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S] + |+-org.typelevel:cats-effect-std_2.13:3.1.0 [S] + || +-org.typelevel:cats-effect_2.13:3.1.0 [S] + || +-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S] + || + |+-org.typelevel:cats-effect_2.13:3.1.0 [S] + |+-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S]""".stripMargin + + checkOutput(withoutVersion.trim, expectedGraphWithoutVersion.trim) + } diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/disabled b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/test similarity index 100% rename from sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/disabled rename to sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/test diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt index 8b3a0d5e1..4826145e5 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt @@ -1,13 +1,11 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.9.1" +ThisBuild / scalaVersion := "2.13.5" name := "whatDependsOn" -resolvers += "typesafe maven" at "https://repo.typesafe.com/typesafe/maven-releases/" - libraryDependencies ++= Seq( - "com.codahale" % "jerkson_2.9.1" % "0.5.0", - "org.codehaus.jackson" % "jackson-mapper-asl" % "1.9.10" // as another version of asl + "co.fs2" %% "fs2-core" % "1.0.4", + "org.typelevel" %% "cats-effect" % "3.1.0" ) val check = TaskKey[Unit]("check") @@ -18,37 +16,36 @@ check := { require(sanitize(expected) == sanitize(output), s"Tree should have been [\n${sanitize(expected)}\n] but was [\n${sanitize(output)}\n]") val withVersion = - (whatDependsOn in Compile) - .toTask(" org.codehaus.jackson jackson-core-asl 1.9.10") + (Compile / whatDependsOn) + .toTask(" org.typelevel cats-core_2.13 2.6.0") .value - val expectedGraphWithVersion = - """org.codehaus.jackson:jackson-core-asl:1.9.10 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-org.codehaus.jackson:jackson-mapper-asl:1.9.10 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | """.stripMargin + val expectedGraphWithVersion = { + """org.typelevel:cats-core_2.13:2.6.0 [S] + |+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S] + |+-org.typelevel:cats-effect-std_2.13:3.1.0 [S] + || +-org.typelevel:cats-effect_2.13:3.1.0 [S] + || +-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S] + || + |+-org.typelevel:cats-effect_2.13:3.1.0 [S] + |+-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S]""".stripMargin + } - checkOutput(withVersion, expectedGraphWithVersion) + checkOutput(withVersion.trim, expectedGraphWithVersion.trim) val withoutVersion = - (whatDependsOn in Compile) - .toTask(" org.codehaus.jackson jackson-mapper-asl") + (Compile / whatDependsOn) + .toTask(" org.typelevel cats-core_2.13") .value val expectedGraphWithoutVersion = - """org.codehaus.jackson:jackson-mapper-asl:1.9.10 - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | | - | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | - |org.codehaus.jackson:jackson-mapper-asl:[1.9.0,2.0.0) (evicted by: 1.9.10) - | +-com.codahale:jerkson_2.9.1:0.5.0 [S] - | +-whatdependson:whatdependson_2.9.1:0.1.0-SNAPSHOT [S] - | """.stripMargin - checkOutput(withoutVersion, expectedGraphWithoutVersion) + """org.typelevel:cats-core_2.13:2.6.0 [S] + |+-org.typelevel:cats-effect-kernel_2.13:3.1.0 [S] + |+-org.typelevel:cats-effect-std_2.13:3.1.0 [S] + || +-org.typelevel:cats-effect_2.13:3.1.0 [S] + || +-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S] + || + |+-org.typelevel:cats-effect_2.13:3.1.0 [S] + |+-whatdependson:whatdependson_2.13:0.1.0-SNAPSHOT [S]""".stripMargin + + checkOutput(withoutVersion.trim, expectedGraphWithoutVersion.trim) + } diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/disabled b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/test similarity index 100% rename from sbt-app/src/sbt-test/dependency-graph/whatDependsOn/disabled rename to sbt-app/src/sbt-test/dependency-graph/whatDependsOn/test From ded074ac75377a5147d21e12dc173a343d34cdc7 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 29 Apr 2021 15:43:50 +0200 Subject: [PATCH 03/39] Expose Defaults.makeScalaInstance --- main/src/main/scala/sbt/Defaults.scala | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 95cbb0a4a..60e827c26 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -35,7 +35,7 @@ import sbt.Scope.{ GlobalScope, ThisScope, fillTaskAxis } import sbt.coursierint._ import sbt.internal.CommandStrings.ExportStream import sbt.internal._ -import sbt.internal.classpath.{ AlternativeZincUtil, ClassLoaderCache } +import sbt.internal.classpath.AlternativeZincUtil import sbt.internal.inc.JavaInterfaceUtil._ import sbt.internal.inc.classpath.{ ClasspathFilter, ClasspathUtil } import sbt.internal.inc.{ CompileOutput, MappedFileConverter, Stamps, ZincLmUtil, ZincUtil } @@ -1077,13 +1077,12 @@ object Defaults extends BuildCommon { val libraryJars = allJars.filter(_.getName == "scala-library.jar") allJars.filter(_.getName == "scala-compiler.jar") match { case Array(compilerJar) if libraryJars.nonEmpty => - val cache = state.value.extendedClassLoaderCache - mkScalaInstance( + makeScalaInstance( version, libraryJars, allJars, Seq.empty, - cache, + state.value, scalaInstanceTopLoader.value ) case _ => ScalaInstance(version, scalaProvider) @@ -1135,21 +1134,21 @@ object Defaults extends BuildCommon { .flatMap(_.artifacts.map(_._2)) val libraryJars = ScalaArtifacts.libraryIds(sv).map(file) - mkScalaInstance( + makeScalaInstance( sv, libraryJars, allCompilerJars, allDocJars, - state.value.extendedClassLoaderCache, + state.value, scalaInstanceTopLoader.value, ) } - private[this] def mkScalaInstance( + private def makeScalaInstance( version: String, libraryJars: Array[File], allCompilerJars: Seq[File], allDocJars: Seq[File], - classLoaderCache: ClassLoaderCache, + state: State, topLoader: ClassLoader, ): ScalaInstance = { // Scala 2.10 shades jline in the console so we need to make sure that it loads a compatible @@ -1162,6 +1161,7 @@ object Defaults extends BuildCommon { } else topLoader + val classLoaderCache = state.extendedClassLoaderCache val compilerJars = allCompilerJars.filterNot(libraryJars.contains).distinct.toArray val docJars = allDocJars .filterNot(jar => libraryJars.contains(jar) || compilerJars.contains(jar)) @@ -1196,12 +1196,12 @@ object Defaults extends BuildCommon { case a: AutoCloseable => a.close() case _ => } - mkScalaInstance( + makeScalaInstance( dummy.version, dummy.libraryJars, dummy.compilerJars, dummy.allJars, - state.value.extendedClassLoaderCache, + state.value, scalaInstanceTopLoader.value, ) } From 45d59ab2597d6019286b93808637612fa9766a58 Mon Sep 17 00:00:00 2001 From: Regis Desgroppes Date: Fri, 30 Apr 2021 07:44:07 +0200 Subject: [PATCH 04/39] sbt script: Favor java's `user.home` over `$HOME` JVM powered applications may be given an alternate home by means of the `user.home` system property, which is handy for managing caches in CI (the property may be set by different means, including environment variables such as `JAVA_TOOL_OPTIONS` or `_JAVA_OPTIONS`). Alas, this doesn't fully work when the `sbt` script downloads the launcher jar to `$HOME`. The present change consists in retrieving the value of this property by means of a `findProperty` function extracted from the existing `getPreloaded` one (adapted accordingly). No java process get spawned here. --- sbt | 57 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/sbt b/sbt index 36b36af26..cfd9eba4b 100755 --- a/sbt +++ b/sbt @@ -126,7 +126,8 @@ acquire_sbt_jar () { launcher_sv="$builtin_sbt_version" fi fi - download_jar="$HOME/.cache/sbt/boot/sbt-launch/$launcher_sv/sbt-launch-$launcher_sv.jar" + local user_home && user_home=$(findProperty user.home) + download_jar="${user_home:-$HOME}/.cache/sbt/boot/sbt-launch/$launcher_sv/sbt-launch-$launcher_sv.jar" if [[ -f "$download_jar" ]]; then sbt_jar="$download_jar" else @@ -301,39 +302,49 @@ jdk_version() { echo "$result" } -# Extracts the preloaded directory from either -Dsbt.preloaded or -Dsbt.global.base -# properties by looking at: -# - _JAVA_OPTIONS environment variable, +# Find the first occurrence of the given property name and returns its value by looking at: +# - properties set by command-line options, +# - JAVA_OPTS environment variable, # - SBT_OPTS environment variable, -# - JAVA_OPTS environment variable and -# - properties set by command-line options -# in that order. The last one will be chosen such that `sbt.preloaded` is -# always preferred over `sbt.global.base`. -getPreloaded() { - local -a _java_options_array - local -a sbt_opts_array +# - _JAVA_OPTIONS environment variable and +# - JAVA_TOOL_OPTIONS environment variable +# in that order. +findProperty() { local -a java_opts_array - read -a _java_options_array <<< "$_JAVA_OPTIONS" - read -a sbt_opts_array <<< "$SBT_OPTS" + local -a sbt_opts_array + local -a _java_options_array + local -a java_tool_options_array read -a java_opts_array <<< "$JAVA_OPTS" + read -a sbt_opts_array <<< "$SBT_OPTS" + read -a _java_options_array <<< "$_JAVA_OPTIONS" + read -a java_tool_options_array <<< "$JAVA_TOOL_OPTIONS" local args_to_check=( - "${_java_options_array[@]}" - "${sbt_opts_array[@]}" + "${java_args[@]}" "${java_opts_array[@]}" - "${java_args[@]}") - local via_global_base="$HOME/.sbt/preloaded" - local via_explicit="" + "${sbt_opts_array[@]}" + "${_java_options_array[@]}" + "${java_tool_options_array[@]}") for opt in "${args_to_check[@]}"; do - if [[ "$opt" == -Dsbt.preloaded=* ]]; then - via_explicit="${opt#-Dsbt.preloaded=}" - elif [[ "$opt" == -Dsbt.global.base=* ]]; then - via_global_base="${opt#-Dsbt.global.base=}/preloaded" + if [[ "$opt" == -D$1=* ]]; then + echo "${opt#-D$1=}" + return fi done +} - echo "${via_explicit:-${via_global_base}}" +# Extracts the preloaded directory from either -Dsbt.preloaded, -Dsbt.global.base or -Duser.home +# in that order. +getPreloaded() { + local preloaded && preloaded=$(findProperty sbt.preloaded) + [ "$preloaded" ] && echo "$preloaded" && return + + local global_base && global_base=$(findProperty sbt.global.base) + [ "$global_base" ] && echo "$global_base/preloaded" && return + + local user_home && user_home=$(findProperty user.home) + echo "${user_home:-$HOME}/.sbt/preloaded}}" } syncPreloaded() { From 1c8b55107d0439457d5605e35a7c5d75b1edf4c5 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 2 May 2021 20:32:31 -0400 Subject: [PATCH 05/39] Fix new command leaving behind target, take 2 Fixes #2835 Somehow the fix in #4033 due to various initialization. Here's a bit more aggressive rebasing of the base directory that should fix the `project` and `target` directory created during sbt new. --- main/src/main/scala/sbt/Main.scala | 58 ++++++++++++++----- .../main/scala/sbt/TemplateCommandUtil.scala | 25 +++----- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 2064fa514..7f18bf70e 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -71,22 +71,54 @@ private[sbt] object xMain { .filterNot(_ == DashDashServer) val isClient: String => Boolean = cmd => (cmd == DashClient) || (cmd == DashDashClient) val isBsp: String => Boolean = cmd => (cmd == "-bsp") || (cmd == "--bsp") - val isServer = !userCommands.exists(c => isBsp(c) || isClient(c)) - val bootServerSocket = if (isServer) getSocketOrExit(configuration) match { + val isNew: String => Boolean = cmd => (cmd == "new") + lazy val isServer = !userCommands.exists(c => isBsp(c) || isClient(c)) + // keep this lazy to prevent project directory created prematurely + lazy val bootServerSocket = if (isServer) getSocketOrExit(configuration) match { case (_, Some(e)) => return e case (s, _) => s } else None - if (userCommands.exists(isBsp)) { - BspClient.run(dealiasBaseDirectory(configuration)) - } else { - bootServerSocket.foreach(l => ITerminal.setBootStreams(l.inputStream, l.outputStream)) - val detachStdio = userCommands.exists(_ == BasicCommandStrings.DashDashDetachStdio) - ITerminal.withStreams(true, isSubProcess = detachStdio) { - if (clientModByEnv || userCommands.exists(isClient)) { + lazy val detachStdio = userCommands.exists(_ == BasicCommandStrings.DashDashDetachStdio) + def withStreams[A](f: => A): A = + try { + bootServerSocket.foreach(l => ITerminal.setBootStreams(l.inputStream, l.outputStream)) + ITerminal.withStreams(true, isSubProcess = detachStdio) { + f + } + } finally { + if (ITerminal.isAnsiSupported) { + // Clear any stray progress lines + System.out.print(ConsoleAppender.ClearScreenAfterCursor) + System.out.flush() + } + } + + userCommands match { + case cmds if cmds.exists(isBsp) => + BspClient.run(dealiasBaseDirectory(configuration)) + case cmds if cmds.exists(isNew) => + IO.withTemporaryDirectory { tempDir => + val rebasedConfig = new xsbti.AppConfiguration { + override def arguments: Array[String] = configuration.arguments() + override val baseDirectory: File = tempDir / "new" + override def provider: AppProvider = configuration.provider() + } + val state = StandardMain + .initialState( + rebasedConfig, + Seq(defaults, early), + runEarly(DefaultsCommand) :: runEarly(InitCommand) :: BootCommand :: Nil + ) + StandardMain.runManaged(state) + } + case _ if clientModByEnv || userCommands.exists(isClient) => + withStreams { val args = userCommands.toList.filterNot(isClient) Exit(NetworkClient.run(dealiasBaseDirectory(configuration), args)) - } else { + } + case _ => + withStreams { val state0 = StandardMain .initialState( dealiasBaseDirectory(configuration), @@ -101,15 +133,9 @@ private[sbt] object xMain { try StandardMain.runManaged(state) finally bootServerSocket.foreach(_.close()) } - } } } finally { - // Clear any stray progress lines ShutdownHooks.close() - if (ITerminal.isAnsiSupported) { - System.out.print(ConsoleAppender.ClearScreenAfterCursor) - System.out.flush() - } } } diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 34b1181ef..6c8831bbe 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -33,30 +33,19 @@ private[sbt] object TemplateCommandUtil { private def runTemplate(s0: State, inputArg: Seq[String]): State = { import BuildPaths._ - val extracted0 = (Project extract s0) val globalBase = getGlobalBase(s0) - val stagingDirectory = getStagingDirectory(s0, globalBase).getCanonicalFile - val templateStage = stagingDirectory / "new" - // This moves the target directory to a staging directory - // https://github.com/sbt/sbt/issues/2835 - val state = extracted0.appendWithSession( - Seq( - Keys.target := templateStage - ), - s0 - ) - val infos = (state get templateResolverInfos getOrElse Nil).toList - val log = state.globalLogging.full - val extracted = (Project extract state) - val (s2, ivyConf) = extracted.runTask(Keys.ivyConfiguration, state) + val infos = (s0 get templateResolverInfos getOrElse Nil).toList + val log = s0.globalLogging.full + val extracted = (Project extract s0) + val (s1, ivyConf) = extracted.runTask(Keys.ivyConfiguration, s0) val scalaModuleInfo = extracted.get(Keys.updateSbtClassifiers / Keys.scalaModuleInfo) val arguments = inputArg.toList ++ - (state.remainingCommands match { + (s0.remainingCommands match { case exec :: Nil if exec.commandLine == "shell" => Nil case xs => xs map (_.commandLine) }) - run(infos, arguments, state.configuration, ivyConf, globalBase, scalaModuleInfo, log) - TerminateAction :: s2.copy(remainingCommands = Nil) + run(infos, arguments, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) + TerminateAction :: s1.copy(remainingCommands = Nil) } private def run( From 56c1a0598ccae0d7bebab19d548df98770afc99c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 2 May 2021 21:02:23 -0400 Subject: [PATCH 06/39] Remove a scripted test that uses Bintray --- .../a/src/main/scala/A.scala | 6 ------ .../b/src/main/scala/Main.scala | 14 -------------- .../inter-project-resolvers/build.sbt | 17 ----------------- .../inter-project-resolvers/test | 3 --- 4 files changed, 40 deletions(-) delete mode 100644 sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala delete mode 100644 sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala delete mode 100644 sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt delete mode 100644 sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/test diff --git a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala b/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala deleted file mode 100644 index 954405774..000000000 --- a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala +++ /dev/null @@ -1,6 +0,0 @@ - -case class A(msg: String) - -object A { - def default = A("OK") -} diff --git a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala b/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala deleted file mode 100644 index f2c112187..000000000 --- a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala +++ /dev/null @@ -1,14 +0,0 @@ -import java.io.File -import java.nio.file.Files - -import scalaz.stream._ -import scalaz.concurrent.Task - -object Main extends App { - - val pch = Process.constant((i:Int) => Task.now(())).take(3) - val count = Process.constant(1).toSource.to(pch).runLog.run.size - assert(count == 3) - - Files.write(new File("output").toPath, A.default.msg.getBytes("UTF-8")) -} diff --git a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt b/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt deleted file mode 100644 index 625c7c0d2..000000000 --- a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt +++ /dev/null @@ -1,17 +0,0 @@ -ThisBuild / scalaVersion := "2.11.12" - -lazy val a = project - .settings( - resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases" - ) - -lazy val b = project - .dependsOn(a) - .settings( - // resolver added in inter-project dependency only - should still be fine - libraryDependencies += "org.scalaz.stream" %% "scalaz-stream" % "0.7.1a" - ) - -lazy val root = project - .in(file(".")) - .aggregate(a, b) diff --git a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/test b/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/test deleted file mode 100644 index ea53e1abb..000000000 --- a/sbt-app/src/sbt-test/dependency-management/inter-project-resolvers/test +++ /dev/null @@ -1,3 +0,0 @@ -$ delete output -> b/run -$ exists output From 9cc61015d7c192405b5941559ab487f585a30986 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 2 May 2021 21:56:25 -0400 Subject: [PATCH 07/39] Zinc 1.5.2 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 9e5450767..76a8e06ea 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.5.0") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.0") - val zincVersion = nightlyVersion.getOrElse("1.5.1") + val zincVersion = nightlyVersion.getOrElse("1.5.2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 8f80367e3ccbc02231598b65efd02580b25ae883 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 2 May 2021 23:25:23 -0400 Subject: [PATCH 08/39] Use sbt 1.5.1 --- build.sbt | 100 ++++++++++++++++++-------------- project/HouseRulesPlugin.scala | 2 +- project/PublishBinPlugin.scala | 8 +-- project/SbtLauncherPlugin.scala | 2 +- project/Util.scala | 8 +-- project/build.properties | 2 +- project/plugins.sbt | 2 +- 7 files changed, 69 insertions(+), 55 deletions(-) diff --git a/build.sbt b/build.sbt index 5bfb197a2..279dd8b34 100644 --- a/build.sbt +++ b/build.sbt @@ -73,17 +73,17 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( )(Resolver.ivyStylePatterns), testFrameworks += TestFramework("hedgehog.sbt.Framework"), testFrameworks += TestFramework("verify.runner.Framework"), - concurrentRestrictions in Global += Util.testExclusiveRestriction, - testOptions in Test += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"), - testOptions in Test += Tests.Argument(TestFrameworks.ScalaCheck, "-verbosity", "2"), - javacOptions in compile ++= Seq("-Xlint", "-Xlint:-serial"), + Global / concurrentRestrictions += Util.testExclusiveRestriction, + Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"), + Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-verbosity", "2"), + compile / javacOptions ++= Seq("-Xlint", "-Xlint:-serial"), Compile / doc / scalacOptions ++= { import scala.sys.process._ val devnull = ProcessLogger(_ => ()) val tagOrSha = ("git describe --exact-match" #|| "git rev-parse HEAD").lineStream(devnull).head Seq( "-sourcepath", - (baseDirectory in LocalRootProject).value.getAbsolutePath, + (LocalRootProject / baseDirectory).value.getAbsolutePath, "-doc-source-url", s"https://github.com/sbt/sbt/tree/$tagOrSha€{FILE_PATH}.scala" ) @@ -99,8 +99,8 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( Test / unmanagedSources / inputFileStamps := (Test / unmanagedSources / inputFileStamps).dependsOn(Test / javafmtOnCompile).value, crossScalaVersions := List(scala212, scala213), - publishArtifact in Test := false, - fork in run := true, + Test / publishArtifact := false, + run / fork := true, ) def commonSettings: Seq[Setting[_]] = commonBaseSettings :+ @@ -118,7 +118,12 @@ def baseSettings: Seq[Setting[_]] = def testedBaseSettings: Seq[Setting[_]] = baseSettings ++ testDependencies -val sbt13Plus = Seq("1.3.0") +val sbt13Plus = + Seq( + "1.3.0", + "1.4.0", + "1.5.0", + ) val sbt10Plus = Seq( "1.0.0", @@ -191,8 +196,8 @@ lazy val sbtRoot: Project = (project in file(".")) Transform.conscriptSettings(bundledLauncherProj), publish := {}, publishLocal := {}, - skip in publish := true, - commands in Global += Command + publish / skip := true, + Global / commands += Command .single("sbtOn")((state, dir) => s"sbtProj/test:runMain sbt.RunFromSourceMain $dir" :: state), mimaSettings, mimaPreviousArtifacts := Set.empty, @@ -232,7 +237,7 @@ lazy val bundledLauncherProj = description := "sbt application launcher", autoScalaLibrary := false, crossPaths := false, - packageBin in Compile := sbtLaunchJar.value, + Compile / packageBin := sbtLaunchJar.value, mimaSettings, mimaPreviousArtifacts := Set() ) @@ -369,11 +374,11 @@ lazy val utilLogging = (project in file("internal") / "util-logging") case v if v.startsWith("2.12.") => List("-Ywarn-unused:-locals,-explicits,-privates") case _ => List() }), - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", - managedSourceDirectories in Compile += + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - contrabandFormatsForType in generateContrabands in Compile := { tpe => - val old = (contrabandFormatsForType in generateContrabands in Compile).value + Compile / generateContrabands / contrabandFormatsForType := { tpe => + val old = (Compile / generateContrabands / contrabandFormatsForType).value val name = tpe.removeTypeParameters.name if (name == "Throwable") Nil else old(tpe) @@ -407,6 +412,7 @@ lazy val utilLogging = (project in file("internal") / "util-logging") exclude[IncompatibleSignatureProblem]("sbt.internal.util.MainAppender*"), exclude[MissingTypesProblem]("sbt.internal.util.ConsoleAppender"), exclude[MissingTypesProblem]("sbt.internal.util.BufferedAppender"), + exclude[MissingClassProblem]("sbt.internal.util.Terminal$BlockingInputStream$"), ), ) .configure(addSbtIO) @@ -475,10 +481,10 @@ lazy val testingProj = (project in file("testing")) sjsonNewScalaJson.value ), Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", - managedSourceDirectories in Compile += + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", - contrabandFormatsForType in generateContrabands in Compile := ContrabandConfig.getFormats, + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", + Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats, mimaSettings, mimaBinaryIssueFilters ++= Seq( // private[sbt] @@ -559,6 +565,7 @@ lazy val stdTaskProj = (project in file("tasks-standard")) mimaBinaryIssueFilters ++= Seq( // unused private[sbt] exclude[DirectMissingMethodProblem]("sbt.Task.mapTask"), + exclude[NewMixinForwarderProblem]("sbt.std.TaskExtra.joinAnyTasks"), ), ) .configure(addSbtIO) @@ -571,9 +578,9 @@ lazy val runProj = (project in file("run")) testedBaseSettings, name := "Run", Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", - managedSourceDirectories in Compile += + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", mimaSettings, mimaBinaryIssueFilters ++= Seq( // copy method was never meant to be public @@ -668,6 +675,7 @@ lazy val actionsProj = (project in file("main-actions")) exclude[DirectMissingMethodProblem]("sbt.Doc.generate"), exclude[DirectMissingMethodProblem]("sbt.compiler.Eval.filesModifiedBytes"), exclude[DirectMissingMethodProblem]("sbt.compiler.Eval.fileModifiedBytes"), + exclude[DirectMissingMethodProblem]("sbt.Doc.$init$"), ), ) .configure( @@ -687,10 +695,10 @@ lazy val protocolProj = (project in file("protocol")) name := "Protocol", libraryDependencies ++= Seq(sjsonNewScalaJson.value, ipcSocket), Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", - managedSourceDirectories in Compile += + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", - contrabandFormatsForType in generateContrabands in Compile := ContrabandConfig.getFormats, + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", + Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats, mimaSettings, mimaBinaryIssueFilters ++= Seq( // copy method was never meant to be public @@ -729,10 +737,10 @@ lazy val commandProj = (project in file("main-command")) name := "Command", libraryDependencies ++= Seq(launcherInterface, sjsonNewScalaJson.value, templateResolverApi), Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", - managedSourceDirectories in Compile += + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", - contrabandFormatsForType in generateContrabands in Compile := ContrabandConfig.getFormats, + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", + Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats, mimaSettings, mimaBinaryIssueFilters ++= Vector( exclude[DirectMissingMethodProblem]("sbt.Exit.apply"), @@ -766,8 +774,8 @@ lazy val commandProj = (project in file("main-command")) exclude[MissingTypesProblem]("sbt.internal.server.ServerConnection*"), exclude[IncompatibleSignatureProblem]("sbt.internal.server.ServerConnection.*") ), - unmanagedSources in (Compile, headerCreate) := { - val old = (unmanagedSources in (Compile, headerCreate)).value + Compile / headerCreate / unmanagedSources := { + val old = (Compile / headerCreate / unmanagedSources).value old filterNot { x => (x.getName startsWith "NG") || (x.getName == "ReferenceCountedFileDescriptor.java") } @@ -807,7 +815,7 @@ lazy val mainSettingsProj = (project in file("main-settings")) .settings( testedBaseSettings, name := "Main Settings", - testOptions in Test ++= { + Test / testOptions ++= { val cp = (Test / fullClasspathAsJars).value.map(_.data).mkString(java.io.File.pathSeparator) val framework = TestFrameworks.ScalaTest Tests.Argument(framework, s"-Dsbt.server.classpath=$cp") :: @@ -861,7 +869,7 @@ lazy val zincLmIntegrationProj = (project in file("zinc-lm-integration")) .settings( name := "Zinc LM Integration", testedBaseSettings, - testOptions in Test += + Test / testOptions += Tests.Argument(TestFrameworks.ScalaTest, s"-Dsbt.zinc.version=$zincVersion"), mimaSettingsSince(sbt13Plus), mimaBinaryIssueFilters ++= Seq( @@ -903,10 +911,10 @@ lazy val mainProj = (project in file("main")) case v if v.startsWith("2.12.") => List() case _ => List(scalaPar) }), - managedSourceDirectories in Compile += + Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", - sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala", - testOptions in Test += Tests + Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", + Test / testOptions += Tests .Argument(TestFrameworks.ScalaCheck, "-minSuccessfulTests", "1000"), SettingKey[Boolean]("usePipelining") := false, mimaSettings, @@ -1025,6 +1033,10 @@ lazy val mainProj = (project in file("main")) exclude[IncompatibleSignatureProblem]("sbt.internal.Act.taskAxis"), // private[sbt] method, used to call the correct sourcePositionMapper exclude[DirectMissingMethodProblem]("sbt.Defaults.foldMappers"), + exclude[DirectMissingMethodProblem]("sbt.Defaults.toAbsoluteSourceMapper"), + exclude[DirectMissingMethodProblem]("sbt.Defaults.earlyArtifactPathSetting"), + exclude[MissingClassProblem]("sbt.internal.server.BuildServerReporter$"), + exclude[IncompatibleTemplateDefProblem]("sbt.internal.server.BuildServerReporter"), ) ) .configure( @@ -1059,7 +1071,7 @@ lazy val sbtProj = (project in file("sbt-app")) Test / run / connectInput := true, Test / run / outputStrategy := Some(StdoutOutput), Test / run / fork := true, - testOptions in Test ++= { + Test / testOptions ++= { val cp = (Test / fullClasspathAsJars).value.map(_.data).mkString(java.io.File.pathSeparator) val framework = TestFrameworks.ScalaTest Tests.Argument(framework, s"-Dsbt.server.classpath=$cp") :: @@ -1302,6 +1314,8 @@ lazy val sbtIgnoredProblems = { exclude[ReversedMissingMethodProblem]("sbt.Import.sbt$Import$_setter_$SemanticSelector_="), // Dropped in favour of plain scala.Function, and its compose method exclude[DirectMissingMethodProblem]("sbt.package.toFn1"), + exclude[NewMixinForwarderProblem]("sbt.IOSyntax1.singleFileFinder"), + exclude[DirectMissingMethodProblem]("sbt.IOSyntax1.$init$"), ) } @@ -1320,8 +1334,8 @@ lazy val vscodePlugin = (project in file("vscode-sbt-scala")) bspEnabled := false, crossPaths := false, crossScalaVersions := Seq(baseScalaVersion), - skip in publish := true, - compile in Compile := { + publish / skip := true, + Compile / compile := { val _ = update.value runNpm("run compile", baseDirectory.value, streams.value.log) sbt.internal.inc.Analysis.empty @@ -1355,7 +1369,7 @@ def scriptedTask(launch: Boolean): Def.Initialize[InputTask[Unit]] = Def.inputTa val _ = publishLocalBinAll.value val launchJar = s"-Dsbt.launch.jar=${(bundledLauncherProj / Compile / packageBin).value}" Scripted.doScripted( - (scalaInstance in scriptedSbtReduxProj).value, + (scriptedSbtReduxProj / scalaInstance).value, scriptedSource.value, scriptedBufferLog.value, Def.setting(Scripted.scriptedParser(scriptedSource.value)).parsed, @@ -1421,9 +1435,9 @@ def otherRootSettings = Seq( scripted := scriptedTask(false).evaluated, scriptedUnpublished := scriptedTask(false).evaluated, - scriptedSource := (sourceDirectory in sbtProj).value / "sbt-test", - watchTriggers in scripted += scriptedSource.value.toGlob / **, - watchTriggers in scriptedUnpublished := (watchTriggers in scripted).value, + scriptedSource := (sbtProj / sourceDirectory).value / "sbt-test", + scripted / watchTriggers += scriptedSource.value.toGlob / **, + scriptedUnpublished / watchTriggers := (scripted / watchTriggers).value, scriptedLaunchOpts := List("-Xmx1500M", "-Xms512M", "-server") ::: (sys.props.get("sbt.ivy.home") match { case Some(home) => List(s"-Dsbt.ivy.home=$home") @@ -1447,7 +1461,7 @@ def otherRootSettings = }), scripted := scriptedTask(true).evaluated, scriptedUnpublished := scriptedTask(true).evaluated, - scriptedSource := (sourceDirectory in sbtProj).value / "repo-override-test" + scriptedSource := (sbtProj / sourceDirectory).value / "repo-override-test" ) ) @@ -1501,8 +1515,8 @@ def customCommands: Seq[Setting[_]] = Seq( (lmOpt map { case ProjectRef(build, _) => "{" + build.toString + "}/publishLocal" }).toList ::: (zincOpt map { case ProjectRef(build, _) => - val zincSv = get(scalaVersion in ProjectRef(build, "zinc")) - val csv = get(crossScalaVersions in ProjectRef(build, "compilerBridge")).toList + val zincSv = get((ProjectRef(build, "zinc") / scalaVersion)) + val csv = get((ProjectRef(build, "compilerBridge") / crossScalaVersions)).toList (csv flatMap { bridgeSv => s"++$bridgeSv" :: ("{" + build.toString + "}compilerBridge/publishLocal") :: Nil }) ::: diff --git a/project/HouseRulesPlugin.scala b/project/HouseRulesPlugin.scala index 42d1c2e6d..4a0b9fa1e 100644 --- a/project/HouseRulesPlugin.scala +++ b/project/HouseRulesPlugin.scala @@ -30,7 +30,7 @@ object HouseRulesPlugin extends AutoPlugin { scalacOptions += "-Ywarn-value-discard", scalacOptions ++= "-Ywarn-unused-import".ifScala(v => 11 <= v && v <= 12).value.toList ) ++ Seq(Compile, Test).flatMap( - c => scalacOptions in (c, console) --= Seq("-Ywarn-unused-import", "-Xlint") + c => (c / console / scalacOptions) --= Seq("-Ywarn-unused-import", "-Xlint") ) private def scalaPartV = Def setting (CrossVersion partialVersion scalaVersion.value) diff --git a/project/PublishBinPlugin.scala b/project/PublishBinPlugin.scala index 804f6461a..5e5397c4b 100644 --- a/project/PublishBinPlugin.scala +++ b/project/PublishBinPlugin.scala @@ -27,8 +27,8 @@ object PublishBinPlugin extends AutoPlugin { Classpaths.deliverPattern(crossTarget.value), if (isSnapshot.value) "integration" else "release", ivyConfigurations.value.map(c => ConfigRef(c.name)).toVector, - (packagedArtifacts in publishLocalBin).value.toVector, - (checksums in publishLocalBin).value.toVector, + (publishLocalBin / packagedArtifacts).value.toVector, + (publishLocalBin / checksums).value.toVector, logging = ivyLoggingLevel.value, overwrite = isSnapshot.value ), @@ -59,9 +59,9 @@ object PublishBinPlugin extends AutoPlugin { dummyFile }, dummyDoc / packagedArtifact := (Compile / packageDoc / artifact).value -> dummyDoc.value, - packagedArtifacts in publishLocalBin := + publishLocalBin / packagedArtifacts := Classpaths - .packaged(Seq(packageBin in Compile, packageSrc in Compile, makePom, dummyDoc)) + .packaged(Seq(Compile / packageBin, Compile / packageSrc, makePom, dummyDoc)) .value ) } diff --git a/project/SbtLauncherPlugin.scala b/project/SbtLauncherPlugin.scala index 0c24d2de5..65f9f2e67 100644 --- a/project/SbtLauncherPlugin.scala +++ b/project/SbtLauncherPlugin.scala @@ -26,7 +26,7 @@ object SbtLauncherPlugin extends AutoPlugin { } }, sbtLaunchJar := { - val propFiles = (resources in Compile).value + val propFiles = (Compile / resources).value val propFileLocations = for (file <- propFiles; if file.getName != "resources") yield { if (file.getName == "sbt.boot.properties") "sbt/sbt.boot.properties" -> file diff --git a/project/Util.scala b/project/Util.scala index 8618f206d..cf8b75cc8 100644 --- a/project/Util.scala +++ b/project/Util.scala @@ -22,7 +22,7 @@ object Util { lazy val javaOnlySettings: Seq[Setting[_]] = Seq( // crossPaths := false, // compileOrder := CompileOrder.JavaThenScala, - unmanagedSourceDirectories in Compile := Seq((javaSource in Compile).value) + Compile / unmanagedSourceDirectories := Seq((Compile / javaSource).value) ) lazy val baseScalacOptions = Seq( @@ -131,7 +131,7 @@ object Util { def excludePomArtifact(artifactId: String) = (artifactId startsWith "compiler-bridge") - val testExclusive = tags in test += ((ExclusiveTest, 1)) + val testExclusive = test / tags += (ExclusiveTest, 1) // TODO: replace with Tags.exclusive after 0.12.0 val testExclusiveRestriction = Tags.customLimit { (tags: Map[Tags.Tag, Int]) => @@ -184,9 +184,9 @@ object Licensed { def settings: Seq[Setting[_]] = Seq( notice := (baseDirectory.value / "NOTICE"), - unmanagedResources in Compile ++= notice.value +: extractLicenses.value, + Compile / unmanagedResources ++= notice.value +: extractLicenses.value, extractLicenses := extractLicenses0( - (baseDirectory in ThisBuild).value, + (ThisBuild / baseDirectory).value, notice.value, streams.value ) diff --git a/project/build.properties b/project/build.properties index dbae93bcf..f0be67b9f 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.4.9 +sbt.version=1.5.1 diff --git a/project/plugins.sbt b/project/plugins.sbt index 6fd8635fe..245e11f02 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -9,5 +9,5 @@ addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.5.1") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "3.0.2") addSbtPlugin("com.lightbend" % "sbt-whitesource" % "0.1.14") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9") -addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.6.1") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.8.1") addSbtPlugin("com.swoval" % "sbt-java-format" % "0.3.1") From e1c29369c0fdec5f4341ea15ba9fb33fd64b3566 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 2 May 2021 23:51:42 -0400 Subject: [PATCH 09/39] Fork mainProj ``` [error] (zincLmIntegrationProj / Test / executeTests) java.lang.LinkageError: loader constraint violation in interface itable initialization for class sbt.internal.inc.ZincComponentCompiler$ZincCompilerBridgeProvider: when selecting method 'xsbti.compile.ScalaInstance xsbti.compile.CompilerBridgeProvider.fetchScalaInstance(java.lang.String, xsbti.Logger)' the class loader sbt.internal.SbtInterfaceLoader @1224144a for super interface xsbti.compile.CompilerBridgeProvider, and the class loader sbt.internal.BottomClassLoader @52daa20b of the selected method's class, sbt.internal.inc.ZincComponentCompiler$ZincCompilerBridgeProvider have different Class objects for the type xsbti.Logger used in the signature (xsbti.compile.CompilerBridgeProvider is in unnamed module of loader sbt.internal.SbtInterfaceLoader @1224144a, parent loader sbt.internal.MetaBuildLoader$1 @6f36c2f0; sbt.internal.inc.ZincComponentCompiler$ZincCompilerBridgeProvider is in unnamed module of loader sbt.internal.BottomClassLoader @52daa20b, parent loader sbt.internal.ReverseLookupClassLoader @39b00393) ``` --- build.sbt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.sbt b/build.sbt index 279dd8b34..5589af998 100644 --- a/build.sbt +++ b/build.sbt @@ -878,6 +878,7 @@ lazy val zincLmIntegrationProj = (project in file("zinc-lm-integration")) exclude[IncompatibleSignatureProblem]("sbt.internal.inc.ZincLMHelper.update"), ), libraryDependencies += launcherInterface, + Test / fork := true, ) .configure(addSbtZincCompileCore, addSbtLmCore, addSbtLmIvyTest) @@ -916,6 +917,7 @@ lazy val mainProj = (project in file("main")) Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", Test / testOptions += Tests .Argument(TestFrameworks.ScalaCheck, "-minSuccessfulTests", "1000"), + Test / fork := true, SettingKey[Boolean]("usePipelining") := false, mimaSettings, mimaBinaryIssueFilters ++= Vector( From a07bd46cdb95da6491d9a44b4a18e98216018bd5 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 3 May 2021 11:18:12 +0200 Subject: [PATCH 10/39] Add util-interface to SbtInterfaceLoader --- .../main/java/sbt/internal/MetaBuildLoader.java | 16 ++++++++++++---- .../java/sbt/internal/SbtInterfaceLoader.java | 8 +++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/main/src/main/java/sbt/internal/MetaBuildLoader.java b/main/src/main/java/sbt/internal/MetaBuildLoader.java index dd4c9a4b7..05cef0f02 100644 --- a/main/src/main/java/sbt/internal/MetaBuildLoader.java +++ b/main/src/main/java/sbt/internal/MetaBuildLoader.java @@ -67,15 +67,21 @@ public final class MetaBuildLoader extends URLClassLoader { final String jlineJars = "jline-?[0-9.]+-sbt-.*|jline-terminal(-(jna|jansi))?-[0-9.]+"; final String testInterfaceJars = "test-interface(-.*)?"; final String compilerInterfaceJars = "compiler-interface(-.*)?"; + final String utilInterfaceJars = "util-interface(-.*)?"; final String jansiJars = "jansi-[0-9.]+"; final String jnaJars = "jna-(platform-)?[0-9.]+"; final String fullPattern = String.format( - "^(%s|%s|%s|%s|%s)\\.jar", - jlineJars, testInterfaceJars, compilerInterfaceJars, jansiJars, jnaJars); + "^(%s|%s|%s|%s|%s|%s)\\.jar", + jlineJars, + testInterfaceJars, + compilerInterfaceJars, + utilInterfaceJars, + jansiJars, + jnaJars); final Pattern pattern = Pattern.compile(fullPattern); final File[] cp = appProvider.mainClasspath(); - final URL[] interfaceURLs = new URL[2]; + final URL[] interfaceURLs = new URL[3]; final URL[] jlineURLs = new URL[7]; final File[] extra = appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra(); @@ -86,7 +92,9 @@ public final class MetaBuildLoader extends URLClassLoader { int jlineIndex = 0; for (final File file : cp) { final String name = file.getName(); - if ((name.contains("test-interface") || name.contains("compiler-interface")) + if ((name.contains("test-interface") + || name.contains("compiler-interface") + || name.contains("util-interface")) && pattern.matcher(name).find()) { interfaceURLs[interfaceIndex] = file.toURI().toURL(); interfaceIndex += 1; diff --git a/main/src/main/java/sbt/internal/SbtInterfaceLoader.java b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java index 27199529a..7d8d75450 100644 --- a/main/src/main/java/sbt/internal/SbtInterfaceLoader.java +++ b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java @@ -18,7 +18,13 @@ class SbtInterfaceLoader extends URLClassLoader { @Override public String toString() { - return "SbtInterfaceClassLoader(" + getURLs()[0] + ")"; + final StringBuilder builder = new StringBuilder(); + URL[] urls = getURLs(); + for (int i = 0; i < urls.length; ++i) { + builder.append(urls[i].toString()); + if (i < urls.length - 2) builder.append(", "); + } + return "SbtInterfaceClassLoader(" + builder + ")"; } static { From b8b10cdaa95843a3818f81a44b9f06ebc50618a6 Mon Sep 17 00:00:00 2001 From: Regis Desgroppes Date: Mon, 3 May 2021 16:31:37 +0200 Subject: [PATCH 11/39] Remove trailing closing braces Let me apologize for this typo in #6483. --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index cfd9eba4b..38f54e25a 100755 --- a/sbt +++ b/sbt @@ -344,7 +344,7 @@ getPreloaded() { [ "$global_base" ] && echo "$global_base/preloaded" && return local user_home && user_home=$(findProperty user.home) - echo "${user_home:-$HOME}/.sbt/preloaded}}" + echo "${user_home:-$HOME}/.sbt/preloaded" } syncPreloaded() { From fcab06bd3d01e1b90b082eab9a9c779e47243be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Fri, 7 May 2021 11:58:18 +0200 Subject: [PATCH 12/39] Add missing scalac options to scaladoc task configuration --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 60e827c26..8a77d5a9e 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2107,7 +2107,7 @@ object Defaults extends BuildCommon { val projectName = name.value if (ScalaArtifacts.isScala3(sv)) { val project = if (config == Compile) projectName else s"$projectName-$config" - Seq("-project", project) + compileOptions ++ Seq("-project", project) } else compileOptions }, (TaskZero / key) := { From f12b0baef02a40ccd220b00aa9ea51a57f762206 Mon Sep 17 00:00:00 2001 From: Amina Adewusi Date: Fri, 7 May 2021 16:07:33 +0100 Subject: [PATCH 13/39] make -client the same as --client The problem was that -client was different from --client, which makes for a confusing user experience. So, this change makes them the same and re-names -client to --java-client. The value of this is that hopefully -client and --client being the same feels more logical to users. --- .../src/main/scala/sbt/BasicCommandStrings.scala | 1 + main/src/main/scala/sbt/Main.scala | 12 ++++++------ sbt | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/main-command/src/main/scala/sbt/BasicCommandStrings.scala b/main-command/src/main/scala/sbt/BasicCommandStrings.scala index d7a310929..f70e350d6 100644 --- a/main-command/src/main/scala/sbt/BasicCommandStrings.scala +++ b/main-command/src/main/scala/sbt/BasicCommandStrings.scala @@ -210,6 +210,7 @@ $AliasCommand name= def Client: String = "client" def ClientDetailed: String = "Provides an interactive prompt from which commands can be run on a server." + def JavaClient: String = "--java-client" def DashClient: String = "-client" def DashDashClient: String = "--client" def DashDashDetachStdio: String = "--detach-stdio" diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 2064fa514..6475bd162 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -15,7 +15,7 @@ import java.util.Properties import java.util.concurrent.ForkJoinPool import java.util.concurrent.atomic.AtomicBoolean -import sbt.BasicCommandStrings.{ Shell, Shutdown, TemplateCommand } +import sbt.BasicCommandStrings.{ JavaClient, Shell, Shutdown, TemplateCommand } import sbt.Project.LoadAction import sbt.compiler.EvalImports import sbt.internal.Aggregation.AnyKeys @@ -23,22 +23,22 @@ import sbt.internal.CommandStrings.BootCommand import sbt.internal._ import sbt.internal.client.BspClient import sbt.internal.inc.ScalaInstance +import sbt.internal.io.Retry import sbt.internal.nio.{ CheckBuildSources, FileTreeRepository } import sbt.internal.server.{ BuildServerProtocol, NetworkChannel } import sbt.internal.util.Types.{ const, idFun } -import sbt.internal.util.{ Terminal => ITerminal, _ } import sbt.internal.util.complete.{ Parser, SizeParser } +import sbt.internal.util.{ Terminal => ITerminal, _ } import sbt.io._ import sbt.io.syntax._ import sbt.util.{ Level, Logger, Show } +import xsbti.AppProvider import xsbti.compile.CompilerCache import scala.annotation.{ nowarn, tailrec } import scala.concurrent.ExecutionContext import scala.concurrent.duration.Duration import scala.util.control.NonFatal -import sbt.internal.io.Retry -import xsbti.AppProvider /** This class is the entry point for sbt. */ final class xMain extends xsbti.AppMain { @@ -58,7 +58,7 @@ private[sbt] object xMain { } private[sbt] def run(configuration: xsbti.AppConfiguration): xsbti.MainResult = { try { - import BasicCommandStrings.{ DashClient, DashDashClient, DashDashServer, runEarly } + import BasicCommandStrings.{ DashDashClient, DashDashServer, runEarly } import BasicCommands.early import BuiltinCommands.defaults import sbt.internal.CommandStrings.{ BootCommand, DefaultsCommand, InitCommand } @@ -69,7 +69,7 @@ private[sbt] object xMain { val userCommands = configuration.arguments .map(_.trim) .filterNot(_ == DashDashServer) - val isClient: String => Boolean = cmd => (cmd == DashClient) || (cmd == DashDashClient) + val isClient: String => Boolean = cmd => (cmd == JavaClient) || (cmd == DashDashClient) val isBsp: String => Boolean = cmd => (cmd == "-bsp") || (cmd == "--bsp") val isServer = !userCommands.exists(c => isBsp(c) || isClient(c)) val bootServerSocket = if (isServer) getSocketOrExit(configuration) match { diff --git a/sbt b/sbt index 36b36af26..cbe196ec1 100755 --- a/sbt +++ b/sbt @@ -582,7 +582,7 @@ process_args () { --numeric-version) print_sbt_version=1 && shift ;; --script-version) print_sbt_script_version=1 && shift ;; -d|-debug|--debug) sbt_debug=1 && addSbt "-debug" && shift ;; - --client) use_sbtn=1 && shift ;; + -client|--client) use_sbtn=1 && shift ;; --server) use_sbtn=0 && shift ;; -mem|--mem) require_arg integer "$1" "$2" && addMemory "$2" && shift 2 ;; From 3d72b6c660c031c1aa7c5cdbd52fdfb8ad2de4e7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 May 2021 01:58:26 -0400 Subject: [PATCH 14/39] Zinc 1.5.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 76a8e06ea..7b2a83151 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.5.0") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.0") - val zincVersion = nightlyVersion.getOrElse("1.5.2") + val zincVersion = nightlyVersion.getOrElse("1.5.3") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 25148899a17ef683f3c66a22a167120d95f7b6ac Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 May 2021 18:55:04 -0400 Subject: [PATCH 15/39] Skip zip file manipulation if the package is empty Fixes https://github.com/sbt/sbt/issues/6497 --- main/src/main/scala/sbt/internal/RemoteCache.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/RemoteCache.scala b/main/src/main/scala/sbt/internal/RemoteCache.scala index 6e46f607f..4c885551f 100644 --- a/main/src/main/scala/sbt/internal/RemoteCache.scala +++ b/main/src/main/scala/sbt/internal/RemoteCache.scala @@ -163,7 +163,8 @@ object RemoteCache { val artp = artifactPath.value val af = compileAnalysisFile.value IO.copyFile(original, artp) - if (af.exists) { + // skip zip manipulation if the artp is a blank file + if (af.exists && artp.length() > 0) { JarUtils.includeInJar(artp, Vector(af -> s"META-INF/inc_compile.zip")) } // val testStream = (test / streams).?.value From fc00de02b49f40e27e7e781803bc0c5f3324c678 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 May 2021 18:22:03 -0400 Subject: [PATCH 16/39] A quick workaround for 404 Ref https://github.com/sbt/sbt/issues/6487 --- build.sbt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.sbt b/build.sbt index 5589af998..ed9365298 100644 --- a/build.sbt +++ b/build.sbt @@ -77,6 +77,7 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"), Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-verbosity", "2"), compile / javacOptions ++= Seq("-Xlint", "-Xlint:-serial"), + /* Compile / doc / scalacOptions ++= { import scala.sys.process._ val devnull = ProcessLogger(_ => ()) @@ -88,6 +89,7 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( s"https://github.com/sbt/sbt/tree/$tagOrSha€{FILE_PATH}.scala" ) }, + */ Compile / javafmtOnCompile := Def .taskDyn(if ((scalafmtOnCompile).value) Compile / javafmt else Def.task(())) .value, From b50a3ff0feb16e869a415c903f578079080c2560 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 May 2021 20:26:59 -0400 Subject: [PATCH 17/39] sbt 1.5.2 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index ed9365298..b7f98bffe 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.5.2-SNAPSHOT" + val v = "1.5.3-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index 2e6c96556..200fd278d 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.5.1" +declare builtin_sbt_version="1.5.2" declare -a residual_args declare -a java_args declare -a scalac_args From ce59ea754a12709a978ac1f54306a81c6c6d68d7 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 10 May 2021 11:32:33 +0200 Subject: [PATCH 18/39] expose makeScalaInstance --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 60e827c26..933b046b4 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1143,7 +1143,7 @@ object Defaults extends BuildCommon { scalaInstanceTopLoader.value, ) } - private def makeScalaInstance( + def makeScalaInstance( version: String, libraryJars: Array[File], allCompilerJars: Seq[File], From baf6678f839b716d34a9d00335c62bcbbe0f20ae Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 10 May 2021 11:52:51 +0200 Subject: [PATCH 19/39] Remove forking in Test --- build.sbt | 2 -- project/build.properties | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index b7f98bffe..b0beac8ea 100644 --- a/build.sbt +++ b/build.sbt @@ -880,7 +880,6 @@ lazy val zincLmIntegrationProj = (project in file("zinc-lm-integration")) exclude[IncompatibleSignatureProblem]("sbt.internal.inc.ZincLMHelper.update"), ), libraryDependencies += launcherInterface, - Test / fork := true, ) .configure(addSbtZincCompileCore, addSbtLmCore, addSbtLmIvyTest) @@ -919,7 +918,6 @@ lazy val mainProj = (project in file("main")) Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", Test / testOptions += Tests .Argument(TestFrameworks.ScalaCheck, "-minSuccessfulTests", "1000"), - Test / fork := true, SettingKey[Boolean]("usePipelining") := false, mimaSettings, mimaBinaryIssueFilters ++= Vector( diff --git a/project/build.properties b/project/build.properties index f0be67b9f..19479ba46 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.1 +sbt.version=1.5.2 From 622eabfa953b6e878e7a4479e1a0c69104b5bd17 Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Sat, 15 May 2021 22:07:33 +0200 Subject: [PATCH 20/39] dedup unmanagedSourceDirectories for Scala 3 For Scala 3, scalaBinaryVersion == epochVersion --- main/src/main/scala/sbt/Defaults.scala | 2 +- .../sbt-test/project/scala3-binary-version/build.sbt | 11 +++++++++++ .../src/sbt-test/project/scala3-binary-version/test | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 sbt-app/src/sbt-test/project/scala3-binary-version/build.sbt create mode 100644 sbt-app/src/sbt-test/project/scala3-binary-version/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 933b046b4..896c51c07 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -745,7 +745,7 @@ object Defaults extends BuildCommon { scalaSrcDir.getParentFile / s"${scalaSrcDir.name}-$sv", scalaSrcDir.getParentFile / s"${scalaSrcDir.name}-$epochVersion", javaSrcDir, - ) + ).distinct else Seq(scalaSrcDir, javaSrcDir) } diff --git a/sbt-app/src/sbt-test/project/scala3-binary-version/build.sbt b/sbt-app/src/sbt-test/project/scala3-binary-version/build.sbt new file mode 100644 index 000000000..521755296 --- /dev/null +++ b/sbt-app/src/sbt-test/project/scala3-binary-version/build.sbt @@ -0,0 +1,11 @@ +ThisBuild / scalaVersion := "3.0.0" + +lazy val check = taskKey[Unit]("check") + +lazy val root = project.in(file(".")) + .settings( + check := { + val dirs = (Compile / unmanagedSourceDirectories).value + assert(dirs == dirs.distinct) + } + ) diff --git a/sbt-app/src/sbt-test/project/scala3-binary-version/test b/sbt-app/src/sbt-test/project/scala3-binary-version/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt-app/src/sbt-test/project/scala3-binary-version/test @@ -0,0 +1 @@ +> check From 90b938e480c3c7b523b85c0ae932fe1f3c2beb27 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 17 May 2021 15:40:30 -0400 Subject: [PATCH 21/39] Implement sbtn downloading --- .github/workflows/ci.yml | 22 ++++++++++++++++--- launcher-package/build.sbt | 1 + sbt | 45 +++++++++++++++++++++++++++++++++++--- 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4f15d4dc..e0e53c8b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 SCALA_212: 2.12.13 SCALA_213: 2.13.3 - UTIL_TESTS: utilCache/test;utilControl/test;utilInterface/test;utilLogging/test;utilPosition/test;utilRelation/test;utilScripted/test;utilTracking/test + UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false TEST_SBT_VER: 1.5.0 SBT_ETC_FILE: $HOME/etc/sbt/sbtopts @@ -90,7 +90,23 @@ jobs: rm -rf "$HOME/.sbt/scripted/" || true case ${{ matrix.jobtype }} in 1) - ./sbt -v "mimaReportBinaryIssues ; javafmtCheck ; Test / javafmtCheck; scalafmtCheckAll ; scalafmtSbtCheck; serverTestProj/scalafmtCheckAll; headerCheck ;test:headerCheck ;whitesourceOnPush ;test:compile; publishLocal; test; serverTestProj/test; doc; $UTIL_TESTS; ++$SCALA_213; $UTIL_TESTS" + ./sbt -v --client mimaReportBinaryIssues + ./sbt -v --client javafmtCheck + ./sbt -v --client "Test/javafmtCheck" + ./sbt -v --client scalafmtCheckAll + ./sbt -v --client scalafmtSbtCheck + ./sbt -v --client serverTestProj/scalafmtCheckAll + ./sbt -v --client headerCheck + ./sbt -v --client "Test/headerCheck" + ./sbt -v --client whitesourceOnPush + ./sbt -v --client "Test/compile" + ./sbt -v --client publishLocal + ./sbt -v --client test + ./sbt -v --client "serverTestProj/test" + ./sbt -v --client doc + ./sbt -v --client "all $UTIL_TESTS" + ./sbt -v --client ++$SCALA_213 + ./sbt -v --client "all $UTIL_TESTS" ;; 2) ./sbt -v "scripted actions/* apiinfo/* compiler-project/* ivy-deps-management/* reporter/* tests/* watch/* classloader-cache/* package/*" @@ -112,7 +128,7 @@ jobs: cd ../ sbt -Dsbtlm.path=$HOME/work/sbt/sbt/librarymanagement -Dsbtzinc.path=$HOME/work/sbt/sbt/zinc -Dsbt.build.version=$BUILD_VERSION -Dsbt.build.fatal=false "+lowerUtils/publishLocal; {librarymanagement}/publishLocal; {zinc}/publishLocal; upperModules/publishLocal" rm -r $(find $HOME/.sbt/boot -name "*-SNAPSHOT") || true - sbt -v -Dsbt.version=$BUILD_VERSION "++$SCALA_213; $UTIL_TESTS; ++$SCALA_212; $UTIL_TESTS; scripted actions/* source-dependencies/*1of3 dependency-management/*1of4 java/*" + sbt -v -Dsbt.version=$BUILD_VERSION "++$SCALA_213; all $UTIL_TESTS; ++$SCALA_212; all $UTIL_TESTS; scripted actions/* source-dependencies/*1of3 dependency-management/*1of4 java/*" ;; 7) # test launcher script diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 4896e19bd..f4289c4a4 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -118,6 +118,7 @@ val root = (project in file(".")). // TODO - GPG Trust validation. file }, + // update sbt.sh at root sbtnVersion := "1.4.7", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { diff --git a/sbt b/sbt index 200fd278d..8c0a4d8af 100755 --- a/sbt +++ b/sbt @@ -22,6 +22,7 @@ declare sbt_debug= declare build_props_sbt_version= declare use_sbtn= declare sbtn_command="$SBTN_CMD" +declare sbtn_version="1.4.7" ### ------------------------------- ### ### Helper methods for BASH scripts ### @@ -154,6 +155,42 @@ acquire_sbt_jar () { fi } +acquire_sbtn () { + local sbtn_v="$1" + local user_home && user_home=$(findProperty user.home) + local p="${user_home:-$HOME}/.cache/sbt/boot/sbtn/$sbtn_v" + local target="$p/sbtn" + local archive_target= + local url= + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + archive_target="$p/sbtn-x86_64-pc-linux-${sbtn_v}.tar.gz" + url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-pc-linux-${sbtn_v}.tar.gz" + elif [[ "$OSTYPE" == "darwin"* ]]; then + archive_target="$p/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" + url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" + elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then + target="$p/sbtn.exe" + archive_target="$p/sbtn-x86_64-pc-win32-${sbtn_v}.zip" + url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-pc-win32-${sbtn_v}.zip" + else + echoerr "sbtn is not supported on $OSTYPE" + exit 2 + fi + + if [[ -f "$target" ]]; then + sbtn_command="$target" + else + echoerr "downloading sbtn ${sbtn_v}" + download_url "$url" "$archive_target" + if [[ "$OSTYPE" == "linux-gnu"* ]] || [[ "$OSTYPE" == "darwin"* ]]; then + tar zxf "$archive_target" --directory "$p" + else + unzip "$archive_target" -d "$p" + fi + sbtn_command="$target" + fi +} + # execRunner should be called only once to give up control to java execRunner () { # print the arguments one to a line, quoting any containing spaces @@ -661,7 +698,7 @@ isRunNativeClient() { sbtBinaryV_1=$(echo "$sbtV" | sed 's/^\([0-9]*\)\.\([0-9]*\).*$/\1/') sbtBinaryV_2=$(echo "$sbtV" | sed 's/^\([0-9]*\)\.\([0-9]*\).*$/\2/') if (( $sbtBinaryV_1 >= 2 )) || ( (( $sbtBinaryV_1 >= 1 )) && (( $sbtBinaryV_2 >= 4 )) ); then - if [[ "$use_sbtn" == "1" ]] && [[ "$sbtn_command" != "" ]]; then + if [[ "$use_sbtn" == "1" ]]; then echo "true" else echo "false" @@ -673,6 +710,10 @@ isRunNativeClient() { runNativeClient() { vlog "[debug] running native client" + detectNativeClient + [[ -f "$sbtn_command" ]] || acquire_sbtn "$sbtn_version" || { + exit 1 + } for i in "${!original_args[@]}"; do if [[ "${original_args[i]}" = "--client" ]]; then unset 'original_args[i]' @@ -702,8 +743,6 @@ original_args=("$@") [[ -f "$build_props_file" ]] && loadPropFile "$build_props_file" -detectNativeClient - java_args=($JAVA_OPTS) sbt_options0=(${SBT_OPTS:-$default_sbt_opts}) if [[ "$SBT_NATIVE_CLIENT" == "true" ]]; then From 2e6fb3f2a5c915de1598ea363190ce0a2a5733cd Mon Sep 17 00:00:00 2001 From: Amina Adewusi Date: Fri, 21 May 2021 16:32:29 +0100 Subject: [PATCH 22/39] Fix nowarn in both old & new sbt plugin styles Fixes #6430. What is the problem? As detailed in #6430, the @nowarn annotation was not suppressing warnings, even after the first attempt to fix this in PR#6431. This first PR fixed the problem for projects using enablePlugins(SbtPlugin), but not for those using sbtPlugin := true. Why is this a valuable problem to solve? The annotation was not working as users would expect. What is this solution? I have moved the scalacOptions change from SbtPlugin.projectSettings to the scalacOptions in the JvmPlugin settings. Has this been tested? Yes, a test has been added. Also, this branch was tested successfully on the twinagle repo (https://github.com/soundcloud/twinagle/pull/224). --- main/src/main/scala/sbt/Defaults.scala | 7 +++++++ main/src/main/scala/sbt/plugins/SbtPlugin.scala | 17 +++-------------- .../project/sbt-plugin/changes/oldSbtPlugin.sbt | 6 ++++++ sbt-app/src/sbt-test/project/sbt-plugin/test | 2 ++ 4 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 95cbb0a4a..984f3282c 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -959,6 +959,13 @@ object Defaults extends BuildCommon { Vector("-Ypickle-java", "-Ypickle-write", converter.toPath(earlyOutput.value).toString) ++ old else old }, + scalacOptions := { + val old = scalacOptions.value + if (sbtPlugin.value && VersionNumber(scalaVersion.value) + .matchesSemVer(SemanticSelector("=2.12 >=2.12.13"))) + old ++ Seq("-Wconf:cat=unused-nowarn:s") + else old + }, persistJarClasspath :== true, classpathEntryDefinesClassVF := { (if (persistJarClasspath.value) classpathDefinesClassCache.value diff --git a/main/src/main/scala/sbt/plugins/SbtPlugin.scala b/main/src/main/scala/sbt/plugins/SbtPlugin.scala index 5bebadc1d..3572972f7 100644 --- a/main/src/main/scala/sbt/plugins/SbtPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SbtPlugin.scala @@ -8,24 +8,13 @@ package sbt package plugins -import Keys._ -import Def.Setting -import sbt.SlashSyntax0._ -import sbt.librarymanagement.Configurations.Compile -import sbt.librarymanagement.{ SemanticSelector, VersionNumber } +import sbt.Def.Setting +import sbt.Keys._ object SbtPlugin extends AutoPlugin { override def requires = ScriptedPlugin override lazy val projectSettings: Seq[Setting[_]] = Seq( - sbtPlugin := true, - Compile / scalacOptions ++= { - // silence unused @nowarns in 2.12 because of https://github.com/sbt/sbt/issues/6398 - // the option is only available since 2.12.13 - if (VersionNumber(scalaVersion.value).matchesSemVer(SemanticSelector("=2.12 >=2.12.13"))) - Some("-Wconf:cat=unused-nowarn:s") - else - None - } + sbtPlugin := true ) } diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt new file mode 100644 index 000000000..18e6bc334 --- /dev/null +++ b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt @@ -0,0 +1,6 @@ +lazy val root = project.in(file(".")) + .settings( + scalaVersion := "2.12.13", + sbtPlugin := true, + scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") + ) diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/test b/sbt-app/src/sbt-test/project/sbt-plugin/test index 5df2af1f3..1e698be09 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/test +++ b/sbt-app/src/sbt-test/project/sbt-plugin/test @@ -1 +1,3 @@ > compile +$ copy-file changes/oldSbtPlugin.sbt build.sbt +> compile From 236f419f8895889092992c22ded1f7e44701ebcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Thu, 27 May 2021 14:56:47 +0200 Subject: [PATCH 23/39] Add condition preventing errors on 3.0.0. Add scripted test for running doc on Scala.js project --- main/src/main/scala/sbt/Defaults.scala | 6 +++++- .../sbt-test/plugins/doc-scala3-js/build.sbt | 12 +++++++++++ .../plugins/doc-scala3-js/project/plugins.sbt | 1 + .../doc-scala3-js/src/main/scala/test.scala | 21 +++++++++++++++++++ .../src/sbt-test/plugins/doc-scala3-js/test | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 sbt-app/src/sbt-test/plugins/doc-scala3-js/build.sbt create mode 100644 sbt-app/src/sbt-test/plugins/doc-scala3-js/project/plugins.sbt create mode 100644 sbt-app/src/sbt-test/plugins/doc-scala3-js/src/main/scala/test.scala create mode 100644 sbt-app/src/sbt-test/plugins/doc-scala3-js/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 8a77d5a9e..fd8c6111c 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2107,7 +2107,11 @@ object Defaults extends BuildCommon { val projectName = name.value if (ScalaArtifacts.isScala3(sv)) { val project = if (config == Compile) projectName else s"$projectName-$config" - compileOptions ++ Seq("-project", project) + if (scalaVersion.value.startsWith("3.0.0")) { + Seq("-project", project) + } else { + compileOptions ++ Seq("-project", project) + } } else compileOptions }, (TaskZero / key) := { diff --git a/sbt-app/src/sbt-test/plugins/doc-scala3-js/build.sbt b/sbt-app/src/sbt-test/plugins/doc-scala3-js/build.sbt new file mode 100644 index 000000000..af0c70797 --- /dev/null +++ b/sbt-app/src/sbt-test/plugins/doc-scala3-js/build.sbt @@ -0,0 +1,12 @@ +val scala3Version = "3.0.1-RC1-bin-20210525-8f3fdf5-NIGHTLY" + +enablePlugins(ScalaJSPlugin) + +lazy val root = project + .in(file(".")) + .settings( + name := "scala3-simple", + version := "0.1.0", + + scalaVersion := scala3Version, + ) diff --git a/sbt-app/src/sbt-test/plugins/doc-scala3-js/project/plugins.sbt b/sbt-app/src/sbt-test/plugins/doc-scala3-js/project/plugins.sbt new file mode 100644 index 000000000..c16aefc53 --- /dev/null +++ b/sbt-app/src/sbt-test/plugins/doc-scala3-js/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.5.1") \ No newline at end of file diff --git a/sbt-app/src/sbt-test/plugins/doc-scala3-js/src/main/scala/test.scala b/sbt-app/src/sbt-test/plugins/doc-scala3-js/src/main/scala/test.scala new file mode 100644 index 000000000..dd119a269 --- /dev/null +++ b/sbt-app/src/sbt-test/plugins/doc-scala3-js/src/main/scala/test.scala @@ -0,0 +1,21 @@ +package test + +import scala.scalajs.js + +final case class RouteLocation(loc: String, state: js.UndefOr[js.Any]) + + +object RouteLocation: + def apply(loc: String): RouteLocation = RouteLocation(loc, js.undefined) + +/** + * ```scala sc:compile + * import scala.scalajs.js + * final case class RouteLocation(loc: String, state: js.UndefOr[js.Any]) + * + * + * object RouteLocation: + * def apply(loc: String): RouteLocation = RouteLocation(loc, js.undefined) + * ``` + */ +case class Test(s: String) \ No newline at end of file diff --git a/sbt-app/src/sbt-test/plugins/doc-scala3-js/test b/sbt-app/src/sbt-test/plugins/doc-scala3-js/test new file mode 100644 index 000000000..fd7163dc6 --- /dev/null +++ b/sbt-app/src/sbt-test/plugins/doc-scala3-js/test @@ -0,0 +1 @@ +> doc \ No newline at end of file From fbfc272171cd080e2f8267b54b188c4b487ce33d Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Fri, 28 May 2021 17:36:55 +0200 Subject: [PATCH 24/39] Scala 2.12.14 / 2.13.6 --- .github/workflows/ci.yml | 4 ++-- launcher-package/build.sbt | 4 ++-- main/src/main/scala/sbt/PluginCross.scala | 2 +- project/Dependencies.scala | 4 ++-- .../src/sbt-test/actions/cross-advanced/build.sbt | 12 ++++++------ sbt-app/src/sbt-test/actions/cross-advanced/test | 2 +- sbt-app/src/sbt-test/project/sbt-plugin/build.sbt | 2 +- .../project/sbt-plugin/changes/oldSbtPlugin.sbt | 2 +- .../sbt-test/project/semanticdb-version/build.sbt | 2 +- .../tests/scala-instance-classloader/build.sbt | 2 +- server-test/src/server-test/response/build.sbt | 2 +- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0e53c8b3..6a06cfc2b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,8 +40,8 @@ jobs: env: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 - SCALA_212: 2.12.13 - SCALA_213: 2.13.3 + SCALA_212: 2.12.14 + SCALA_213: 2.13.6 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false TEST_SBT_VER: 1.5.0 diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index f4289c4a4..fd12e98cb 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -26,7 +26,7 @@ lazy val sbtVersionToRelease = sys.props.getOrElse("sbt.build.version", sys.env. })) lazy val scala210 = "2.10.7" -lazy val scala212 = "2.12.10" +lazy val scala212 = "2.12.14" lazy val scala210Jline = "org.scala-lang" % "jline" % scala210 lazy val jansi = { if (sbtVersionToRelease startsWith "1.") "org.fusesource.jansi" % "jansi" % "1.12" @@ -34,7 +34,7 @@ lazy val jansi = { } lazy val scala212Compiler = "org.scala-lang" % "scala-compiler" % scala212 lazy val scala212Jline = "jline" % "jline" % "2.14.6" -// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.10/versions.properties#L22 +// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.14/versions.properties#L21 lazy val scala212Xml = "org.scala-lang.modules" % "scala-xml_2.12" % "1.0.6" lazy val sbtActual = "org.scala-sbt" % "sbt" % sbtVersionToRelease diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index 679a344dc..39dc0a071 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -99,7 +99,7 @@ private[sbt] object PluginCross { VersionNumber(sv) match { case VersionNumber(Seq(0, 12, _*), _, _) => "2.9.2" case VersionNumber(Seq(0, 13, _*), _, _) => "2.10.7" - case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.13" + case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.14" case _ => sys.error(s"Unsupported sbt binary version: $sv") } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 7b2a83151..3f0f05a60 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,8 +4,8 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too - val scala212 = "2.12.13" - val scala213 = "2.13.5" + val scala212 = "2.12.14" + val scala213 = "2.13.6" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 def nightlyVersion: Option[String] = diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt index 0076195d7..c4e16f6ef 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt @@ -10,19 +10,19 @@ lazy val root = (project in file(".")) lazy val foo = project .settings( - crossScalaVersions := Seq("2.12.13", "2.13.1"), + crossScalaVersions := Seq("2.12.14", "2.13.1"), libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", check := { // This tests that +check will respect bar's crossScalaVersions and not switch val x = (LocalProject("bar") / scalaVersion).value - assert(x == "2.12.13", s"$x == 2.12.12") + assert(x == "2.12.14", s"$x == 2.12.12") (Compile / compile).value }, (Test / testOnly) := { // This tests that +testOnly will respect bar's crossScalaVersions and not switch val x = (LocalProject("bar") / scalaVersion).value - assert(x == "2.12.13", s"$x == 2.12.12") + assert(x == "2.12.14", s"$x == 2.12.12") val _ = (Test / testOnly).evaluated }, compile2 := { @@ -35,7 +35,7 @@ lazy val foo = project lazy val bar = project .settings( - crossScalaVersions := Seq("2.12.13"), + crossScalaVersions := Seq("2.12.14"), check := (Compile / compile).value, compile2 := (Compile / compile).value, ) @@ -46,14 +46,14 @@ lazy val baz = project check := { // This tests that +baz/check will respect bar's crossScalaVersions and not switch val x = (LocalProject("bar") / scalaVersion).value - assert(x == "2.12.13", s"$x == 2.12.13") + assert(x == "2.12.14", s"$x == 2.12.14") (Compile / compile).value }, ) lazy val client = project .settings( - crossScalaVersions := Seq("2.12.13", "2.13.1"), + crossScalaVersions := Seq("2.12.14", "2.13.1"), check := (Compile / compile).value, compile2 := (Compile / compile).value, ) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index 9aabd48d6..6f606cd4a 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -17,7 +17,7 @@ ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root -> set root/crossScalaVersions := Seq("2.12.13", "2.13.1") +> set root/crossScalaVersions := Seq("2.12.14", "2.13.1") > + build $ exists foo/target/scala-2.12 $ exists foo/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt index 072e6af4a..ae7ce14e9 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .enablePlugins(SbtPlugin) .settings( - scalaVersion := "2.12.13", + scalaVersion := "2.12.14", scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt index 18e6bc334..063ee25e5 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .settings( - scalaVersion := "2.12.13", + scalaVersion := "2.12.14", sbtPlugin := true, scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt b/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt index 8b5c69c23..c1eee78dd 100644 --- a/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt +++ b/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.13" +ThisBuild / scalaVersion := "2.12.14" ThisBuild / semanticdbEnabled := true ThisBuild / semanticdbVersion := "4.4.10" ThisBuild / semanticdbIncludeInJar := false diff --git a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt index 3e73d9178..3ed61dad2 100644 --- a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt +++ b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt @@ -3,7 +3,7 @@ import sbt.internal.inc.ScalaInstance lazy val OtherScala = config("other-scala").hide lazy val junitinterface = "com.novocode" % "junit-interface" % "0.11" lazy val akkaActor = "com.typesafe.akka" %% "akka-actor" % "2.5.17" -ThisBuild / scalaVersion := "2.12.13" +ThisBuild / scalaVersion := "2.12.14" lazy val root = (project in file(".")) .configs(OtherScala) diff --git a/server-test/src/server-test/response/build.sbt b/server-test/src/server-test/response/build.sbt index f75670640..105e64e77 100644 --- a/server-test/src/server-test/response/build.sbt +++ b/server-test/src/server-test/response/build.sbt @@ -1,6 +1,6 @@ import sbt.internal.server.{ ServerHandler, ServerIntent } -ThisBuild / scalaVersion := "2.12.13" +ThisBuild / scalaVersion := "2.12.14" Global / serverLog / logLevel := Level.Debug // custom handler From 3f7193f91a727059627f4911cf714a00968e4d1c Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Fri, 28 May 2021 17:41:34 +0200 Subject: [PATCH 25/39] Update kind-projector --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 3f0f05a60..da43fc797 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -116,5 +116,5 @@ object Dependencies { val hedgehog = "qa.hedgehog" %% "hedgehog-sbt" % "0.6.1" val disruptor = "com.lmax" % "disruptor" % "3.4.2" - val kindProjector = ("org.typelevel" % "kind-projector" % "0.11.3").cross(CrossVersion.full) + val kindProjector = ("org.typelevel" % "kind-projector" % "0.13.0").cross(CrossVersion.full) } From ee460e0043634edb6a2c83e0c00fcc017f14d1f9 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Fri, 28 May 2021 21:44:10 +0200 Subject: [PATCH 26/39] Upgrade semanticdb to newest version which supports Scala 2.12.14 --- build.sbt | 2 +- main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala | 2 +- sbt-app/src/sbt-test/project/semanticdb-version/build.sbt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index b0beac8ea..358900c03 100644 --- a/build.sbt +++ b/build.sbt @@ -45,7 +45,7 @@ ThisBuild / scmInfo := Some( ThisBuild / resolvers += Resolver.mavenLocal Global / semanticdbEnabled := !(Global / insideCI).value -Global / semanticdbVersion := "4.4.10" +Global / semanticdbVersion := "4.4.20" val excludeLint = SettingKey[Set[Def.KeyedInitialize[_]]]("excludeLintKeys") Global / excludeLint := (Global / excludeLint).?.value.getOrElse(Set.empty) Global / excludeLint += componentID diff --git a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala index ee0df6f42..a10f49725 100644 --- a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala @@ -26,7 +26,7 @@ object SemanticdbPlugin extends AutoPlugin { semanticdbEnabled := SysProp.semanticdb, semanticdbIncludeInJar := false, semanticdbOptions := List(), - semanticdbVersion := "4.4.10" + semanticdbVersion := "4.4.20" ) override lazy val projectSettings: Seq[Def.Setting[_]] = Seq( diff --git a/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt b/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt index c1eee78dd..0600aa8dd 100644 --- a/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt +++ b/sbt-app/src/sbt-test/project/semanticdb-version/build.sbt @@ -1,6 +1,6 @@ ThisBuild / scalaVersion := "2.12.14" ThisBuild / semanticdbEnabled := true -ThisBuild / semanticdbVersion := "4.4.10" +ThisBuild / semanticdbVersion := "4.4.20" ThisBuild / semanticdbIncludeInJar := false lazy val root = (project in file(".")) @@ -8,7 +8,7 @@ lazy val root = (project in file(".")) lazy val check = taskKey[Unit]("Checks the configured semanticdbVersion") check := { - val expected = Some("4.4.10") + val expected = Some("4.4.20") val actual = allDependencies .value .find(_.name == "semanticdb-scalac") From 7dbf7978e9f1e9e954bd702b95e6e1481a0bbed8 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Sun, 30 May 2021 14:39:16 -0700 Subject: [PATCH 27/39] Disable multiple main class warning w/ qualified key If the user runs foo/runMain in a project with multiple main classes, sbt will still warn the user about their being multiple main classes even though this is a pointless warning since the user either is running runMain which requires a main class. The run task is also excluded since by default it prompts the user with a main class selector. The previous logic for doing this filtering was bad because it only looked at the first command in a sequence and couldn't handle the foo/runMain case since it was looking for an exact match with `run` or `runMain`. This commit relaxes those restrictions to look at all of the strings in the command as well as splitting the string to check if the last part of the key ends in run or runMain. This logic could theoretically be incorrect if the user wrote an input task that was expecting run or runMain as user input but even in that case the only consequence would be that they wouldn't see the multiple main class warning which generally isn't all the helpful unless you are packaging a jar that expects there to be only one main class. It seems unlikely that that the user would be running a custom input task that is both packaging a jar and expecting run or runMain as input strings. --- main/src/main/scala/sbt/Defaults.scala | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index c1424da1d..efafdc1f8 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -982,12 +982,17 @@ object Defaults extends BuildCommon { selectMainClass := mainClass.value orElse askForMainClass(discoveredMainClasses.value), run / mainClass := (run / selectMainClass).value, mainClass := { - val logWarning = state.value.currentCommand - .flatMap(_.commandLine.split(" ").headOption.map(_.trim)) - .fold(true) { - case "run" | "runMain" => false - case _ => true - } + val logWarning = state.value.currentCommand.forall(!_.commandLine.split(" ").exists { + case "run" | "runMain" => true + case r => + r.split("/") match { + case Array(parts @ _*) => + parts.lastOption match { + case Some("run" | "runMain") => true + case _ => false + } + } + }) pickMainClassOrWarn(discoveredMainClasses.value, streams.value.log, logWarning) }, runMain := foregroundRunMainTask.evaluated, From a4dc402a9ac51d2f9760ceaed3be07ae189d2fd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 05:54:08 +0000 Subject: [PATCH 28/39] Bump actions/cache from 2.1.5 to 2.1.6 Bumps [actions/cache](https://github.com/actions/cache) from 2.1.5 to 2.1.6. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.5...v2.1.6) Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a06cfc2b..3aca3a81a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,7 +80,7 @@ jobs: - name: Coursier cache uses: coursier/cache-action@v6 - name: Cache sbt - uses: actions/cache@v2.1.5 + uses: actions/cache@v2.1.6 with: path: ~/.sbt key: ${{ runner.os }}-sbt-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} From e30bd67275bb679abe4affa9d104f747e9b55bb0 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 31 May 2021 22:06:59 -0400 Subject: [PATCH 29/39] Update modules --- project/Dependencies.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index da43fc797..667b98556 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,17 +12,17 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.5.0") + private val ioVersion = nightlyVersion.getOrElse("1.5.1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.0") - val zincVersion = nightlyVersion.getOrElse("1.5.3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.1") + val zincVersion = nightlyVersion.getOrElse("1.5.4") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion private val libraryManagementCore = "org.scala-sbt" %% "librarymanagement-core" % lmVersion private val libraryManagementIvy = "org.scala-sbt" %% "librarymanagement-ivy" % lmVersion - val launcherVersion = "1.3.1" + val launcherVersion = "1.3.2" val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" From 70a50e5c54dcd09c4d338f1d8513f7ab30f1269b Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 31 May 2021 23:15:07 -0400 Subject: [PATCH 30/39] sbt 1.5.3 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 358900c03..4669720bc 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.5.3-SNAPSHOT" + val v = "1.5.4-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index 8c0a4d8af..4e4cd2946 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.5.2" +declare builtin_sbt_version="1.5.3" declare -a residual_args declare -a java_args declare -a scalac_args From bcda2115b1e348b21e8a0b0b75c2efae7aae74ea Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 31 May 2021 23:22:46 -0400 Subject: [PATCH 31/39] Update the Sonatype Release URL test --- sbt-app/src/sbt-test/dependency-management/pom-advanced/test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbt-app/src/sbt-test/dependency-management/pom-advanced/test b/sbt-app/src/sbt-test/dependency-management/pom-advanced/test index 1fb460f11..d639e4ae6 100644 --- a/sbt-app/src/sbt-test/dependency-management/pom-advanced/test +++ b/sbt-app/src/sbt-test/dependency-management/pom-advanced/test @@ -1,9 +1,9 @@ # write the default pom. The only repositories should be Scala Tools Releases and Snapshots -> checkPom https://scala-ci.typesafe.com/artifactory/scala-integration/ https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/ https://oss.sonatype.org/content/repositories/releases/ https://oss.sonatype.org/content/repositories/snapshots/ +> checkPom https://scala-ci.typesafe.com/artifactory/scala-integration/ https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/ https://oss.sonatype.org/service/local/repositories/releases/content/ https://oss.sonatype.org/content/repositories/snapshots/ # include file:// repositories. The generated repositories section should include the local Maven repository as well $ touch repo.all -> checkPom https://scala-ci.typesafe.com/artifactory/scala-integration/ https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/ https://oss.sonatype.org/content/repositories/releases/ https://oss.sonatype.org/content/repositories/snapshots/ file://*.m2/repository/ +> checkPom https://scala-ci.typesafe.com/artifactory/scala-integration/ https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/ https://oss.sonatype.org/service/local/repositories/releases/content/ https://oss.sonatype.org/content/repositories/snapshots/ file://*.m2/repository/ $ delete repo.all $ touch repo.none From 2ed0574f9530876f6e2be254a7393acf63625dee Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 1 Jun 2021 00:26:20 -0400 Subject: [PATCH 32/39] Use sbt 1.5.3 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 19479ba46..67d27a1df 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.2 +sbt.version=1.5.3 From 367816ccc1fd6a021fddfedd16f12e5fb7b5f7bb Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 5 Jun 2021 15:34:41 -0400 Subject: [PATCH 33/39] ipcsocket 1.3.1 Fixes https://github.com/sbt/sbt/issues/6531 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 667b98556..557c78dd4 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -26,7 +26,7 @@ object Dependencies { val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" - val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.3.0" + val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.3.1" private val compilerInterface = "org.scala-sbt" % "compiler-interface" % zincVersion private val compilerClasspath = "org.scala-sbt" %% "zinc-classpath" % zincVersion From 7bf1490cbfd43c2a0af4c4519c833d9fcd3e79e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 08:12:22 +0000 Subject: [PATCH 34/39] Bump olafurpg/setup-scala from 10 to 12 Bumps [olafurpg/setup-scala](https://github.com/olafurpg/setup-scala) from 10 to 12. - [Release notes](https://github.com/olafurpg/setup-scala/releases) - [Commits](https://github.com/olafurpg/setup-scala/compare/v10...v12) --- updated-dependencies: - dependency-name: olafurpg/setup-scala dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3aca3a81a..38263530f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,7 +70,7 @@ jobs: ref: develop path: zinc - name: Setup - uses: olafurpg/setup-scala@v10 + uses: olafurpg/setup-scala@v12 with: java-version: "adopt@1.${{ matrix.java }}" - name: Set up Python 3.7 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7adaddb2a..70c344639 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -36,7 +36,7 @@ jobs: ref: develop path: zinc - name: Setup - uses: olafurpg/setup-scala@v10 + uses: olafurpg/setup-scala@v12 with: java-version: "adopt@1.${{ matrix.java }}" - name: Coursier cache From cbc1c87974b33344c896871b9f4ef7d8ec4b1bcf Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 9 Jun 2021 17:35:10 +0200 Subject: [PATCH 35/39] Disconnect BSP server when build/exit --- .../internal/server/BuildServerProtocol.scala | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 52aef4e4f..9a4acba8d 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -11,7 +11,6 @@ package server import java.net.URI -import sbt.BasicCommandStrings.Shutdown import sbt.BuildSyntax._ import sbt.Def._ import sbt.Keys._ @@ -239,7 +238,7 @@ object BuildServerProtocol { ServerHandler { callback => ServerIntent( onRequest = { - case r: JsonRpcRequestMessage if r.method == "build/initialize" => + case r if r.method == "build/initialize" => val params = Converter.fromJson[InitializeBuildParams](json(r)).get checkMetalsCompatibility(semanticdbEnabled, semanticdbVersion, params, callback.log) @@ -252,19 +251,16 @@ object BuildServerProtocol { ) callback.jsonRpcRespond(response, Some(r.id)); () - case r: JsonRpcRequestMessage if r.method == "workspace/buildTargets" => + case r if r.method == "workspace/buildTargets" => val _ = callback.appendExec(Keys.bspWorkspaceBuildTargets.key.toString, Some(r.id)) - case r: JsonRpcRequestMessage if r.method == "workspace/reload" => + case r if r.method == "workspace/reload" => val _ = callback.appendExec(s"$bspReload ${r.id}", Some(r.id)) - case r: JsonRpcRequestMessage if r.method == "build/shutdown" => + case r if r.method == "build/shutdown" => callback.jsonRpcRespond(JNull, Some(r.id)) - case r: JsonRpcRequestMessage if r.method == "build/exit" => - val _ = callback.appendExec(Shutdown, Some(r.id)) - - case r: JsonRpcRequestMessage if r.method == "buildTarget/sources" => + case r if r.method == "buildTarget/sources" => val param = Converter.fromJson[SourcesParams](json(r)).get val targets = param.targets.map(_.uri).mkString(" ") val command = Keys.bspBuildTargetSources.key @@ -306,26 +302,29 @@ object BuildServerProtocol { Some(r.id) ) - case r: JsonRpcRequestMessage if r.method == "buildTarget/scalacOptions" => + case r if r.method == "buildTarget/scalacOptions" => val param = Converter.fromJson[ScalacOptionsParams](json(r)).get val targets = param.targets.map(_.uri).mkString(" ") val command = Keys.bspBuildTargetScalacOptions.key val _ = callback.appendExec(s"$command $targets", Some(r.id)) - case r: JsonRpcRequestMessage if r.method == "buildTarget/scalaTestClasses" => + case r if r.method == "buildTarget/scalaTestClasses" => val param = Converter.fromJson[ScalaTestClassesParams](json(r)).get val targets = param.targets.map(_.uri).mkString(" ") val command = Keys.bspScalaTestClasses.key val _ = callback.appendExec(s"$command $targets", Some(r.id)) - case r: JsonRpcRequestMessage if r.method == "buildTarget/scalaMainClasses" => + case r if r.method == "buildTarget/scalaMainClasses" => val param = Converter.fromJson[ScalaMainClassesParams](json(r)).get val targets = param.targets.map(_.uri).mkString(" ") val command = Keys.bspScalaMainClasses.key val _ = callback.appendExec(s"$command $targets", Some(r.id)) }, onResponse = PartialFunction.empty, - onNotification = PartialFunction.empty, + onNotification = { + case r if r.method == "build/exit" => + val _ = callback.appendExec(BasicCommandStrings.TerminateAction, None) + }, ) } } From 75a55a10df0bf29df7f7a0bb5ed3d4924badd724 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 9 Jun 2021 17:21:58 +0200 Subject: [PATCH 36/39] fix compiler class loader jars --- main/src/main/scala/sbt/Defaults.scala | 7 +------ .../compiler-project/scala3-tasty-management/build.sbt | 2 +- .../compiler-project/scala3-tasty-management/test | 8 ++++---- .../scala3-compiler-bridge-binary/build.sbt | 2 +- .../src/sbt-test/project/scala3-sandwich-sjs/build.sbt | 6 +++--- .../project/scala3-sandwich-sjs/project/plugins.sbt | 2 +- sbt-app/src/sbt-test/project/scala3-sandwich/build.sbt | 4 ++-- 7 files changed, 13 insertions(+), 18 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 916219908..f4f96f1f5 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1182,12 +1182,7 @@ object Defaults extends BuildCommon { val allJars = libraryJars ++ compilerJars ++ docJars val libraryLoader = classLoaderCache(libraryJars.toList, jansiExclusionLoader) - val compilerLoader = classLoaderCache( - // It should be `compilerJars` but it would break on `3.0.0-M2` because of - // https://github.com/lampepfl/dotty/blob/d932af954ef187d7bdb87500d49ed0ff530bd1e7/sbt-bridge/src/xsbt/CompilerClassLoader.java#L108-L117 - allCompilerJars.toList, - libraryLoader - ) + val compilerLoader = classLoaderCache(compilerJars.toList, libraryLoader) val fullLoader = if (docJars.isEmpty) compilerLoader else classLoaderCache(docJars.distinct.toList, compilerLoader) diff --git a/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt b/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt index 8796ff21b..538540498 100644 --- a/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt @@ -1,6 +1,6 @@ import xsbti.compile.TastyFiles -ThisBuild / scalaVersion := "3.0.0-M2" +ThisBuild / scalaVersion := "3.0.0-M3" TaskKey[Unit]("check") := { assert((Compile / auxiliaryClassFiles).value == Seq(TastyFiles.instance)) diff --git a/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/test b/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/test index 52f74a532..e709a96dd 100644 --- a/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/test +++ b/sbt-app/src/sbt-test/compiler-project/scala3-tasty-management/test @@ -1,12 +1,12 @@ > check > compile -$ exists target/scala-3.0.0-M2/classes/A.tasty -$ exists target/scala-3.0.0-M2/classes/B.tasty +$ exists target/scala-3.0.0-M3/classes/A.tasty +$ exists target/scala-3.0.0-M3/classes/B.tasty $ delete src/main/scala/B.scala > compile -$ exists target/scala-3.0.0-M2/classes/A.tasty --$ exists target/scala-3.0.0-M2/classes/B.tasty +$ exists target/scala-3.0.0-M3/classes/A.tasty +-$ exists target/scala-3.0.0-M3/classes/B.tasty diff --git a/sbt-app/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt b/sbt-app/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt index 998afcca4..ef00fcef5 100644 --- a/sbt-app/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "3.0.0-M2" +ThisBuild / scalaVersion := "3.0.0-M3" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/build.sbt b/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/build.sbt index 01e81e167..661ac82a1 100644 --- a/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/build.sbt +++ b/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/build.sbt @@ -1,15 +1,15 @@ -ThisBuild / scalaVersion := "2.13.4" +ThisBuild / scalaVersion := "2.13.6" ThisBuild / scalacOptions += "-Ytasty-reader" lazy val scala3code = project .enablePlugins(ScalaJSPlugin) - .settings(scalaVersion := "3.0.0-M1") + .settings(scalaVersion := "3.0.0") lazy val app = project .enablePlugins(ScalaJSPlugin) .dependsOn(scala3code) .settings( - scalaVersion := "2.13.4", + scalaVersion := "2.13.6", scalacOptions += "-Ytasty-reader", scalaJSUseMainModuleInitializer := true ) diff --git a/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt b/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt index 8f1d0ac9b..56abd248d 100644 --- a/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt +++ b/sbt-app/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt @@ -1 +1 @@ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.3.1") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.6.0") diff --git a/sbt-app/src/sbt-test/project/scala3-sandwich/build.sbt b/sbt-app/src/sbt-test/project/scala3-sandwich/build.sbt index 69a2ca58f..75988d69d 100644 --- a/sbt-app/src/sbt-test/project/scala3-sandwich/build.sbt +++ b/sbt-app/src/sbt-test/project/scala3-sandwich/build.sbt @@ -1,6 +1,6 @@ -ThisBuild / scalaVersion := "3.0.0-M1" +ThisBuild / scalaVersion := "3.0.0" -lazy val scala213 = "2.13.4" +lazy val scala213 = "2.13.6" lazy val root = (project in file(".")) .aggregate(fooApp, fooCore, barApp, barCore) From 69d0023c45bfc7b29a733b912b666ac0c1130f77 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 13 Jun 2021 21:49:21 -0400 Subject: [PATCH 37/39] Zinc 1.5.5 --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 557c78dd4..76ed2003e 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,8 +14,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.5.1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.1") - val zincVersion = nightlyVersion.getOrElse("1.5.4") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.2") + val zincVersion = nightlyVersion.getOrElse("1.5.5") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From eec3c32cc841365799eaa5460272e8287b975f10 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 13 Jun 2021 23:34:18 -0400 Subject: [PATCH 38/39] sbt 1.5.4 --- build.sbt | 2 +- project/build.properties | 2 +- sbt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 4669720bc..8ca6d0ac6 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.5.4-SNAPSHOT" + val v = "1.5.5-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/project/build.properties b/project/build.properties index 67d27a1df..9edb75b77 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.3 +sbt.version=1.5.4 diff --git a/sbt b/sbt index 4e4cd2946..8adff2117 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.5.3" +declare builtin_sbt_version="1.5.4" declare -a residual_args declare -a java_args declare -a scalac_args From e6c2ce084ac5f6a25ccab457ef2666307cf1877a Mon Sep 17 00:00:00 2001 From: Samuel CLARENC Date: Thu, 17 Jun 2021 09:00:15 +0200 Subject: [PATCH 39/39] Add the tag "integration-test" to the it configuration in BSP. --- protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala index e522fb482..fa1773f27 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala @@ -18,6 +18,7 @@ object BuildTargetTag { def fromConfig(config: String): Vector[String] = config match { case "test" => Vector(test) + case "it" => Vector(integrationTest) case "compile" => Vector(library) case _ => Vector.empty }