Refactor system properties lookup

This commit is contained in:
Eugene Yokota 2019-08-27 17:18:05 -04:00
parent 705f64c8a4
commit d0ce65378c
5 changed files with 64 additions and 17 deletions

View File

@ -0,0 +1,58 @@
/*
* sbt
* Copyright 2011 - 2018, Lightbend, Inc.
* Copyright 2008 - 2010, Mark Harrah
* Licensed under Apache License 2.0 (see LICENSE)
*/
package sbt
package internal
package librarymanagement
import java.util.Locale
object LMSysProp {
def booleanOpt(name: String): Option[Boolean] =
sys.props.get(name).flatMap { x =>
x.toLowerCase(Locale.ENGLISH) match {
case "1" | "always" | "true" => Some(true)
case "0" | "never" | "false" => Some(false)
case "auto" => None
case _ => None
}
}
def getOrFalse(name: String): Boolean = booleanOpt(name).getOrElse(false)
def getOrTrue(name: String): Boolean = booleanOpt(name).getOrElse(true)
// System property style:
// 1. use sbt. prefix
// 2. prefer short nouns
// 3. use dot for namespacing, and avoid making dot-separated English phrase
// 4. make active/enable properties, instead of "sbt.disable."
//
// Good: sbt.offline
//
// Bad:
// sbt.disable.interface.classloader.cache
// sbt.task.timings.on.shutdown
// sbt.skip.version.write -> sbt.genbuildprops=false
val useSecureResolvers: Boolean = getOrTrue("sbt.repository.secure")
def modifyVersionRange: Boolean = getOrTrue("sbt.modversionrange")
lazy val isJavaVersion9Plus: Boolean = javaVersion > 8
lazy val javaVersion: Int = {
// See Oracle section 1.5.3 at:
// https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html
val version = sys.props("java.specification.version").split("\\.").toList.map(_.toInt)
version match {
case 1 :: minor :: _ => minor
case major :: _ => major
case _ => 0
}
}
lazy val useGigahorse: Boolean = getOrTrue("sbt.gigahorse")
}

View File

@ -95,8 +95,7 @@ private[sbt] class FakeRepository(resolver: AnyRef, name: String) extends xsbti.
}
private[librarymanagement] abstract class ResolverFunctions {
private[sbt] def useSecureResolvers =
sys.props.get("sbt.repository.secure") map { _.toLowerCase == "true" } getOrElse true
import sbt.internal.librarymanagement.LMSysProp.useSecureResolvers
val TypesafeRepositoryRoot = typesafeRepositoryRoot(useSecureResolvers)
val SbtRepositoryRoot = sbtRepositoryRoot(useSecureResolvers)

View File

@ -242,9 +242,6 @@ object CustomPomParser {
transform(dd, _ => newId)
case None => dd
}
private[sbt] lazy val versionRangeFlag = sys.props.get("sbt.modversionrange") map {
_.toLowerCase == "true"
} getOrElse true
import collection.JavaConverters._
def addExtra(
@ -281,7 +278,7 @@ object CustomPomParser {
addExtra(dd, dependencyExtra)
}
val withVersionRangeMod: Seq[DependencyDescriptor] =
if (versionRangeFlag) withExtra map { stripVersionRange } else withExtra
if (LMSysProp.modifyVersionRange) withExtra map { stripVersionRange } else withExtra
val unique = IvySbt.mergeDuplicateDefinitions(withVersionRangeMod)
unique foreach dmd.addDependency

View File

@ -15,7 +15,8 @@ object ErrorMessageAuthenticator {
private var securityWarningLogged = false
private def originalAuthenticator: Option[Authenticator] = {
if (isJavaVersion9Plus) getDefaultAuthenticator else getTheAuthenticator
if (LMSysProp.isJavaVersion9Plus) getDefaultAuthenticator
else getTheAuthenticator
}
private[this] def getTheAuthenticator: Option[Authenticator] = {
@ -100,15 +101,6 @@ object ErrorMessageAuthenticator {
}
doInstallIfIvy(originalAuthenticator)
}
private[this] def isJavaVersion9Plus = javaVersion > 8
private[this] def javaVersion = {
// See Oracle section 1.5.3 at:
// https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html
val version = sys.props("java.specification.version").split("\\.").map(_.toInt)
if (version(0) == 1) version(1) else version(0)
}
}
/**

View File

@ -4,6 +4,7 @@ package ivy
import org.apache.ivy.plugins.resolver.DependencyResolver
import org.apache.ivy.core.settings.IvySettings
import sbt.util.Logger
import sbt.internal.librarymanagement.LMSysProp
/**
* Represents configurable options for update task.
@ -109,7 +110,7 @@ object UpdateOptions {
interProjectFirst = true,
latestSnapshots = true,
cachedResolution = false,
gigahorse = sys.props.get("sbt.gigahorse") map { _.toLowerCase == "true" } getOrElse true,
gigahorse = LMSysProp.useGigahorse,
resolverConverter = PartialFunction.empty,
moduleResolvers = Map.empty
)