Skip to content

Commit a5cdf7a

Browse files
authored
Force a cache refresh when scala version is not found (#1096)
1 parent 18ac25d commit a5cdf7a

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

modules/options/src/main/scala/scala/build/options/BuildOptions.scala

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import scala.build.internal.Regexes.scala3NightlyNicknameRegex
2020
import scala.build.internal.{Constants, OsLibc, StableScalaVersion}
2121
import scala.build.options.validation.BuildOptionsRule
2222
import scala.build.{Artifacts, Logger, Os, Position, Positioned}
23+
import scala.concurrent.duration._
2324
import scala.util.control.NonFatal
2425

2526
final case class BuildOptions(
@@ -334,10 +335,16 @@ final case class BuildOptions(
334335
}
335336

336337
lazy val scalaParams: Either[BuildException, Option[ScalaParameters]] =
337-
computeScalaParams(Constants.version)
338+
computeScalaParams(Constants.version, finalCache).orElse(
339+
// when the passed scala version is missed in the cache, we always force a cache refresh
340+
// https://github.com/VirtusLab/scala-cli/issues/1090
341+
computeScalaParams(Constants.version, finalCache.withTtl(0.seconds))
342+
)
338343

339-
private[build] def computeScalaParams(scalaCliVersion: String)
340-
: Either[BuildException, Option[ScalaParameters]] = either {
344+
private[build] def computeScalaParams(
345+
scalaCliVersion: String,
346+
cache: FileCache[Task] = finalCache
347+
): Either[BuildException, Option[ScalaParameters]] = either {
341348

342349
lazy val maxSupportedStableScalaVersions = latestSupportedStableScalaVersion(scalaCliVersion)
343350
lazy val latestSupportedStableVersions = maxSupportedStableScalaVersions.map(_.repr)
@@ -349,46 +356,41 @@ final case class BuildOptions(
349356
val sv = value {
350357
svInput match {
351358
case "3.nightly" =>
352-
ScalaVersionUtil.GetNightly.scala3(finalCache)
359+
ScalaVersionUtil.GetNightly.scala3(cache)
353360
case scala3NightlyNicknameRegex(threeSubBinaryNum) =>
354361
ScalaVersionUtil.GetNightly.scala3X(
355362
threeSubBinaryNum,
356-
finalCache,
363+
cache,
357364
latestSupportedStableVersions
358365
)
359366
case "2.nightly" | "2.13.nightly" =>
360-
ScalaVersionUtil.GetNightly.scala2("2.13", finalCache)
367+
ScalaVersionUtil.GetNightly.scala2("2.13", cache)
361368
case "2.12.nightly" =>
362-
ScalaVersionUtil.GetNightly.scala2("2.12", finalCache)
369+
ScalaVersionUtil.GetNightly.scala2("2.12", cache)
363370
case versionString if ScalaVersionUtil.isScala3Nightly(versionString) =>
364371
ScalaVersionUtil.CheckNightly.scala3(
365372
versionString,
366-
finalCache,
373+
cache,
367374
latestSupportedStableVersions
368375
)
369376
.map(_ => versionString)
370377
case versionString if ScalaVersionUtil.isScala2Nightly(versionString) =>
371378
ScalaVersionUtil.CheckNightly.scala2(
372379
versionString,
373-
finalCache,
380+
cache,
374381
latestSupportedStableVersions
375382
)
376383
.map(_ => versionString)
377384
case versionString if versionString.exists(_.isLetter) =>
378-
val allVersions =
379-
ScalaVersionUtil.allMatchingVersions(Some(versionString), finalCache)
380385
ScalaVersionUtil.validateNonStable(
381386
versionString,
382-
allVersions,
387+
cache,
383388
latestSupportedStableVersions
384389
)
385390
case versionString =>
386-
val allStableVersions =
387-
ScalaVersionUtil.allMatchingVersions(Some(versionString), finalCache)
388-
.filter(ScalaVersionUtil.isStable)
389391
ScalaVersionUtil.validateStable(
390392
versionString,
391-
allStableVersions,
393+
cache,
392394
latestSupportedStableVersions,
393395
maxSupportedStableScalaVersions
394396
)

modules/options/src/main/scala/scala/build/options/ScalaVersionUtil.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,16 @@ object ScalaVersionUtil {
169169
new NoValidScalaVersionFoundError(res.versions.available, latestSupportedStableVersions)
170170
)
171171
}
172-
173172
}
174173

175174
def validateNonStable(
176175
scalaVersionStringArg: String,
177-
versionPool: Seq[String],
176+
cache: FileCache[Task],
178177
latestSupportedStableVersions: Seq[String]
179-
): Either[ScalaVersionError, String] =
178+
): Either[ScalaVersionError, String] = {
179+
val versionPool =
180+
ScalaVersionUtil.allMatchingVersions(Some(scalaVersionStringArg), cache)
181+
180182
if (versionPool.contains(scalaVersionStringArg))
181183
if (isSupportedVersion(scalaVersionStringArg))
182184
Right(scalaVersionStringArg)
@@ -190,13 +192,17 @@ object ScalaVersionUtil {
190192
scalaVersionStringArg,
191193
latestSupportedStableVersions
192194
))
195+
}
193196

194197
def validateStable(
195198
scalaVersionStringArg: String,
196-
versionPool: Seq[String],
199+
cache: FileCache[Task],
197200
latestSupportedStableVersions: Seq[String],
198201
maxSupportedStableScalaVersions: Seq[Version]
199202
): Either[ScalaVersionError, String] = {
203+
val versionPool =
204+
ScalaVersionUtil.allMatchingVersions(Some(scalaVersionStringArg), cache)
205+
.filter(ScalaVersionUtil.isStable)
200206
val prefix =
201207
if (Util.isFullScalaVersion(scalaVersionStringArg)) scalaVersionStringArg
202208
else if (scalaVersionStringArg.endsWith(".")) scalaVersionStringArg

0 commit comments

Comments
 (0)