Merge pull request #5112 from eed3si9n/wip/root

Throw error if you run sbt from /
This commit is contained in:
eugene yokota 2019-09-30 15:04:25 -04:00 committed by GitHub
commit f72990123f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View File

@ -9,7 +9,7 @@ package sbt
import java.io.{ File, IOException } import java.io.{ File, IOException }
import java.net.URI import java.net.URI
import java.nio.file.{ FileAlreadyExistsException, Files } import java.nio.file.{ FileAlreadyExistsException, Files, FileSystems }
import java.util.concurrent.ForkJoinPool import java.util.concurrent.ForkJoinPool
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
import java.util.{ Locale, Properties } import java.util.{ Locale, Properties }
@ -940,14 +940,33 @@ object BuiltinCommands {
state.remainingCommands exists (_.commandLine == TemplateCommand) state.remainingCommands exists (_.commandLine == TemplateCommand)
private def writeSbtVersion(state: State) = private def writeSbtVersion(state: State) =
if (SysProp.genBuildProps && !intendsToInvokeNew(state)) if (SysProp.genBuildProps && !intendsToInvokeNew(state)) {
writeSbtVersionUnconditionally(state) writeSbtVersionUnconditionally(state)
}
private def checkRoot(state: State): Unit =
if (SysProp.allowRootDir) ()
else {
val baseDir = state.baseDir
import scala.collection.JavaConverters._
// this should return / on Unix and C:\ for Windows.
val rootOpt = FileSystems.getDefault.getRootDirectories.asScala.toList.headOption
rootOpt foreach { root =>
if (baseDir.getAbsolutePath == root.toString) {
throw new IllegalStateException(
"cannot run sbt from root directory without -Dsbt.rootdir=true; see sbt/sbt#1458"
)
}
}
}
private def WriteSbtVersion = "writeSbtVersion" private def WriteSbtVersion = "writeSbtVersion"
private def writeSbtVersion: Command = private def writeSbtVersion: Command =
Command.command(WriteSbtVersion) { state => Command.command(WriteSbtVersion) { state =>
writeSbtVersion(state); state checkRoot(state)
writeSbtVersion(state)
state
} }
private def intendsToInvokeCompile(state: State) = private def intendsToInvokeCompile(state: State) =

View File

@ -69,6 +69,7 @@ object SysProp {
def traces: Boolean = getOrFalse("sbt.traces") def traces: Boolean = getOrFalse("sbt.traces")
def client: Boolean = getOrFalse("sbt.client") def client: Boolean = getOrFalse("sbt.client")
def ci: Boolean = getOrFalse("sbt.ci") def ci: Boolean = getOrFalse("sbt.ci")
def allowRootDir: Boolean = getOrFalse("sbt.rootdir")
def watchMode: String = def watchMode: String =
sys.props.get("sbt.watch.mode").getOrElse("auto") sys.props.get("sbt.watch.mode").getOrElse("auto")