summaryrefslogtreecommitdiff
path: root/core/src/mill/eval/Evaluator.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-04 14:35:35 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-04 15:00:58 -0800
commit7022254ac1b156a466baa45afea1bb723bd59929 (patch)
tree8bf0fa5bd42765d54ef0d4a9d915550f7586de2b /core/src/mill/eval/Evaluator.scala
parentf47697c1da18407374cf11372af36c4960d80576 (diff)
downloadmill-7022254ac1b156a466baa45afea1bb723bd59929.tar.gz
mill-7022254ac1b156a466baa45afea1bb723bd59929.tar.bz2
mill-7022254ac1b156a466baa45afea1bb723bd59929.zip
allow Result.Failure to take a value
Diffstat (limited to 'core/src/mill/eval/Evaluator.scala')
-rw-r--r--core/src/mill/eval/Evaluator.scala24
1 files changed, 21 insertions, 3 deletions
diff --git a/core/src/mill/eval/Evaluator.scala b/core/src/mill/eval/Evaluator.scala
index 3d6d253b..4afbe233 100644
--- a/core/src/mill/eval/Evaluator.scala
+++ b/core/src/mill/eval/Evaluator.scala
@@ -93,9 +93,12 @@ class Evaluator[T](val outPath: Path,
}
- val failing = new util.MultiBiMap.Mutable[Either[Task[_], Labelled[_]], Result.Failing]
+ val failing = new util.MultiBiMap.Mutable[Either[Task[_], Labelled[_]], Result.Failing[_]]
for((k, vs) <- sortedGroups.items()){
- failing.addAll(k, vs.items.flatMap(results.get).collect{case f: Result.Failing => f})
+ failing.addAll(
+ k,
+ vs.items.flatMap(results.get).collect{case f: Result.Failing[_] => f.map(_._1)}
+ )
}
Evaluator.Results(
goals.indexed.map(results(_).map(_._1)),
@@ -177,6 +180,21 @@ class Evaluator[T](val outPath: Path,
)
newResults(labelledNamedTask.task) match{
+ case Result.Failure(_, Some((v, hashCode))) =>
+ labelledNamedTask.task.asWorker match{
+ case Some(w) =>
+ workerCache(w.ctx.segments) = (inputsHash, v)
+ case None =>
+ val terminalResult = labelledNamedTask
+ .writer
+ .asInstanceOf[Option[upickle.default.Writer[Any]]]
+ .map(_.write(v))
+
+ for(t <- terminalResult){
+ write.over(paths.meta, upickle.default.write(inputsHash -> t, indent = 4))
+ }
+ }
+
case Result.Success((v, hashCode)) =>
labelledNamedTask.task.asWorker match{
case Some(w) =>
@@ -335,7 +353,7 @@ object Evaluator{
case class Results(rawValues: Seq[Result[Any]],
evaluated: Agg[Task[_]],
transitive: Agg[Task[_]],
- failing: MultiBiMap[Either[Task[_], Labelled[_]], Result.Failing],
+ failing: MultiBiMap[Either[Task[_], Labelled[_]], Result.Failing[_]],
results: collection.Map[Task[_], Result[Any]]){
def values = rawValues.collect{case Result.Success(v) => v}
}