Skip to content

Commit acba26c

Browse files
authored
Avoid compiling scope test for package/run/ commands (#638)
* Avoid compiling scope test for package/run/ * Print fullClassPath from test if someone pass --class-path * Remove shouldCompileTest from BuildOptions
1 parent 98508de commit acba26c

File tree

13 files changed

+182
-56
lines changed

13 files changed

+182
-56
lines changed

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 57 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ object Build {
140140
logger: Logger,
141141
buildClient: BloopBuildClient,
142142
bloopServer: bloop.BloopServer,
143-
crossBuilds: Boolean
143+
crossBuilds: Boolean,
144+
buildTests: Boolean
144145
): Either[BuildException, Builds] = either {
145146

146147
val crossSources = value {
@@ -171,7 +172,7 @@ object Build {
171172

172173
def doBuild(
173174
overrideOptions: BuildOptions
174-
): Either[BuildException, (Build, Build)] = either {
175+
): Either[BuildException, (Build, Option[Build])] = either {
175176

176177
val baseOptions = overrideOptions.orElse(sharedOptions)
177178
val scopedSources = value(crossSources.scopedSources(baseOptions))
@@ -212,41 +213,48 @@ object Build {
212213
scope,
213214
logger,
214215
buildClient,
215-
bloopServer
216+
bloopServer,
217+
buildTests
216218
)
217219

218220
value(res)
219221
}
220222

221223
val mainBuild = value(doBuildScope(mainOptions, mainSources, Scope.Main))
222224

223-
val testBuild = value {
224-
mainBuild match {
225-
case s: Build.Successful =>
226-
val extraTestOptions = BuildOptions(
227-
classPathOptions = ClassPathOptions(
228-
extraClassPath = Seq(s.output)
229-
)
230-
)
231-
val testOptions0 = extraTestOptions.orElse(testOptions)
232-
doBuildScope(testOptions0, testSources, Scope.Test)
233-
case _ =>
234-
Right(Build.Cancelled(
235-
inputs,
236-
sharedOptions,
237-
Scope.Test,
238-
"Parent build failed or cancelled"
239-
))
225+
val testBuildOpt =
226+
if (buildTests) {
227+
val testBuild = value {
228+
mainBuild match {
229+
case s: Build.Successful =>
230+
val extraTestOptions = BuildOptions(
231+
classPathOptions = ClassPathOptions(
232+
extraClassPath = Seq(s.output)
233+
)
234+
)
235+
val testOptions0 = extraTestOptions.orElse(testOptions)
236+
doBuildScope(testOptions0, testSources, Scope.Test)
237+
case _ =>
238+
Right(Build.Cancelled(
239+
inputs,
240+
sharedOptions,
241+
Scope.Test,
242+
"Parent build failed or cancelled"
243+
))
244+
}
245+
}
246+
Some(testBuild)
240247
}
241-
}
248+
else None
242249

243250
doPostProcess(mainBuild, inputs0, Scope.Main)
244-
doPostProcess(testBuild, inputs0, Scope.Test)
251+
for (testBuild <- testBuildOpt)
252+
doPostProcess(testBuild, inputs0, Scope.Test)
245253

246-
(mainBuild, testBuild)
254+
(mainBuild, testBuildOpt)
247255
}
248256

249-
def buildScopes(): Either[BuildException, (Build, Seq[Build], Build, Seq[Build])] =
257+
def buildScopes(): Either[BuildException, (Build, Seq[Build], Option[Build], Seq[Build])] =
250258
either {
251259
val (mainBuild, testBuild) = value(doBuild(BuildOptions()))
252260

@@ -259,20 +267,21 @@ object Build {
259267
.sequence
260268
.left.map(CompositeBuildException(_))
261269
}
262-
(extraBuilds.map(_._1), extraBuilds.map(_._2))
270+
(extraBuilds.map(_._1), extraBuilds.flatMap(_._2))
263271
}
264272
else
265273
(Nil, Nil)
266274

267275
(mainBuild, extraMainBuilds, testBuild, extraTestBuilds)
268276
}
269277

270-
val (mainBuild, extraBuilds, testBuild, extraTestBuilds) = value(buildScopes())
278+
val (mainBuild, extraBuilds, testBuildOpt, extraTestBuilds) = value(buildScopes())
271279

272280
copyResourceToClassesDir(mainBuild)
273-
copyResourceToClassesDir(testBuild)
281+
for (testBuild <- testBuildOpt)
282+
copyResourceToClassesDir(testBuild)
274283

275-
Builds(Seq(mainBuild, testBuild), Seq(extraBuilds, extraTestBuilds))
284+
Builds(Seq(mainBuild) ++ testBuildOpt.toSeq, Seq(extraBuilds, extraTestBuilds))
276285
}
277286

278287
private def copyResourceToClassesDir(build: Build) = build match {
@@ -303,7 +312,8 @@ object Build {
303312
scope: Scope,
304313
logger: Logger,
305314
buildClient: BloopBuildClient,
306-
bloopServer: bloop.BloopServer
315+
bloopServer: bloop.BloopServer,
316+
buildTests: Boolean
307317
): Either[BuildException, Build] = either {
308318

309319
val build0 = value {
@@ -329,7 +339,8 @@ object Build {
329339
logger,
330340
successful.options.javaHome().value.javaCommand,
331341
buildClient,
332-
bloopServer
342+
bloopServer,
343+
buildTests
333344
)
334345
res.flatMap {
335346
case Some(b) => Right(b)
@@ -388,7 +399,8 @@ object Build {
388399
threads: BuildThreads,
389400
bloopConfig: BloopRifleConfig,
390401
logger: Logger,
391-
crossBuilds: Boolean
402+
crossBuilds: Boolean,
403+
buildTests: Boolean
392404
): Either[BuildException, Builds] = {
393405
val buildClient = BloopBuildClient.create(
394406
logger,
@@ -412,7 +424,8 @@ object Build {
412424
logger = logger,
413425
buildClient = buildClient,
414426
bloopServer = bloopServer,
415-
crossBuilds = crossBuilds
427+
crossBuilds = crossBuilds,
428+
buildTests
416429
)
417430
}
418431
}
@@ -422,14 +435,16 @@ object Build {
422435
options: BuildOptions,
423436
bloopConfig: BloopRifleConfig,
424437
logger: Logger,
425-
crossBuilds: Boolean
438+
crossBuilds: Boolean,
439+
buildTests: Boolean
426440
): Either[BuildException, Builds] =
427441
build(
428442
inputs,
429443
options, /*scope,*/ BuildThreads.create(),
430444
bloopConfig,
431445
logger,
432-
crossBuilds = crossBuilds
446+
crossBuilds = crossBuilds,
447+
buildTests
433448
)
434449

435450
def validate(
@@ -450,7 +465,8 @@ object Build {
450465
bloopConfig: BloopRifleConfig,
451466
logger: Logger,
452467
crossBuilds: Boolean,
453-
postAction: () => Unit = () => ()
468+
postAction: () => Unit = () => (),
469+
buildTests: Boolean
454470
)(action: Either[BuildException, Builds] => Unit): Watcher = {
455471

456472
val buildClient = BloopBuildClient.create(
@@ -478,7 +494,8 @@ object Build {
478494
logger,
479495
buildClient,
480496
bloopServer,
481-
crossBuilds = crossBuilds
497+
crossBuilds = crossBuilds,
498+
buildTests
482499
)
483500
action(res)
484501
}
@@ -908,7 +925,8 @@ object Build {
908925
logger: Logger,
909926
javaCommand: String,
910927
buildClient: BloopBuildClient,
911-
bloopServer: bloop.BloopServer
928+
bloopServer: bloop.BloopServer,
929+
buildTests: Boolean
912930
): Either[BuildException, Option[Build]] = either {
913931
val jmhProjectName = inputs.projectName + "_jmh"
914932
val jmhOutputDir = inputs.workspace / Constants.workspaceDirName / jmhProjectName
@@ -954,7 +972,8 @@ object Build {
954972
logger,
955973
buildClient,
956974
bloopServer,
957-
crossBuilds = false
975+
crossBuilds = false,
976+
buildTests
958977
)
959978
}
960979
Some(jmhBuilds.main)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ final case class TestInputs(
4646
buildThreads,
4747
bloopConfig,
4848
TestLogger(),
49-
crossBuilds = false
49+
crossBuilds = false,
50+
buildTests = true
5051
)
5152
f(root, inputs, res.map(_.main))
5253
}

modules/cli/src/main/scala/scala/cli/commands/Compile.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import caseapp._
44

55
import java.io.File
66

7+
import scala.build.options.Scope
78
import scala.build.{Build, Builds}
89
import scala.cli.CurrentParams
910

@@ -51,7 +52,10 @@ object Compile extends ScalaCommand[CompileOptions] {
5152
sys.exit(1)
5253
}
5354
else if (options.classPath)
54-
for (s <- builds.main.successfulOpt) {
55+
for {
56+
build <- builds.get(Scope.Test).orElse(builds.get(Scope.Main))
57+
s <- build.successfulOpt
58+
} {
5559
val cp = s.fullClassPath.map(_.toAbsolutePath.toString).mkString(File.pathSeparator)
5660
println(cp)
5761
}
@@ -67,7 +71,8 @@ object Compile extends ScalaCommand[CompileOptions] {
6771
bloopRifleConfig,
6872
logger,
6973
crossBuilds = cross,
70-
postAction = () => WatchUtil.printWatchMessage()
74+
postAction = () => WatchUtil.printWatchMessage(),
75+
buildTests = options.test
7176
) { res =>
7277
for (builds <- res.orReport(logger))
7378
postBuild(builds, allowExit = false)
@@ -81,7 +86,8 @@ object Compile extends ScalaCommand[CompileOptions] {
8186
buildOptions,
8287
bloopRifleConfig,
8388
logger,
84-
crossBuilds = cross
89+
crossBuilds = cross,
90+
buildTests = options.test
8591
)
8692
val builds = res.orExit(logger)
8793
postBuild(builds, allowExit = true)

modules/cli/src/main/scala/scala/cli/commands/CompileOptions.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ final case class CompileOptions(
1818
@Name("p")
1919
@Name("classpath")
2020
@HelpMessage("Print the resulting class path")
21-
classPath: Boolean = false
21+
classPath: Boolean = false,
22+
@HelpMessage("Compile test scope")
23+
test: Boolean = false
2224
) {
2325
// format: on
2426

2527
def buildOptions: BuildOptions =
2628
shared.buildOptions(enableJmh = false, jmhVersion = None)
29+
2730
}
2831

2932
object CompileOptions {

modules/cli/src/main/scala/scala/cli/commands/Metabrowse.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,14 @@ object Metabrowse extends ScalaCommand[MetabrowseOptions] {
3131
val bloopRifleConfig = options.shared.bloopRifleConfig()
3232

3333
val builds =
34-
Build.build(inputs, options.buildOptions, bloopRifleConfig, logger, crossBuilds = false)
34+
Build.build(
35+
inputs,
36+
options.buildOptions,
37+
bloopRifleConfig,
38+
logger,
39+
crossBuilds = false,
40+
buildTests = false
41+
)
3542
.orExit(logger)
3643

3744
val successfulBuild = builds.main match {

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ object Package extends ScalaCommand[PackageOptions] {
5252
bloopRifleConfig,
5353
logger,
5454
crossBuilds = cross,
55-
postAction = () => WatchUtil.printWatchMessage()
55+
postAction = () => WatchUtil.printWatchMessage(),
56+
buildTests = false
5657
) { res =>
5758
res.orReport(logger).map(_.main).foreach {
5859
case s: Build.Successful =>
@@ -67,7 +68,14 @@ object Package extends ScalaCommand[PackageOptions] {
6768
}
6869
else {
6970
val builds =
70-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
71+
Build.build(
72+
inputs,
73+
initialBuildOptions,
74+
bloopRifleConfig,
75+
logger,
76+
crossBuilds = cross,
77+
buildTests = false
78+
)
7179
.orExit(logger)
7280
builds.main match {
7381
case s: Build.Successful =>

modules/cli/src/main/scala/scala/cli/commands/Repl.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ object Repl extends ScalaCommand[ReplOptions] {
8383
bloopRifleConfig,
8484
logger,
8585
crossBuilds = cross,
86-
postAction = () => WatchUtil.printWatchMessage()
86+
postAction = () => WatchUtil.printWatchMessage(),
87+
buildTests = false
8788
) { res =>
8889
for (builds <- res.orReport(logger))
8990
builds.main match {
@@ -98,7 +99,14 @@ object Repl extends ScalaCommand[ReplOptions] {
9899
}
99100
else {
100101
val builds =
101-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
102+
Build.build(
103+
inputs,
104+
initialBuildOptions,
105+
bloopRifleConfig,
106+
logger,
107+
crossBuilds = cross,
108+
buildTests = false
109+
)
102110
.orExit(logger)
103111
builds.main match {
104112
case s: Build.Successful =>

modules/cli/src/main/scala/scala/cli/commands/Run.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ object Run extends ScalaCommand[RunOptions] {
6969
bloopRifleConfig,
7070
logger,
7171
crossBuilds = cross,
72-
postAction = () => WatchUtil.printWatchMessage()
72+
postAction = () => WatchUtil.printWatchMessage(),
73+
buildTests = false
7374
) { res =>
7475
res.orReport(logger).map(_.main).foreach {
7576
case s: Build.Successful =>
@@ -84,7 +85,14 @@ object Run extends ScalaCommand[RunOptions] {
8485
}
8586
else {
8687
val builds =
87-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
88+
Build.build(
89+
inputs,
90+
initialBuildOptions,
91+
bloopRifleConfig,
92+
logger,
93+
crossBuilds = cross,
94+
buildTests = false
95+
)
8896
.orExit(logger)
8997
builds.main match {
9098
case s: Build.Successful =>

0 commit comments

Comments
 (0)