mirror of https://github.com/sbt/sbt.git
Merge pull request #5112 from eed3si9n/wip/root
Throw error if you run sbt from /
This commit is contained in:
commit
f72990123f
|
|
@ -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) =
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue