summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-12-28 09:50:31 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-12-28 09:50:31 -0800
commit8b39024ef427f670d42ca8ab57e618622a0fee54 (patch)
tree92b0fe18a4949ff6756e28d957be7c48e8bb00c1 /core/src
parent02522c54bc94bb3799256173394d8af0821864a9 (diff)
downloadmill-8b39024ef427f670d42ca8ab57e618622a0fee54.tar.gz
mill-8b39024ef427f670d42ca8ab57e618622a0fee54.tar.bz2
mill-8b39024ef427f670d42ca8ab57e618622a0fee54.zip
Properly propagate failures in task evaluation to the ammonite script runner
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/scala/mill/main/MainRunner.scala7
-rw-r--r--core/src/main/scala/mill/main/RunScript.scala21
2 files changed, 15 insertions, 13 deletions
diff --git a/core/src/main/scala/mill/main/MainRunner.scala b/core/src/main/scala/mill/main/MainRunner.scala
index fb0f3d7c..28d0a284 100644
--- a/core/src/main/scala/mill/main/MainRunner.scala
+++ b/core/src/main/scala/mill/main/MainRunner.scala
@@ -24,13 +24,14 @@ class MainRunner(config: ammonite.main.Cli.Config)
mainCfg.instantiateInterpreter() match{
case Left(problems) => problems
case Right(interp) =>
+ val interpWatched = interp.watchedFiles
+
val result = RunScript.runScript(
mainCfg.wd, scriptPath, interp, scriptArgs, lastEvaluator
)
-
- val interpWatched = interp.watchedFiles
result match{
- case Res.Success((eval, evaluationWatches, success)) =>
+ case Res.Success(data) =>
+ val (eval, evaluationWatches) = data
lastEvaluator = Some((interpWatched, eval))
(result, interpWatched ++ evaluationWatches)
case _ =>
diff --git a/core/src/main/scala/mill/main/RunScript.scala b/core/src/main/scala/mill/main/RunScript.scala
index f4ad375b..ad6ad327 100644
--- a/core/src/main/scala/mill/main/RunScript.scala
+++ b/core/src/main/scala/mill/main/RunScript.scala
@@ -26,7 +26,7 @@ object RunScript{
interp: ammonite.interp.Interpreter,
scriptArgs: Seq[String],
lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[_])])
- : Res[(Evaluator[_], Seq[(Path, Long)], Boolean)] = {
+ : Res[(Evaluator[_], Seq[(Path, Long)])] = {
val log = new PrintLogger(true)
for{
@@ -40,19 +40,19 @@ object RunScript{
for(mapping <- evaluateMapping(wd, path, interp))
yield new Evaluator(pwd / 'out, mapping, log)
}
- } yield {
- val evaluationWatches = mutable.Buffer.empty[(Path, Long)]
- val res = evaluateTarget(
+ evaluationWatches = mutable.Buffer.empty[(Path, Long)]
+ _ <- Res(evaluateTarget(
evaluator,
scriptArgs,
p => evaluationWatches.append((p, Interpreter.pathSignature(p)))
- )
- (evaluator, evaluationWatches, res.isRight)
- }
+ ))
+ } yield (evaluator, evaluationWatches)
}
+
def watchedSigUnchanged(sig: Seq[(Path, Long)]) = {
sig.forall{case (p, l) => Interpreter.pathSignature(p) == l}
}
+
def evaluateMapping(wd: Path,
path: Path,
interp: ammonite.interp.Interpreter): Res[Discovered.Mapping[_]] = {
@@ -60,9 +60,10 @@ object RunScript{
val (pkg, wrapper) = Util.pathToPackageWrapper(Seq(), path relativeTo wd)
for {
- scriptTxt <- try Res.Success(Util.normalizeNewlines(read(path))) catch {
- case e: NoSuchFileException => Res.Failure("Script file not found: " + path)
- }
+ scriptTxt <-
+ try Res.Success(Util.normalizeNewlines(read(path)))
+ catch { case e: NoSuchFileException => Res.Failure("Script file not found: " + path) }
+
processed <- interp.processModule(
scriptTxt,
CodeSource(wrapper, pkg, Seq(Name("ammonite"), Name("$file")), Some(path)),