mirror of https://github.com/sbt/sbt.git
Merge pull request #4659 from eed3si9n/wip/jdkdetection
ignore bad SDKMAN directories
This commit is contained in:
commit
10dc29b4b4
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Reference in New Issue