From 1f2c00cc567b03110369ba8c2ec3a16d09ff02f6 Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Wed, 26 Oct 2016 21:13:36 -0700 Subject: [PATCH] Remove ProcessExtra and the use of java.lang.ProcessBuilder Fixes #2736. --- MIGRATION.md | 1 + run/src/main/scala/sbt/Fork.scala | 24 +++++++++--------------- sbt/src/main/scala/ProcessExtra.scala | 15 --------------- sbt/src/main/scala/syntax.scala | 2 +- 4 files changed, 11 insertions(+), 31 deletions(-) delete mode 100644 sbt/src/main/scala/ProcessExtra.scala diff --git a/MIGRATION.md b/MIGRATION.md index 6f7d67952..e9e3e026b 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -12,6 +12,7 @@ Migration notes - Removes no-longer-documented old operators `<<=`, `<+=`, and `<++=`. - Renames early command feature from `--` to `early()`. - Log options `-error`, `-warn`, `-info`, `-debug` are added as shorthand for `"early(error)"` etc. +- `sbt.Process` and `sbt.ProcessExtra` are gone. Use `scala.sys.process` instead. #### Additional import required diff --git a/run/src/main/scala/sbt/Fork.scala b/run/src/main/scala/sbt/Fork.scala index 917872424..2ebb56f28 100644 --- a/run/src/main/scala/sbt/Fork.scala +++ b/run/src/main/scala/sbt/Fork.scala @@ -46,8 +46,6 @@ case class LoggedOutput(logger: Logger) extends OutputStrategy */ case class CustomOutput(output: OutputStream) extends OutputStrategy -import java.lang.{ ProcessBuilder => JProcessBuilder } - /** * Represents a commad that can be forked. * @@ -75,20 +73,16 @@ final class Fork(val commandName: String, val runnerClass: Option[String]) { val executable = Fork.javaCommand(javaHome, commandName).getAbsolutePath val preOptions = makeOptions(runJVMOptions, bootJars, arguments) val (classpathEnv, options) = Fork.fitClasspath(preOptions) - val command = (executable +: options).toArray - val builder = new JProcessBuilder(command: _*) - workingDirectory.foreach(wd => builder.directory(wd)) - val environment = builder.environment - for ((key, value) <- env) - environment.put(key, value) - for (cpenv <- classpathEnv) - // overriding, not appending, is correct due to the specified priorities of -classpath and CLASSPATH - environment.put(Fork.ClasspathEnvKey, cpenv) + val command = executable +: options + + val environment = env ++ classpathEnv.map(value => Fork.ClasspathEnvKey -> value) + val process = Process(command, workingDirectory, environment.toList: _*) + outputStrategy.getOrElse(StdoutOutput) match { - case StdoutOutput => Process(builder).run(connectInput) - case BufferedOutput(logger) => logger.buffer { Process(builder).run(logger, connectInput) } - case LoggedOutput(logger) => Process(builder).run(logger, connectInput) - case CustomOutput(output) => (Process(builder) #> output).run(connectInput) + case StdoutOutput => process.run(connectInput) + case BufferedOutput(logger) => logger.buffer { process.run(logger, connectInput) } + case LoggedOutput(logger) => process.run(logger, connectInput) + case CustomOutput(output) => (process #> output).run(connectInput) } } private[this] def makeOptions(jvmOptions: Seq[String], bootJars: Iterable[File], arguments: Seq[String]): Seq[String] = diff --git a/sbt/src/main/scala/ProcessExtra.scala b/sbt/src/main/scala/ProcessExtra.scala deleted file mode 100644 index 4625c6c90..000000000 --- a/sbt/src/main/scala/ProcessExtra.scala +++ /dev/null @@ -1,15 +0,0 @@ -package sbt - -import java.lang.{ ProcessBuilder => JProcessBuilder } - -trait ProcessExtra { - import scala.sys.process._ - import scala.sys.process.Process._ - implicit def builderToProcess(builder: JProcessBuilder): ProcessBuilder = apply(builder) - implicit def fileToProcess(file: File): ProcessBuilder.FileBuilder = apply(file) - implicit def urlToProcess(url: URL): ProcessBuilder.URLBuilder = apply(url) - implicit def buildersToProcess[T](builders: Seq[T])(implicit convert: T => ProcessBuilder.Source): Seq[ProcessBuilder.Source] = applySeq(builders) - - implicit def stringToProcess(command: String): ProcessBuilder = apply(command) - implicit def stringSeqToProcess(command: Seq[String]): ProcessBuilder = apply(command) -} diff --git a/sbt/src/main/scala/syntax.scala b/sbt/src/main/scala/syntax.scala index 1472bec1f..b1400cbe7 100644 --- a/sbt/src/main/scala/syntax.scala +++ b/sbt/src/main/scala/syntax.scala @@ -5,7 +5,7 @@ import sbt.internal.util.Eval object syntax extends syntax -abstract class syntax extends IOSyntax0 with sbt.std.TaskExtra with sbt.internal.util.Types with sbt.ProcessExtra +abstract class syntax extends IOSyntax0 with sbt.std.TaskExtra with sbt.internal.util.Types with sbt.internal.librarymanagement.impl.DependencyBuilders with sbt.ProjectExtra with sbt.internal.librarymanagement.DependencyFilterExtra with sbt.BuildExtra with sbt.TaskMacroExtra with sbt.ScopeFilter.Make {