aboutsummaryrefslogtreecommitdiff
path: root/stage2/BasicBuild.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-04-27 23:45:58 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2016-04-28 15:03:57 -0400
commit6e9faddfb0db0e7b78501cb61c46bb33887ccdcd (patch)
tree81b8224c3539f2db3796520547bce647004a11a2 /stage2/BasicBuild.scala
parent53247b5610b0168a3dd93d3d8f1224b78995ecde (diff)
downloadcbt-6e9faddfb0db0e7b78501cb61c46bb33887ccdcd.tar.gz
cbt-6e9faddfb0db0e7b78501cb61c46bb33887ccdcd.tar.bz2
cbt-6e9faddfb0db0e7b78501cb61c46bb33887ccdcd.zip
Support recursively running tasks across all builds in transitive dependencies
Diffstat (limited to 'stage2/BasicBuild.scala')
-rw-r--r--stage2/BasicBuild.scala48
1 files changed, 48 insertions, 0 deletions
diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala
index 757e347..fb5e652 100644
--- a/stage2/BasicBuild.scala
+++ b/stage2/BasicBuild.scala
@@ -143,6 +143,54 @@ class BasicBuild(val context: Context) extends DependencyImplementation with Bui
lib.test(context)
}
+ def recursiveSafe(_run: BuildInterface => Any): ExitCode = {
+ val builds = (this +: transitiveDependencies).collect{
+ case b: BuildInterface => b
+ }
+ val results = builds.map(_run)
+ if(
+ results.forall{
+ case Some(_:ExitCode) => true
+ case None => true
+ case _:ExitCode => true
+ case other => false
+ }
+ ){
+ if(
+ results.collect{
+ case Some(c:ExitCode) => c
+ case c:ExitCode => c
+ }.filter(_ != 0)
+ .nonEmpty
+ ) ExitCode.Failure
+ else ExitCode.Success
+ } else ExitCode.Success
+ }
+
+ def recursive: ExitCode = {
+ recursiveUnsafe(context.args.lift(1))
+ }
+
+ def recursiveUnsafe(taskName: Option[String]): ExitCode = {
+ recursiveSafe{
+ b =>
+ System.err.println(b.show)
+ lib.trapExitCode{ // FIXME: trapExitCode does not seem to work here
+ try{
+ new lib.ReflectBuild(b).callNullary(taskName)
+ ExitCode.Success
+ } catch {
+ case e: Throwable => println(e.getClass); throw e
+ }
+ }
+ ExitCode.Success
+ }
+ }
+
+ def c = compile
+ def t = test
+ def rt = recursiveUnsafe(Some("test"))
+
/*
context.logger.composition(">"*80)
context.logger.composition("class " ++ this.getClass.toString)