diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-27 23:45:58 -0400 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-28 15:03:57 -0400 |
commit | 6e9faddfb0db0e7b78501cb61c46bb33887ccdcd (patch) | |
tree | 81b8224c3539f2db3796520547bce647004a11a2 /stage2/BasicBuild.scala | |
parent | 53247b5610b0168a3dd93d3d8f1224b78995ecde (diff) | |
download | cbt-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.scala | 48 |
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) |