diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-12-25 18:42:35 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-12-25 18:42:35 -0800 |
commit | efc073009550976814b750aa5436b1cda1d8ef5b (patch) | |
tree | 08fb55d1ab3f1728dc9d78441cc164f8050d4934 /core/src/main/scala/mill/eval/Evaluator.scala | |
parent | a75ce74b632d5f5f570220a9b10d32587dd90b58 (diff) | |
download | mill-efc073009550976814b750aa5436b1cda1d8ef5b.tar.gz mill-efc073009550976814b750aa5436b1cda1d8ef5b.tar.bz2 mill-efc073009550976814b750aa5436b1cda1d8ef5b.zip |
WIP: provide Mapping as a Ctx argument that can be accessed from within Tasks, for usage within `GenIdea` and similar
Diffstat (limited to 'core/src/main/scala/mill/eval/Evaluator.scala')
-rw-r--r-- | core/src/main/scala/mill/eval/Evaluator.scala | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala index 4f0ace0c..5ca89793 100644 --- a/core/src/main/scala/mill/eval/Evaluator.scala +++ b/core/src/main/scala/mill/eval/Evaluator.scala @@ -13,10 +13,12 @@ import mill.util._ import scala.collection.mutable -class Evaluator(workspacePath: Path, - labeling: Map[Target[_], LabelledTarget[_]], - log: Logger, - val classLoaderSig: Seq[(Path, Long)] = Evaluator.classLoaderSig){ +class Evaluator[T](workspacePath: Path, + val mapping: Discovered.Mapping[T], + log: Logger, + val classLoaderSig: Seq[(Path, Long)] = Evaluator.classLoaderSig){ + + val labeling = mapping.value val workerCache = mutable.Map.empty[Ctx.Loader[_], Any] def evaluate(goals: OSet[Task[_]]): Evaluator.Results = { @@ -48,15 +50,7 @@ class Evaluator(workspacePath: Path, Evaluator.Results(goals.indexed.map(results), evaluated, transitive, failing) } - def resolveDestPaths(t: LabelledTarget[_]): (Path, Path) = { - val segmentStrings = t.segments.flatMap{ - case Mirror.Segment.Label(s) => Seq(s) - case Mirror.Segment.Cross(values) => values.map(_.toString) - } - val targetDestPath = workspacePath / segmentStrings - val metadataPath = targetDestPath / up / (targetDestPath.last + ".mill.json") - (targetDestPath, metadataPath) - } + def evaluateGroupCached(terminal: Either[Task[_], LabelledTarget[_]], group: OSet[Task[_]], @@ -74,7 +68,7 @@ class Evaluator(workspacePath: Path, case Left(task) => evaluateGroup(group, results, targetDestPath = None, maybeTargetLabel = None) case Right(labelledTarget) => - val (destPath, metadataPath) = resolveDestPaths(labelledTarget) + val (destPath, metadataPath) = Evaluator.resolveDestPaths(workspacePath, labelledTarget) val cached = for{ json <- scala.util.Try(upickle.json.read(read(metadataPath))).toOption (cachedHash, terminalResult) <- scala.util.Try(upickle.default.readJs[(Int, upickle.Js.Value)](json)).toOption @@ -168,7 +162,8 @@ class Evaluator(workspacePath: Path, def load[T](x: Ctx.Loader[T]): T = { workerCache.getOrElseUpdate(x, x.make()).asInstanceOf[T] } - } + }, + mapping ) val out = System.out @@ -211,6 +206,16 @@ class Evaluator(workspacePath: Path, object Evaluator{ + def resolveDestPaths(workspacePath: Path, t: LabelledTarget[_]): (Path, Path) = { + val segmentStrings = t.segments.flatMap{ + case Mirror.Segment.Label(s) => Seq(s) + case Mirror.Segment.Cross(values) => values.map(_.toString) + } + val targetDestPath = workspacePath / segmentStrings + val metadataPath = targetDestPath / up / (targetDestPath.last + ".mill.json") + (targetDestPath, metadataPath) + } + // check if the build itself has changed def classLoaderSig = Thread.currentThread().getContextClassLoader match { case scl: SpecialClassLoader => scl.classpathSignature |