diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-04 14:35:35 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-04 15:00:58 -0800 |
commit | 7022254ac1b156a466baa45afea1bb723bd59929 (patch) | |
tree | 8bf0fa5bd42765d54ef0d4a9d915550f7586de2b /core/src/mill/eval/Evaluator.scala | |
parent | f47697c1da18407374cf11372af36c4960d80576 (diff) | |
download | mill-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.scala | 24 |
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} } |