Merge pull request #4659 from eed3si9n/wip/jdkdetection

ignore bad SDKMAN directories
This commit is contained in:
eugene yokota 2019-05-09 13:31:44 -04:00 committed by GitHub
commit 10dc29b4b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 14 deletions

View File

@ -11,6 +11,7 @@ package internal
import java.io.File
import scala.collection.immutable.ListMap
import scala.annotation.tailrec
import scala.util.{ Try, Success, Failure }
import sbt.io.Path
import sbt.io.syntax._
import sbt.Cross._
@ -45,7 +46,7 @@ private[sbt] object CrossJava {
}
}
def parseSdkmanString(version: String): JavaVersion = {
def parseSdkmanString(version: String): Try[JavaVersion] = Try {
val Num = """([0-9]+)""".r
def splitDash(str: String): Vector[String] =
Option(str) match {
@ -60,13 +61,19 @@ private[sbt] object CrossJava {
splitDash(version) match {
case xs if xs.size < 2 => sys.error(s"Invalid SDKMAN Java version: $version")
case xs =>
val ds = splitDot(xs.init.head)
val first = xs.init.head
val ds =
if (!first.contains(".") && first.contains("u")) splitDot(first.replaceFirst("u", ".0."))
else splitDot(first)
val nums = ds.takeWhile(
_ match {
case Num(_) => true
case _ => false
}
) map { _.toLong }
if (nums.isEmpty) {
sys.error(s"Invalid SDKMAN Java version: $version")
}
val nonNum = ds.drop(nums.size).mkString("")
// last dash indicates vendor code
val (vnd0, tag0) = (xs.last, nonNum) match {
@ -424,12 +431,13 @@ private[sbt] object CrossJava {
val base: File = Path.userHome / ".sdkman" / "candidates" / "java"
def candidates(): Vector[String] = wrapNull(base.list())
def javaHomes: Vector[(String, File)] =
candidates
.collect {
case dir if dir.contains("-") =>
val v = CrossJava.parseSdkmanString(dir).toString
v -> (base / dir)
}
candidates.collect {
case dir if dir.contains("-") =>
CrossJava.parseSdkmanString(dir) match {
case Success(v) => Some(v.toString -> (base / dir))
case Failure(_) => None
}
}.flatten
}
class WindowsDiscoverConfig(base: File) extends JavaDiscoverConf {

View File

@ -97,18 +97,21 @@ class CrossJavaTest extends FunSuite with DiagrammedAssertions {
test("SDKMAN candidate parsing") {
assert(
CrossJava
.parseSdkmanString("11.0.2.hs-adpt") == JavaVersion(Vector(11L, 0L, 2L), Some("adopt"))
.parseSdkmanString("11.0.2.hs-adpt")
.get == JavaVersion(Vector(11L, 0L, 2L), Some("adopt"))
)
assert(
CrossJava
.parseSdkmanString("11.0.2.j9-adpt") == JavaVersion(
.parseSdkmanString("11.0.2.j9-adpt")
.get == JavaVersion(
Vector(11L, 0L, 2L),
Some("adopt-openj9")
)
)
assert(
CrossJava
.parseSdkmanString("13.ea.13-open") == JavaVersion(
.parseSdkmanString("13.ea.13-open")
.get == JavaVersion(
Vector(13L),
Vector("ea13"),
Some("openjdk")
@ -116,21 +119,38 @@ class CrossJavaTest extends FunSuite with DiagrammedAssertions {
)
assert(
CrossJava
.parseSdkmanString("12.0.0-zulu") == JavaVersion(
.parseSdkmanString("12.0.0-zulu")
.get == JavaVersion(
Vector(12L, 0L, 0L),
Some("zulu")
)
)
assert(
CrossJava
.parseSdkmanString("8.0.201-oracle") == JavaVersion(
.parseSdkmanString("8u152-zulu")
.get == JavaVersion(
Vector(8L, 0L, 152L),
Vector(),
Some("zulu")
)
)
assert(
CrossJava
.parseSdkmanString("8x152-zulu")
.isFailure
)
assert(
CrossJava
.parseSdkmanString("8.0.201-oracle")
.get == JavaVersion(
Vector(8L, 0L, 201L),
Some("oracle")
)
)
assert(
CrossJava
.parseSdkmanString("1.0.0-rc-14-grl") == JavaVersion(
.parseSdkmanString("1.0.0-rc-14-grl")
.get == JavaVersion(
Vector(1L, 0L, 0L),
Vector("rc14"),
Some("graalvm")