Skip to content

Commit 9d09b78

Browse files
committed
Add a launcher option to add predefined repositories
1 parent ba74614 commit 9d09b78

File tree

4 files changed

+60
-2
lines changed

4 files changed

+60
-2
lines changed

modules/cli/src/main/scala/scala/cli/ScalaCli.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import scala.cli.javaLauncher.JavaLauncherCli
1616
import scala.cli.launcher.{LauncherCli, LauncherOptions, PowerOptions}
1717
import scala.cli.publish.BouncycastleSignerMaker
1818
import scala.cli.util.ConfigDbUtils
19+
import scala.collection.mutable.ListBuffer
1920
import scala.util.Properties
2021

2122
object ScalaCli {
@@ -53,7 +54,8 @@ object ScalaCli {
5354
private def isGraalvmNativeImage: Boolean =
5455
sys.props.contains("org.graalvm.nativeimage.imagecode")
5556

56-
private var defaultScalaVersion: Option[String] = None
57+
private var defaultScalaVersion: Option[String] = None
58+
val launcherPredefinedRepositories: ListBuffer[String] = ListBuffer.empty
5759

5860
def getDefaultScalaVersion: String = defaultScalaVersion.getOrElse(Constants.defaultScalaVersion)
5961

@@ -243,6 +245,8 @@ object ScalaCli {
243245
case None =>
244246
if launcherOpts.cliUserScalaVersion.nonEmpty then
245247
defaultScalaVersion = launcherOpts.cliUserScalaVersion
248+
if launcherOpts.cliPredefinedRepository.nonEmpty then
249+
launcherPredefinedRepositories.addAll(launcherOpts.cliPredefinedRepository)
246250
if launcherOpts.powerOptions.power then
247251
isSipScala = false
248252
args0.toArray

modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,10 @@ final case class SharedOptions(
394394
extraClassPath = extraRegularJarsAndClasspath,
395395
extraCompileOnlyJars = extraCompileOnlyClassPath,
396396
extraSourceJars = extraSourceJars.extractedClassPath ++ assumedSourceJars,
397-
extraRepositories = dependencies.repository.map(_.trim).filter(_.nonEmpty),
397+
extraRepositories =
398+
(dependencies.repository ++ ScalaCli.launcherPredefinedRepositories).map(_.trim).filter(
399+
_.nonEmpty
400+
),
398401
extraDependencies = ShadowingSeq.from(
399402
SharedOptions.parseDependencies(
400403
dependencies.dependency.map(Positioned.none),

modules/cli/src/main/scala/scala/cli/launcher/LauncherOptions.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ final case class LauncherOptions(
2828
@Tag(tags.implementation)
2929
@Name("cliDefaultScalaVersion")
3030
cliUserScalaVersion: Option[String] = None,
31+
@Group(HelpGroup.Launcher.toString)
32+
@HelpMessage("")
33+
@Hidden
34+
@Tag(tags.implementation)
35+
@Name("r")
36+
@Name("repo")
37+
@Name("repository")
38+
@Name("predefinedRepository")
39+
cliPredefinedRepository: List[String] = Nil,
3140
@Recurse
3241
powerOptions: PowerOptions = PowerOptions()
3342
)

modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,4 +593,46 @@ class SipScalaTests extends ScalaCliSuite {
593593
expect(r.err.trim().contains("already specified"))
594594
}
595595
}
596+
597+
for {
598+
withBloop <- Seq(true, false)
599+
withBloopString = if (withBloop) "with Bloop" else "with --server=false"
600+
}
601+
test(
602+
s"default Scala version coming straight from a predefined local repository $withBloopString"
603+
) {
604+
TestInputs(
605+
os.rel / "simple.sc" -> "println(dotty.tools.dotc.config.Properties.simpleVersionString)"
606+
)
607+
.fromRoot { root =>
608+
val localRepoPath = root / "local-repo"
609+
val sv = "3.4.1-RC1"
610+
val csRes = os.proc(
611+
TestUtil.cs,
612+
"fetch",
613+
"--cache",
614+
localRepoPath,
615+
s"org.scala-lang:scala3-compiler_3:$sv"
616+
)
617+
.call(cwd = root)
618+
expect(csRes.exitCode == 0)
619+
val buildServerOptions =
620+
if (withBloop) Nil else Seq("--server=false")
621+
val r = os.proc(
622+
TestUtil.cli,
623+
"--cli-default-scala-version",
624+
sv,
625+
"--predefined-repository",
626+
(localRepoPath / "https" / "repo1.maven.org" / "maven2").toNIO.toUri.toASCIIString,
627+
"run",
628+
"simple.sc",
629+
"--with-compiler",
630+
"--offline",
631+
"--power",
632+
buildServerOptions
633+
)
634+
.call(cwd = root)
635+
expect(r.out.trim() == sv)
636+
}
637+
}
596638
}

0 commit comments

Comments
 (0)