Skip to content

Commit 910c878

Browse files
Enable lock on output dir for BSP server too (#3683)
1 parent 0fdfdbb commit 910c878

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

bsp/worker/src/mill/bsp/worker/MillBuildServer.scala

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@ package mill.bsp.worker
33
import ch.epfl.scala.bsp4j
44
import ch.epfl.scala.bsp4j._
55
import com.google.gson.JsonObject
6-
import mill.api.{DummyTestReporter, Result, Strict}
6+
import mill.api.Loose.Agg
7+
import mill.api.{CompileProblemReporter, DummyTestReporter, Result, Strict, TestReporter}
78
import mill.bsp.{BspServerResult, Constants}
89
import mill.bsp.worker.Utils.{makeBuildTarget, outputPaths, sanitizeUri}
910
import mill.define.Segment.Label
10-
import mill.define.{Args, Discover, ExternalModule, Task}
11+
import mill.define.{Args, Discover, ExternalModule, NamedTask, Task}
1112
import mill.eval.Evaluator
1213
import mill.eval.Evaluator.TaskResult
1314
import mill.main.MainModule
1415
import mill.runner.MillBuildRootModule
1516
import mill.scalalib.bsp.{BspModule, JvmBuildTarget, ScalaBuildTarget}
1617
import mill.scalalib.{JavaModule, SemanticDbJavaModule, TestModule}
18+
import mill.util.ColorLogger
1719

1820
import java.io.PrintStream
1921
import java.util.concurrent.CompletableFuture
@@ -393,7 +395,8 @@ private class MillBuildServer(
393395
val result = compileTasksEvs
394396
.groupMap(_._2)(_._1)
395397
.map { case (ev, ts) =>
396-
ev.evaluate(
398+
evaluate(
399+
ev,
397400
ts,
398401
Utils.getBspLoggedReporterPool(p.getOriginId, state.bspIdByModule, client),
399402
DummyTestReporter,
@@ -443,7 +446,8 @@ private class MillBuildServer(
443446

444447
val args = params.getArguments.getOrElse(Seq.empty[String])
445448
val runTask = module.run(Task.Anon(Args(args)))
446-
val runResult = ev.evaluate(
449+
val runResult = evaluate(
450+
ev,
447451
Strict.Agg(runTask),
448452
Utils.getBspLoggedReporterPool(runParams.getOriginId, state.bspIdByModule, client),
449453
logger = new MillBspLogger(client, runTask.hashCode(), ev.baseLogger)
@@ -508,7 +512,8 @@ private class MillBuildServer(
508512
Seq.empty[String]
509513
)
510514

511-
val results = ev.evaluate(
515+
val results = evaluate(
516+
ev,
512517
Strict.Agg(testTask),
513518
Utils.getBspLoggedReporterPool(
514519
testParams.getOriginId,
@@ -568,7 +573,8 @@ private class MillBuildServer(
568573
val compileTargetName = (module.millModuleSegments ++ Label("compile")).render
569574
debug(s"about to clean: ${compileTargetName}")
570575
val cleanTask = mainModule.clean(ev, Seq(compileTargetName): _*)
571-
val cleanResult = ev.evaluate(
576+
val cleanResult = evaluate(
577+
ev,
572578
Strict.Agg(cleanTask),
573579
logger = new MillBspLogger(client, cleanTask.hashCode, ev.baseLogger)
574580
)
@@ -642,7 +648,7 @@ private class MillBuildServer(
642648
// group by evaluator (different root module)
643649
val evaluated = groupList(tasksSeq.toSeq)(_._2)(_._1)
644650
.map { case ((ev, id), ts) =>
645-
val results = ev.evaluate(ts)
651+
val results = evaluate(ev, ts)
646652
val failures = results.results.collect {
647653
case (_, TaskResult(res: Result.Failing[_], _)) => res
648654
}
@@ -768,6 +774,34 @@ private class MillBuildServer(
768774
override def onRunReadStdin(params: ReadParams): Unit = {
769775
debug("onRunReadStdin is current unsupported")
770776
}
777+
778+
private def evaluate(
779+
evaluator: Evaluator,
780+
goals: Agg[Task[_]],
781+
reporter: Int => Option[CompileProblemReporter] = _ => Option.empty[CompileProblemReporter],
782+
testReporter: TestReporter = DummyTestReporter,
783+
logger: ColorLogger = null
784+
): Evaluator.Results = {
785+
val logger0 = Option(logger).getOrElse(evaluator.baseLogger)
786+
mill.runner.MillMain.withOutLock(
787+
noBuildLock = false,
788+
noWaitForBuildLock = false,
789+
out = evaluator.outPath,
790+
targetsAndParams = goals.toSeq.map {
791+
case n: NamedTask[_] => n.label
792+
case t => t.toString
793+
},
794+
streams = logger0.systemStreams
795+
) {
796+
evaluator.evaluate(
797+
goals,
798+
reporter,
799+
testReporter,
800+
logger0,
801+
serialCommandExec = false
802+
)
803+
}
804+
}
771805
}
772806

773807
private object MillBuildServer {

0 commit comments

Comments
 (0)