From fd967d1215ebb1af7ac0a2bc8ac2b2cb80e6cde4 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Mon, 16 Nov 2020 14:46:53 +0900 Subject: [PATCH 1/3] set "scriptedBatchExecution := false" if sbt 0.13 --- main/src/main/scala/sbt/ScriptedPlugin.scala | 10 +++++++++- sbt/src/sbt-test/project/scripted13/build.sbt | 6 +----- .../sbt-test/project/scripted13/project/plugins.sbt | 4 ---- sbt/src/sbt-test/project/scripted13/{disabled => test} | 3 +-- 4 files changed, 11 insertions(+), 12 deletions(-) rename sbt/src/sbt-test/project/scripted13/{disabled => test} (88%) diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 2d79de76b..6e3b44c85 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -16,6 +16,7 @@ import sbt.nio.Keys._ import sbt.Project._ import sbt.internal.inc.ModuleUtilities import sbt.internal.inc.classpath.ClasspathUtil +import sbt.internal.librarymanagement.cross.CrossVersionUtil import sbt.internal.util.complete.{ DefaultParsers, Parser } import sbt.io._ import sbt.io.syntax._ @@ -78,7 +79,14 @@ object ScriptedPlugin extends AutoPlugin { scriptedClasspath := getJars(ScriptedConf).value, scriptedTests := scriptedTestsTask.value, scriptedParallelInstances := 1, - scriptedBatchExecution := true, + scriptedBatchExecution := { + CrossVersionUtil.binarySbtVersion(scriptedSbt.value) match { + case "0.13" => + false + case _ => + true + } + }, scriptedRun := scriptedRunTask.value, scriptedDependencies := { def use[A](@deprecated("unused", "") x: A*): Unit = () // avoid unused warnings diff --git a/sbt/src/sbt-test/project/scripted13/build.sbt b/sbt/src/sbt-test/project/scripted13/build.sbt index 8a7182a4c..fd2fa6ebe 100644 --- a/sbt/src/sbt-test/project/scripted13/build.sbt +++ b/sbt/src/sbt-test/project/scripted13/build.sbt @@ -1,5 +1 @@ -lazy val root = (project in file(".")) - .settings( - sbtPlugin := true, - resolvers += Resolver.typesafeIvyRepo("releases") - ) +enablePlugins(SbtPlugin) diff --git a/sbt/src/sbt-test/project/scripted13/project/plugins.sbt b/sbt/src/sbt-test/project/scripted13/project/plugins.sbt index a2a45d929..217d3d1a5 100644 --- a/sbt/src/sbt-test/project/scripted13/project/plugins.sbt +++ b/sbt/src/sbt-test/project/scripted13/project/plugins.sbt @@ -1,5 +1 @@ -libraryDependencies += { - "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value -} - offline := true diff --git a/sbt/src/sbt-test/project/scripted13/disabled b/sbt/src/sbt-test/project/scripted13/test similarity index 88% rename from sbt/src/sbt-test/project/scripted13/disabled rename to sbt/src/sbt-test/project/scripted13/test index 7cf13e886..1617a03a4 100644 --- a/sbt/src/sbt-test/project/scripted13/disabled +++ b/sbt/src/sbt-test/project/scripted13/test @@ -1,7 +1,6 @@ # This tests that this sbt scripted plugin can launch the previous one -> ++2.10.6 -> ^^0.13.16-M1 +> ^^0.13.18 $ copy-file changes/A.scala src/sbt-test/a/b/A.scala > scripted From eba3596e5d422a240edb21d3a77d57fb7d3cc66f Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Mon, 16 Nov 2020 15:39:57 +0900 Subject: [PATCH 2/3] Update main/src/main/scala/sbt/ScriptedPlugin.scala Co-authored-by: eugene yokota --- main/src/main/scala/sbt/ScriptedPlugin.scala | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 6e3b44c85..aece10240 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -79,14 +79,7 @@ object ScriptedPlugin extends AutoPlugin { scriptedClasspath := getJars(ScriptedConf).value, scriptedTests := scriptedTestsTask.value, scriptedParallelInstances := 1, - scriptedBatchExecution := { - CrossVersionUtil.binarySbtVersion(scriptedSbt.value) match { - case "0.13" => - false - case _ => - true - } - }, + scriptedBatchExecution := CrossVersionUtil.binarySbtVersion(scriptedSbt.value) != "0.13", scriptedRun := scriptedRunTask.value, scriptedDependencies := { def use[A](@deprecated("unused", "") x: A*): Unit = () // avoid unused warnings From c71c9c9227eba4f847993781ee5607c998751244 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 16 Nov 2020 14:58:59 +0100 Subject: [PATCH 3/3] Detach stdio in BSP server --- .../scala/sbt/internal/client/BspClient.scala | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/main-command/src/main/scala/sbt/internal/client/BspClient.scala b/main-command/src/main/scala/sbt/internal/client/BspClient.scala index 613e5de96..c9942ba99 100644 --- a/main-command/src/main/scala/sbt/internal/client/BspClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/BspClient.scala @@ -15,8 +15,8 @@ import sbt.Exit import sbt.io.syntax._ import sbt.protocol.ClientSocket -import scala.sys.process.Process import scala.util.control.NonFatal +import java.lang.ProcessBuilder.Redirect class BspClient private (sbtServer: Socket) { private def run(): Exit = Exit(BspClient.bspRun(sbtServer)) @@ -90,8 +90,15 @@ object BspClient { * This instance must be shutdown explicitly via `sbt -client shutdown` */ def forkServer(baseDirectory: File, portfile: File): Unit = { - val args = List[String]() - val launchOpts = List("-Xms2048M", "-Xmx2048M", "-Xss2M") + val args = List("--detach-stdio") + val launchOpts = List( + "-Dfile.encoding=UTF-8", + "-Dsbt.io.virtual=true", + "-Xms1024M", + "-Xmx1024M", + "-Xss4M", + "-XX:ReservedCodeCacheSize=128m" + ) val launcherJarString = sys.props.get("java.class.path") match { case Some(cp) => @@ -102,10 +109,15 @@ object BspClient { } val cmd = "java" :: launchOpts ::: "-jar" :: launcherJarString :: args - val process = Process(cmd, baseDirectory).run() + val processBuilder = + new ProcessBuilder(cmd: _*) + .directory(baseDirectory) + .redirectInput(Redirect.PIPE) - while (process.isAlive() && !portfile.exists) Thread.sleep(100) + val process = processBuilder.start() - if (!process.isAlive()) sys.error("sbt server exited") + while (process.isAlive && !portfile.exists) Thread.sleep(100) + + if (!process.isAlive) sys.error("sbt server exited") } }