diff --git a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala index 769646e086..96e58eedad 100644 --- a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala +++ b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala @@ -1,6 +1,7 @@ package scala.cli import bloop.rifle.FailedToStartServerException +import coursier.core.Version import sun.misc.{Signal, SignalHandler} import java.io.{ByteArrayOutputStream, File, PrintStream} @@ -236,9 +237,13 @@ object ScalaCli { maybeLauncherOptions = Some(launcherOpts) launcherOpts.cliVersion.map(_.trim).filter(_.nonEmpty) match { case Some(ver) => - val powerArgs = launcherOpts.powerOptions.toCliArgs - val scalaRunnerArgs = launcherOpts.scalaRunner.toCliArgs - val newArgs = powerArgs ++ scalaRunnerArgs ++ args0 + val powerArgs = launcherOpts.powerOptions.toCliArgs + val initialScalaRunnerArgs = launcherOpts.scalaRunner + val finalScalaRunnerArgs = + // if the version was specified, it doesn't make sense to check for CLI updates + (if Version(ver) < Version("1.4.0") then initialScalaRunnerArgs + else initialScalaRunnerArgs.copy(skipCliUpdates = Some(true))).toCliArgs + val newArgs = powerArgs ++ finalScalaRunnerArgs ++ args0 LauncherCli.runAndExit(ver, launcherOpts, newArgs) case _ if javaMajorVersion < 17 diff --git a/modules/cli/src/main/scala/scala/cli/commands/version/Version.scala b/modules/cli/src/main/scala/scala/cli/commands/version/Version.scala index 9315005cbd..8ae33a5399 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/version/Version.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/version/Version.scala @@ -37,7 +37,8 @@ object Version extends ScalaCommand[VersionOptions] { else if options.scalaVersion then println(defaultScalaVersion) else { println(versionInfo) - if !options.offline then + val skipCliUpdates = ScalaCli.launcherOptions.scalaRunner.skipCliUpdates.getOrElse(false) + if !options.offline && !skipCliUpdates then maybeNewerScalaCliVersion.foreach { v => logger.message( s"""Your $fullRunnerName version is outdated. The newest version is $v diff --git a/modules/cli/src/main/scala/scala/cli/launcher/ScalaRunnerLauncherOptions.scala b/modules/cli/src/main/scala/scala/cli/launcher/ScalaRunnerLauncherOptions.scala index 1b67a94b62..091837b2d7 100644 --- a/modules/cli/src/main/scala/scala/cli/launcher/ScalaRunnerLauncherOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/launcher/ScalaRunnerLauncherOptions.scala @@ -32,7 +32,14 @@ case class ScalaRunnerLauncherOptions( ) @Hidden @Tag(tags.implementation) - progName: Option[String] = None + progName: Option[String] = None, + @Group(HelpGroup.Launcher.toString) + @HelpMessage( + "This allows to skip checking for newest Scala CLI versions. --offline covers this scenario as well." + ) + @Hidden + @Tag(tags.implementation) + skipCliUpdates: Option[Boolean] = None ) { def toCliArgs: List[String] = cliUserScalaVersion.toList.flatMap(v => List("--cli-default-scala-version", v)) ++