blob: 44db3ae3bcfe6b4f3b8c2c5bbc2722403698b65d (
plain) (
tree)
|
|
package cbt
import cbt.paths._
import java.io._
import scala.collection.immutable.Seq
object Stage2{
def main(args: Array[String]) = {
import java.time.LocalTime.now
val init = new Init(args)
import java.time._
val start = LocalTime.now()
def timeTaken = Duration.between(start, LocalTime.now()).toMillis
init.logger.stage2(s"[$now] Stage2 start")
import init._
val loop = argsV.lift(1) == Some("loop")
val direct = argsV.lift(1) == Some("direct")
val taskIndex = if(loop || direct) 2 else 1
val task = argsV.lift( taskIndex )
val lib = new Lib(new Init(args).logger)
val context = Context( cwd, argsV.drop( taskIndex + 1 ), logger )
val first = lib.loadRoot( context )
val build = first.finalBuild
val res = if( loop ){
// TODO: this should allow looping over task specific files, like test files as well
val triggerFiles = first.triggerLoopFiles.map(lib.realpath)
val triggerCbtFiles = Seq( nailgun, stage1, stage2 ).map(lib.realpath _)
val allTriggerFiles = triggerFiles ++ triggerCbtFiles
logger.loop("Looping change detection over:\n - "+allTriggerFiles.mkString("\n - "))
lib.watch(allTriggerFiles){
case file if triggerCbtFiles.exists(file.toString startsWith _.toString) =>
logger.loop("Change is in CBT' own source code.")
logger.loop("Restarting CBT.")
scala.util.control.Breaks.break
case file if triggerFiles.exists(file.toString startsWith _.toString) =>
new lib.ReflectBuild( lib.loadDynamic(context) ).callNullary(task)
}
} else new lib.ReflectBuild(build).callNullary(task)
init.logger.stage2(s"[$now] Stage2 end")
res
}
}
|