aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Christopher Vogt <oss.nsp@cvogt.org>2017-02-22 18:12:35 +0800
committerGitHub <noreply@github.com>2017-02-22 18:12:35 +0800
commitb89d3fd4b14d957f1529a26819ddc009c2a3de20 (patch)
tree230459783ea782c9230f72ae0d4c4369179f12b9
parentef5d85fa69c300d67ab548c0957990748c22b458 (diff)
parent0972023722e8f6a59002d2d78defb7c5dec0240f (diff)
downloadcbt-b89d3fd4b14d957f1529a26819ddc009c2a3de20.tar.gz
cbt-b89d3fd4b14d957f1529a26819ddc009c2a3de20.tar.bz2
cbt-b89d3fd4b14d957f1529a26819ddc009c2a3de20.zip
Merge pull request #356 from cvogt/discover-subbuilds
treat subdirectores as subbuilds via cmd line
-rw-r--r--plugins/essentials/CommandLineOverrides.scala6
-rw-r--r--stage2/BasicBuild.scala5
-rw-r--r--stage2/Lib.scala25
-rw-r--r--stage2/Stage2.scala4
-rw-r--r--stage2/ToolsStage2.scala2
5 files changed, 29 insertions, 13 deletions
diff --git a/plugins/essentials/CommandLineOverrides.scala b/plugins/essentials/CommandLineOverrides.scala
index ce68aa9..3ffaf21 100644
--- a/plugins/essentials/CommandLineOverrides.scala
+++ b/plugins/essentials/CommandLineOverrides.scala
@@ -9,7 +9,8 @@ trait CommandLineOverrides extends DynamicOverrides{
)( s"""
${context.args.lift(0).getOrElse("")}
""" ),
- context.args.lift(1) orElse Some("void")
+ context.args.lift(1) orElse Some("void"),
+ context
)
}
def eval = {
@@ -19,7 +20,8 @@ trait CommandLineOverrides extends DynamicOverrides{
args = ( context.args.lift(0).map("println{ "+_+" }") ).toSeq
)
){""},
- Some("with")
+ Some("with"),
+ context
)
}
}
diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala
index cf0d027..8d72f9a 100644
--- a/stage2/BasicBuild.scala
+++ b/stage2/BasicBuild.scala
@@ -191,7 +191,8 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with Trigge
def test: Any =
lib.callReflective(
DirectoryDependency(projectDirectory++"/test").dependency,
- Some("run")
+ Some("run"),
+ context
)
def t = test
@@ -231,7 +232,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with Trigge
System.err.println(b.show)
lib.trapExitCode{ // FIXME: trapExitCode does not seem to work here
try{
- lib.callReflective(b,code)
+ lib.callReflective(b,code,context)
ExitCode.Success
} catch {
case e: Throwable => println(e.getClass); throw e
diff --git a/stage2/Lib.scala b/stage2/Lib.scala
index 51e7cff..b6187ce 100644
--- a/stage2/Lib.scala
+++ b/stage2/Lib.scala
@@ -154,8 +154,8 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){
) ++ "\n"
}
- def callReflective[T <: AnyRef]( obj: T, code: Option[String] ): ExitCode = {
- callInternal( obj, code.toSeq.flatMap(_.split("\\.").map( NameTransformer.encode )), Nil ) match {
+ def callReflective[T <: AnyRef]( obj: T, code: Option[String], context: Context ): ExitCode = {
+ callInternal( obj, code.toSeq.flatMap(_.split("\\.").map( NameTransformer.encode )), Nil, context ) match {
case (obj, code, None) =>
val s = render(obj)
if(s.nonEmpty)
@@ -182,7 +182,7 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){
}
}
- private def callInternal[T <: AnyRef]( obj: T, members: Seq[String], previous: Seq[String] ): (Option[Object], Option[ExitCode], Option[String]) = {
+ private def callInternal[T <: AnyRef]( obj: T, members: Seq[String], previous: Seq[String], context: Context ): (Option[Object], Option[ExitCode], Option[String]) = {
members.headOption.map{ taskName =>
logger.lib("Calling task " ++ taskName.toString)
taskMethods(obj.getClass).get(taskName).map{ method =>
@@ -192,12 +192,25 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){
// FIXME: ExitCode needs to be part of the compatibility interfaces
(None, Some(ExitCode(Stage0Lib.get(code,"integer").asInstanceOf[Int])), None)
case Seq(bs @ _*) if bs.forall(_.isInstanceOf[BaseBuild]) =>
- bs.map( b => callInternal(b.asInstanceOf[BaseBuild], members.tail, previous :+ taskName) ).head
- case _ => callInternal(result, members.tail, previous :+ taskName)
+ bs.map( b => callInternal(b.asInstanceOf[BaseBuild], members.tail, previous :+ taskName, context) ).head
+ case _ => callInternal(result, members.tail, previous :+ taskName, context)
}
}.getOrElse( (None, None, None) )
}.getOrElse{
- ( Some(obj), None, Some("\nMethod not found: " ++ (previous :+ taskName).mkString(".") ++ "\n") )
+ val folder = NameTransformer.decode(taskName)
+ if( context != null && (context.workingDirectory / folder).exists ){
+ val newContext = context.copy( workingDirectory = context.workingDirectory / folder )
+ callInternal(
+ lib.loadRoot(
+ newContext
+ ).finalBuild,
+ members.tail,
+ previous,
+ newContext
+ )
+ } else {
+ ( Some(obj), None, Some("\nMethod not found: " ++ (previous :+ taskName).mkString(".") ++ "\n") )
+ }
}
}.getOrElse{
( Some(obj), None, None )
diff --git a/stage2/Stage2.scala b/stage2/Stage2.scala
index 7ac7a2a..d43c4f6 100644
--- a/stage2/Stage2.scala
+++ b/stage2/Stage2.scala
@@ -59,11 +59,11 @@ object Stage2 extends Stage2Base{
case file if triggerFiles.exists(file.toString startsWith _.toString) =>
val build = lib.loadRoot(context).finalBuild( context.cwd )
logger.loop(s"Re-running $task for " ++ build.show)
- lib.callReflective(build, task)
+ lib.callReflective(build, task, context)
}
ExitCode.Success
} else {
- val code = lib.callReflective(build, task)
+ val code = lib.callReflective(build, task, context)
logger.stage2(s"Stage2 end")
code
}
diff --git a/stage2/ToolsStage2.scala b/stage2/ToolsStage2.scala
index c71f2b7..ba7a27f 100644
--- a/stage2/ToolsStage2.scala
+++ b/stage2/ToolsStage2.scala
@@ -5,6 +5,6 @@ object ToolsStage2 extends Stage2Base{
val args = _args.args.dropWhile(Seq("tools","direct") contains _)
val lib = new Lib(_args.logger)
val toolsTasks = new ToolsTasks(lib, args, _args.cwd, _args.cache, _args.cbtHome, _args.stage2LastModified)(_args.classLoaderCache)
- lib.callReflective(toolsTasks, args.lift(0))
+ lib.callReflective(toolsTasks, args.lift(0), null)
}
}