Implement 'suppressServer' setting, for builds and plugins that prefer to be conservative about exposure to other processes.

This commit is contained in:
Steve Waldman 2018-02-05 23:11:42 -08:00
parent cbf7d92488
commit 0aa133d276
5 changed files with 17 additions and 1 deletions

View File

@ -39,6 +39,12 @@ object BasicKeys {
"The wire protocol for the server command.",
10000)
val suppressServer =
AttributeKey[Boolean](
"suppressServer",
"Running the server will be suppressed if 'suppressServer is explicitly set to true.",
10000)
// Unlike other BasicKeys, this is not used directly as a setting key,
// and severLog / logLevel is used instead.
private[sbt] val serverLogLevel =

View File

@ -268,6 +268,7 @@ object Defaults extends BuildCommon {
.getOrElse(GCUtil.defaultForceGarbageCollection),
minForcegcInterval :== GCUtil.defaultMinForcegcInterval,
interactionService :== CommandLineUIService,
suppressServer := false,
serverHost := "127.0.0.1",
serverPort := 5000 + (Hash
.toHex(Hash(appConfiguration.value.baseDirectory.toString))

View File

@ -131,6 +131,7 @@ object Keys {
// Command keys
val historyPath = SettingKey(BasicKeys.historyPath)
val shellPrompt = SettingKey(BasicKeys.shellPrompt)
val suppressServer = SettingKey(BasicKeys.suppressServer)
val serverPort = SettingKey(BasicKeys.serverPort)
val serverHost = SettingKey(BasicKeys.serverHost)
val serverAuthentication = SettingKey(BasicKeys.serverAuthentication)

View File

@ -21,6 +21,7 @@ import Keys.{
sessionSettings,
shellPrompt,
templateResolverInfos,
suppressServer,
serverHost,
serverLog,
serverPort,
@ -462,6 +463,7 @@ object Project extends ProjectExtra {
val prompt = get(shellPrompt)
val trs = (templateResolverInfos in Global get structure.data).toList.flatten
val watched = get(watch)
val suppressSvr: Option[Boolean] = get(suppressServer)
val host: Option[String] = get(serverHost)
val port: Option[Int] = get(serverPort)
val authentication: Option[Set[ServerAuthentication]] = get(serverAuthentication)
@ -474,6 +476,7 @@ object Project extends ProjectExtra {
s.attributes
.setCond(Watched.Configuration, watched)
.put(historyPath.key, history)
.setCond(suppressServer.key, suppressSvr)
.setCond(serverPort.key, port)
.setCond(serverHost.key, host)
.setCond(serverAuthentication.key, authentication)

View File

@ -14,6 +14,7 @@ import java.util.concurrent.atomic._
import scala.collection.mutable.ListBuffer
import scala.annotation.tailrec
import BasicKeys.{
suppressServer,
serverHost,
serverPort,
serverAuthentication,
@ -87,7 +88,11 @@ private[sbt] final class CommandExchange {
consoleChannel = Some(x)
subscribe(x)
}
if (autoStartServer) runServer(s)
val suppress = (s get suppressServer) match {
case Some(bool) => bool
case None => false
}
if (autoStartServer && !suppress) runServer(s)
else s
}