summaryrefslogtreecommitdiff
path: root/core/src/main/scala/mill/eval/Evaluator.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-12-29 22:47:15 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-12-29 22:47:15 -0800
commit3ce3d6214b1c52c692926ab373412b71fe097c21 (patch)
treeb8aee0d02ea98833ff5062c564632911cd464911 /core/src/main/scala/mill/eval/Evaluator.scala
parent81d4cfb6f63512b314fbbf49c4ba415aedc469d7 (diff)
downloadmill-3ce3d6214b1c52c692926ab373412b71fe097c21.tar.gz
mill-3ce3d6214b1c52c692926ab373412b71fe097c21.tar.bz2
mill-3ce3d6214b1c52c692926ab373412b71fe097c21.zip
Assign different overrides of a Target different cache directories and paths, to fix https://github.com/lihaoyi/mill/issues/86
Diffstat (limited to 'core/src/main/scala/mill/eval/Evaluator.scala')
-rw-r--r--core/src/main/scala/mill/eval/Evaluator.scala31
1 files changed, 19 insertions, 12 deletions
diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala
index 110747a1..ed8145b2 100644
--- a/core/src/main/scala/mill/eval/Evaluator.scala
+++ b/core/src/main/scala/mill/eval/Evaluator.scala
@@ -11,9 +11,13 @@ import mill.util
import mill.util._
import scala.collection.mutable
-case class Labelled[T](target: Task[T],
- format: Option[upickle.default.ReadWriter[T]],
- segments: Seq[Segment])
+case class Labelled[T](target: NamedTask[T],
+ segments: Seq[Segment]){
+ def format = target match{
+ case t: Target[Any] => Some(t.readWrite.asInstanceOf[upickle.default.ReadWriter[Any]])
+ case _ => None
+ }
+}
class Evaluator[T](val workspacePath: Path,
val mapping: Discovered.Mapping[T],
log: Logger,
@@ -29,15 +33,18 @@ class Evaluator[T](val workspacePath: Path,
val transitive = Graph.transitiveTargets(goals)
val topoSorted = Graph.topoSorted(transitive)
val sortedGroups = Graph.groupAroundImportantTargets(topoSorted){
- case t: NamedTask[Any] if mapping.modules.contains(t.owner) =>
- Right(Labelled(
- t,
- t match{
- case t: Target[Any] => Some(t.readWrite.asInstanceOf[upickle.default.ReadWriter[Any]])
- case _ => None
- },
- mapping.modules(t.owner) :+ Segment.Label(t.name)
- ))
+ case t: NamedTask[Any] if mapping.modules.contains(t.owner) =>
+ val segments = mapping.modules(t.owner) :+ Segment.Label(t.name)
+ val finalTaskOverrides = t match{
+ case t: Target[_] => mapping.segmentsToTargets(segments).overrides
+ case c: mill.define.Command[_] => mapping.segmentsToCommands(segments).overrides
+ }
+ val delta = finalTaskOverrides - t.overrides
+ val additional =
+ if (delta == 0) Seq(segments.last)
+ else Seq(Segment.Label(segments.last.asInstanceOf[Segment.Label].value + "-override-" + delta))
+
+ Right(Labelled(t, segments.init ++ additional))
case t if goals.contains(t) => Left(t)
}