Skip to content

Commit efc4164

Browse files
committed
Respect Coursier cache override for Scala CLI local repo
1 parent 87910ff commit efc4164

17 files changed

Lines changed: 166 additions & 60 deletions

modules/build/src/main/scala/scala/build/LocalRepo.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package scala.build
2+
import coursier.cache.FileCache
23
import coursier.paths.Util
4+
import coursier.util.Task
35

46
import java.io.{BufferedInputStream, Closeable}
57
import java.nio.channels.{FileChannel, FileLock}
@@ -12,6 +14,9 @@ object LocalRepo {
1214

1315
private def resourcePath = Constants.localRepoResourcePath
1416

17+
private[build] def localRepoBaseDir(cache: FileCache[Task]): os.Path =
18+
os.Path(cache.location, os.pwd) / "scalacli-local-repo"
19+
1520
private def using[S <: Closeable, T](is: => S)(f: S => T): T = {
1621
var is0 = Option.empty[S]
1722
try {
@@ -51,10 +56,11 @@ object LocalRepo {
5156
}
5257

5358
def localRepo(
54-
baseDir: os.Path,
59+
cache: FileCache[Task],
5560
logger: Logger,
5661
loader: ClassLoader = Thread.currentThread().getContextClassLoader
5762
): Option[String] = {
63+
val baseDir = localRepoBaseDir(cache)
5864
val archiveUrl = loader.getResource(resourcePath)
5965
logger.debug(s"archive url: $archiveUrl")
6066

modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,18 @@ import scala.build.Position.File
1616
import scala.build.actionable.ActionableDiagnostic.*
1717
import scala.build.actionable.ActionablePreprocessor
1818
import scala.build.options.{BuildOptions, InternalOptions, SuppressWarningOptions}
19-
import scala.build.{BuildThreads, Directories, LocalRepo}
19+
import scala.build.{BuildThreads, LocalRepo}
2020
import scala.jdk.CollectionConverters.*
2121

2222
class ActionableDiagnosticTests extends TestUtil.ScalaCliBuildSuite {
2323

24-
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-")
25-
val directories: Directories = Directories.under(extraRepoTmpDir)
26-
val baseOptions = BuildOptions(
24+
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-")
25+
val testCache: FileCache[Task] =
26+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
27+
val baseOptions = BuildOptions(
2728
internal = InternalOptions(
28-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger())
29+
cache = Some(testCache),
30+
localRepository = LocalRepo.localRepo(testCache, TestLogger())
2931
)
3032
)
3133
val buildThreads: BuildThreads = BuildThreads.create()

modules/build/src/test/scala/scala/build/tests/BspServerTests.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package scala.build.tests
22

33
import com.eed3si9n.expecty.Expecty.expect
4+
import coursier.cache.FileCache
5+
import coursier.util.Task
46

57
import java.util.concurrent.TimeUnit
68

@@ -14,16 +16,18 @@ import scala.build.bsp.{
1416
WrappedSourcesResult
1517
}
1618
import scala.build.options.{BuildOptions, InternalOptions, Scope}
17-
import scala.build.{Build, BuildThreads, Directories, GeneratedSource, LocalRepo}
19+
import scala.build.{Build, BuildThreads, GeneratedSource, LocalRepo}
1820
import scala.collection.mutable.ArrayBuffer
1921
import scala.jdk.CollectionConverters.*
2022

2123
class BspServerTests extends TestUtil.ScalaCliBuildSuite {
22-
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-bsp-server-")
23-
val directories: Directories = Directories.under(extraRepoTmpDir)
24-
val baseOptions = BuildOptions(
24+
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-bsp-server-")
25+
val testCache: FileCache[Task] =
26+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
27+
val baseOptions = BuildOptions(
2528
internal = InternalOptions(
26-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger())
29+
cache = Some(testCache),
30+
localRepository = LocalRepo.localRepo(testCache, TestLogger())
2731
)
2832
)
2933
val buildThreads: BuildThreads = BuildThreads.create()

modules/build/src/test/scala/scala/build/tests/BuildOptionsTests.scala

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.eed3si9n.expecty.Expecty.assert as expect
44
import coursier.Repositories
55
import coursier.cache.FileCache
66
import coursier.maven.MavenRepository
7+
import coursier.util.Task
78
import coursier.version.Version
89
import dependency.ScalaParameters
910

@@ -18,17 +19,19 @@ import scala.build.internal.Constants.*
1819
import scala.build.internal.Regexes.{scala2NightlyRegex, scala3LtsRegex}
1920
import scala.build.options.*
2021
import scala.build.tests.util.BloopServer
21-
import scala.build.{Build, BuildThreads, Directories, LocalRepo, Positioned, RepositoryUtils}
22+
import scala.build.{Build, BuildThreads, LocalRepo, Positioned, RepositoryUtils}
2223
import scala.concurrent.duration.DurationInt
2324

2425
class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite {
2526
override def munitFlakyOK: Boolean = TestUtil.isCI
2627
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
27-
val directories: Directories = Directories.under(extraRepoTmpDir)
28-
val buildThreads: BuildThreads = BuildThreads.create()
29-
val baseOptions = BuildOptions(
28+
val testCache: FileCache[Task] =
29+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
30+
val buildThreads: BuildThreads = BuildThreads.create()
31+
val baseOptions = BuildOptions(
3032
internal = InternalOptions(
31-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()),
33+
cache = Some(testCache),
34+
localRepository = LocalRepo.localRepo(testCache, TestLogger()),
3235
keepDiagnostics = true
3336
)
3437
)
@@ -374,7 +377,8 @@ class BuildOptionsTests extends TestUtil.ScalaCliBuildSuite {
374377
test("User scalac options shadow internal ones") {
375378
val defaultOptions = BuildOptions(
376379
internal = InternalOptions(
377-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger())
380+
cache = Some(testCache),
381+
localRepository = LocalRepo.localRepo(testCache, TestLogger())
378382
)
379383
)
380384

modules/build/src/test/scala/scala/build/tests/BuildProjectTests.scala

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package scala.build.tests
22

33
import bloop.rifle.BloopRifleLogger
44
import com.eed3si9n.expecty.Expecty.expect
5-
import coursier.cache.CacheLogger
5+
import coursier.cache.{CacheLogger, FileCache}
6+
import coursier.util.Task
67
import org.scalajs.logging.{Logger as ScalaJsLogger, NullLogger}
78

89
import java.io.PrintStream
@@ -61,13 +62,22 @@ class BuildProjectTests extends TestUtil.ScalaCliBuildSuite {
6162
}
6263

6364
test("workspace for bsp") {
64-
val options = BuildOptions(
65-
internal = InternalOptions(localRepository =
66-
LocalRepo.localRepo(scala.build.Directories.default().localRepoDir, TestLogger())
65+
val cacheDir = os.temp.dir(prefix = "scala-cli-tests-build-project-")
66+
val testCache = FileCache().withLocation(cacheDir.toIO)
67+
val options = BuildOptions(
68+
internal = InternalOptions(
69+
cache = Some(testCache),
70+
localRepository = LocalRepo.localRepo(testCache, TestLogger())
6771
)
6872
)
69-
val inputs = Inputs.empty("project")
70-
val sources = Sources(Nil, Nil, None, Nil, options)
73+
val inputs = Inputs.empty("project")
74+
val sources = Sources(
75+
paths = Nil,
76+
inMemory = Nil,
77+
defaultMainClass = None,
78+
resourceDirs = Nil,
79+
buildOptions = options
80+
)
7181
val logger = new LoggerMock()
7282
val artifacts = options.artifacts(logger, Scope.Test).orThrow
7383

modules/build/src/test/scala/scala/build/tests/BuildTests.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import bloop.rifle.BloopRifleConfig
55
import ch.epfl.scala.bsp4j
66
import com.eed3si9n.expecty.Expecty.expect
77
import com.google.gson.Gson
8+
import coursier.cache.FileCache
9+
import coursier.util.Task
810
import dependency.parser.DependencyParser
911

1012
import java.io.IOException
@@ -19,7 +21,7 @@ import scala.build.options.*
1921
import scala.build.tastylib.TastyData
2022
import scala.build.tests.TestUtil.*
2123
import scala.build.tests.util.BloopServer
22-
import scala.build.{Build, BuildThreads, Directories, LocalRepo, Positioned}
24+
import scala.build.{Build, BuildThreads, LocalRepo, Positioned}
2325
import scala.jdk.CollectionConverters.*
2426
import scala.meta.internal.semanticdb.TextDocuments
2527
import scala.util.Properties
@@ -31,8 +33,9 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite {
3133
def bloopConfigOpt: Option[BloopRifleConfig] =
3234
if server then Some(BloopServer.bloopConfig) else None
3335

34-
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
35-
val directories: Directories = Directories.under(extraRepoTmpDir)
36+
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
37+
val testCache: FileCache[Task] =
38+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
3639

3740
override def afterAll(): Unit = {
3841
TestInputs.tryRemoveAll(extraRepoTmpDir)
@@ -41,7 +44,8 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite {
4144

4245
val baseOptions = BuildOptions(
4346
internal = InternalOptions(
44-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()),
47+
cache = Some(testCache),
48+
localRepository = LocalRepo.localRepo(testCache, TestLogger()),
4549
keepDiagnostics = true
4650
)
4751
)

modules/build/src/test/scala/scala/build/tests/DirectiveTests.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package scala.build.tests
22

33
import bloop.rifle.BloopRifleConfig
44
import com.eed3si9n.expecty.Expecty.expect
5+
import coursier.cache.FileCache
6+
import coursier.util.Task
57

68
import scala.build.Ops.EitherThrowOps
79
import scala.build.errors.{
@@ -19,13 +21,14 @@ import scala.build.options.{
1921
Scope
2022
}
2123
import scala.build.tests.util.BloopServer
22-
import scala.build.{Build, BuildThreads, Directories, LocalRepo, Position, Positioned}
24+
import scala.build.{Build, BuildThreads, LocalRepo, Position, Positioned}
2325

2426
class DirectiveTests extends TestUtil.ScalaCliBuildSuite {
2527
val buildThreads: BuildThreads = BuildThreads.create()
2628
def bloopConfigOpt: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig)
2729
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
28-
val directories: Directories = Directories.under(extraRepoTmpDir)
30+
val testCache: FileCache[Task] =
31+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
2932

3033
override def afterAll(): Unit = {
3134
TestInputs.tryRemoveAll(extraRepoTmpDir)
@@ -34,7 +37,8 @@ class DirectiveTests extends TestUtil.ScalaCliBuildSuite {
3437

3538
val baseOptions = BuildOptions(
3639
internal = InternalOptions(
37-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()),
40+
cache = Some(testCache),
41+
localRepository = LocalRepo.localRepo(testCache, TestLogger()),
3842
keepDiagnostics = true
3943
)
4044
)

modules/build/src/test/scala/scala/build/tests/InputsTests.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@ package scala.build.tests
22

33
import bloop.rifle.BloopRifleConfig
44
import com.eed3si9n.expecty.Expecty.expect
5+
import coursier.cache.FileCache
6+
import coursier.util.Task
57

68
import scala.build.input.*
79
import scala.build.input.ElementsUtils.*
810
import scala.build.internal.Constants
911
import scala.build.options.{BuildOptions, InternalOptions}
1012
import scala.build.tests.util.BloopServer
11-
import scala.build.{Build, BuildThreads, Directories, LocalRepo}
13+
import scala.build.{Build, BuildThreads, LocalRepo}
1214

1315
class InputsTests extends TestUtil.ScalaCliBuildSuite {
14-
val buildThreads: BuildThreads = BuildThreads.create()
15-
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
16-
val directories: Directories = Directories.under(extraRepoTmpDir)
16+
val buildThreads: BuildThreads = BuildThreads.create()
17+
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
18+
val testCache: FileCache[Task] =
19+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
1720
def bloopConfigOpt: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig)
1821
val buildOptions: BuildOptions = BuildOptions(
1922
internal = InternalOptions(
20-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()),
23+
cache = Some(testCache),
24+
localRepository = LocalRepo.localRepo(testCache, TestLogger()),
2125
keepDiagnostics = true
2226
)
2327
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scala.build.tests
2+
3+
import coursier.cache.FileCache
4+
import coursier.util.Task
5+
6+
import scala.build.LocalRepo
7+
8+
class LocalRepoTests extends TestUtil.ScalaCliBuildSuite {
9+
test("localRepoBaseDir is anchored to the coursier cache location") {
10+
val cacheDir = os.temp.dir(prefix = "scala-cli-cache-")
11+
val cache = FileCache().withLocation(cacheDir.toIO)
12+
assertEquals(LocalRepo.localRepoBaseDir(cache), cacheDir / "scalacli-local-repo")
13+
}
14+
}

modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@ package scala.build.tests
22

33
import bloop.rifle.BloopRifleConfig
44
import com.eed3si9n.expecty.Expecty.expect
5+
import coursier.cache.FileCache
6+
import coursier.util.Task
57

68
import scala.build.options.{BuildOptions, InternalOptions, PackageType}
79
import scala.build.tests.util.BloopServer
8-
import scala.build.{BuildThreads, Directories, LocalRepo}
10+
import scala.build.{BuildThreads, LocalRepo}
911

1012
class PackagingUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite {
1113
val buildThreads: BuildThreads = BuildThreads.create()
1214
def bloopConfig: Option[BloopRifleConfig] = Some(BloopServer.bloopConfig)
1315

14-
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
15-
val directories: Directories = Directories.under(extraRepoTmpDir)
16+
val extraRepoTmpDir: os.Path = os.temp.dir(prefix = "scala-cli-tests-extra-repo-")
17+
val testCache: FileCache[Task] =
18+
FileCache().withLocation((extraRepoTmpDir / "cache").toIO)
1619

1720
val buildOptions = BuildOptions(
1821
internal = InternalOptions(
19-
localRepository = LocalRepo.localRepo(directories.localRepoDir, TestLogger()),
22+
cache = Some(testCache),
23+
localRepository = LocalRepo.localRepo(testCache, TestLogger()),
2024
keepDiagnostics = true
2125
)
2226
)

0 commit comments

Comments
 (0)