diff --git a/main/Structure.scala b/main/Structure.scala index 9f1d64e8e..424c667e1 100644 --- a/main/Structure.scala +++ b/main/Structure.scala @@ -207,8 +207,7 @@ object Scoped { val in = KCons(scopedTask(scope, key), KList.fromList(tasks)) Apply.tasks(in) { kl => - val KCons(h,t) = KList.kcons(kl) - h.dependsOn(t.toList :_*) + kl.head.dependsOn(kl.tail.toList :_*) } } } diff --git a/sbt/src/sbt-test/actions/depends-on/project/B.scala b/sbt/src/sbt-test/actions/depends-on/project/B.scala new file mode 100644 index 000000000..3c39aea06 --- /dev/null +++ b/sbt/src/sbt-test/actions/depends-on/project/B.scala @@ -0,0 +1,17 @@ +import sbt._ +import Keys._ + +// tests that errors are properly propagated for dependsOn, map, and flatMap +object B extends Build +{ + lazy val root = Project("root", file(".")) settings( + a <<= baseDirectory map (b => if( (b / "succeed").exists) () else error("fail")), + b <<= a.task(at => nop dependsOn(at) ), + c <<= a map { _ => () }, + d <<= a flatMap { _ => task { () } } + ) + lazy val a = TaskKey[Unit]("a") + lazy val b = TaskKey[Unit]("b") + lazy val c = TaskKey[Unit]("c") + lazy val d = TaskKey[Unit]("d") +} \ No newline at end of file diff --git a/sbt/src/sbt-test/actions/depends-on/test b/sbt/src/sbt-test/actions/depends-on/test new file mode 100644 index 000000000..1d0d7c9d0 --- /dev/null +++ b/sbt/src/sbt-test/actions/depends-on/test @@ -0,0 +1,8 @@ +-> a +-> b +-> c + +$ touch succeed +> a +> b +> c diff --git a/tasks/standard/System.scala b/tasks/standard/System.scala index c9bcbe346..bf71e3350 100644 --- a/tasks/standard/System.scala +++ b/tasks/standard/System.scala @@ -6,6 +6,7 @@ package std import Types._ import Task._ +import TaskExtra.allM import Execute._ object Transform @@ -46,7 +47,7 @@ object Transform case Pure(eval) => toNode(KNil)( _ => Right(eval()) ) case Mapped(in, f) => toNode(in)( right ∙ f ) case FlatMapped(in, f) => toNode(in)( left ∙ f ) - case DependsOn(in, deps) => toNode(KList.fromList(deps))( _ => Left(in) ) + case DependsOn(in, deps) => toNode(KList.fromList(deps))( ((_:Any) => Left(in)) ∙ allM ) case Join(in, f) => uniform(in)(f) } }