aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-04-02 19:59:16 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2016-04-02 20:09:42 -0400
commit107f62303794fa14b05c211d52dddc1f50f14886 (patch)
treeb691ca3ff428ff0d91b973c93aa590fc50431b72
parentef08ce94aa537c50651f5c18b8cdf1d6313ff208 (diff)
downloadcbt-107f62303794fa14b05c211d52dddc1f50f14886.tar.gz
cbt-107f62303794fa14b05c211d52dddc1f50f14886.tar.bz2
cbt-107f62303794fa14b05c211d52dddc1f50f14886.zip
propagate info if cbt has changed across builds, so they can be re-compiled
-rw-r--r--nailgun_launcher/NailgunLauncher.java8
-rw-r--r--stage1/Stage1.scala10
-rw-r--r--stage1/Stage1Lib.scala2
-rw-r--r--stage2/BasicBuild.scala8
-rw-r--r--stage2/GitDependency.scala4
-rw-r--r--stage2/Lib.scala2
-rw-r--r--stage2/Stage2.scala2
-rw-r--r--test/test.scala2
8 files changed, 19 insertions, 19 deletions
diff --git a/nailgun_launcher/NailgunLauncher.java b/nailgun_launcher/NailgunLauncher.java
index de55821..c94a6d2 100644
--- a/nailgun_launcher/NailgunLauncher.java
+++ b/nailgun_launcher/NailgunLauncher.java
@@ -69,16 +69,16 @@ public class NailgunLauncher{
}
}
- Boolean stage1SourcesChanged = false;
+ Boolean changed = lastSuccessfullCompile == 0;
for( File file: stage1SourceFiles ){
if( file.lastModified() > lastSuccessfullCompile ){
- stage1SourcesChanged = true;
+ changed = true;
//System.err.println("File change: "+file.lastModified());
break;
}
}
- if(stage1SourcesChanged || stage1classLoader == null){
+ if(changed){
EarlyDependencies earlyDeps = new EarlyDependencies();
int exitCode = zinc(earlyDeps, stage1SourceFiles);
if( exitCode == 0 ){
@@ -103,7 +103,7 @@ public class NailgunLauncher{
(Integer) stage1classLoader
.loadClass("cbt.Stage1")
.getMethod("run", String[].class, ClassLoader.class, Boolean.class)
- .invoke( null, (Object) args, stage1classLoader, stage1SourcesChanged);
+ .invoke( null, (Object) args, stage1classLoader, changed);
System.exit(exitCode);
}catch(Exception e){
System.err.println(stage1classLoader);
diff --git a/stage1/Stage1.scala b/stage1/Stage1.scala
index e8245c4..368a459 100644
--- a/stage1/Stage1.scala
+++ b/stage1/Stage1.scala
@@ -50,7 +50,7 @@ object Stage1{
a.lastModified > b.lastModified
}
- def run(_args: Array[String], classLoader: ClassLoader, stage1SourcesChanged: java.lang.Boolean): Int = {
+ def run(_args: Array[String], classLoader: ClassLoader, _cbtChanged: java.lang.Boolean): Int = {
val args = Stage1ArgsParser(_args.toVector)
val logger = new Logger(args.enabledLoggers)
logger.stage1(s"Stage1 start")
@@ -68,11 +68,11 @@ object Stage1{
val classLoaderCache = new ClassLoaderCache(logger)
- val stage2SourcesChanged = lib.needsUpdate(sourceFiles, stage2StatusFile)
+ val cbtHasChanged = _cbtChanged || lib.needsUpdate(sourceFiles, stage2StatusFile)
logger.stage1("Compiling stage2 if necessary")
val scalaXml = JavaDependency("org.scala-lang.modules","scala-xml_"+constants.scalaMajorVersion,constants.scalaXmlVersion)
compile(
- stage2SourcesChanged,
+ cbtHasChanged,
sourceFiles, stage2Target, stage2StatusFile,
nailgunTarget +: stage1Target +: Dependencies(deps, scalaXml).classpath,
Seq("-deprecation"), classLoaderCache,
@@ -80,7 +80,7 @@ object Stage1{
)
logger.stage1(s"[$now] calling CbtDependency.classLoader")
- if(NailgunLauncher.stage2classLoader == null){
+ if(cbtHasChanged){
NailgunLauncher.stage2classLoader = CbtDependency().classLoader(classLoaderCache)
}
@@ -96,7 +96,7 @@ object Stage1{
new File( args.args(0) ),
args.args.drop(1).toVector,
// launcher changes cause entire nailgun restart, so no need for them here
- cbtHasChanged = stage1SourcesChanged || stage2SourcesChanged,
+ cbtHasChanged = cbtHasChanged,
logger
)
) match {
diff --git a/stage1/Stage1Lib.scala b/stage1/Stage1Lib.scala
index 105fe3e..39310b9 100644
--- a/stage1/Stage1Lib.scala
+++ b/stage1/Stage1Lib.scala
@@ -31,7 +31,7 @@ object CatchTrappedExitCode{
}
}
-case class Context( cwd: File, args: Seq[String], logger: Logger, classLoaderCache: ClassLoaderCache )
+case class Context( cwd: File, args: Seq[String], logger: Logger, cbtHasChanged: Boolean, classLoaderCache: ClassLoaderCache )
class BaseLib{
def realpath(name: File) = new File(Paths.get(name.getAbsolutePath).normalize.toString)
diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala
index 9ed8c26..eac78ea 100644
--- a/stage2/BasicBuild.scala
+++ b/stage2/BasicBuild.scala
@@ -16,6 +16,7 @@ class Build(val context: Context) extends Dependency with TriggerLoop{
// library available to builds
implicit final val logger: Logger = context.logger
implicit final val classLoaderCache: ClassLoaderCache = context.classLoaderCache
+ implicit final val _context = context
override final protected val lib: Lib = new Lib(logger)
// ========== general stuff ==========
@@ -125,12 +126,11 @@ class Build(val context: Context) extends Dependency with TriggerLoop{
def scalacOptions: Seq[String] = Seq( "-feature", "-deprecation", "-unchecked" )
private object needsUpdateCache extends Cache[Boolean]
- def needsUpdate: Boolean = {
- needsUpdateCache(
- lib.needsUpdate( sourceFiles, compileStatusFile )
+ def needsUpdate: Boolean = needsUpdateCache(
+ context.cbtHasChanged
+ || lib.needsUpdate( sourceFiles, compileStatusFile )
|| transitiveDependencies.exists(_.needsUpdate)
)
- }
private object compileCache extends Cache[Option[File]]
def compile: Option[File] = compileCache{
diff --git a/stage2/GitDependency.scala b/stage2/GitDependency.scala
index 59de98a..aeeeead 100644
--- a/stage2/GitDependency.scala
+++ b/stage2/GitDependency.scala
@@ -7,7 +7,7 @@ import org.eclipse.jgit.lib.Ref
case class GitDependency(
url: String, ref: String // example: git://github.com/cvogt/cbt.git#<some-hash>
-)(implicit val logger: Logger, classLoaderCache: ClassLoaderCache ) extends Dependency{
+)(implicit val logger: Logger, classLoaderCache: ClassLoaderCache, context: Context ) extends Dependency{
override def lib = new Lib(logger)
// TODO: add support for authentication via ssh and/or https
@@ -37,7 +37,7 @@ case class GitDependency(
}
val managedBuild = lib.loadDynamic(
- Context( cwd = checkoutDirectory, args = Seq(), logger, classLoaderCache )
+ context.copy( cwd = checkoutDirectory, args = Seq() )
)
Seq( managedBuild )
}
diff --git a/stage2/Lib.scala b/stage2/Lib.scala
index dd4a12f..aa731d8 100644
--- a/stage2/Lib.scala
+++ b/stage2/Lib.scala
@@ -145,7 +145,7 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{
(
(
if( thisTasks.nonEmpty ){
- s"""Methods provided by Build ${context}
+ s"""Methods provided by Build ${context.cwd}
${thisTasks.mkString(" ")}
diff --git a/stage2/Stage2.scala b/stage2/Stage2.scala
index e893a06..cecd59b 100644
--- a/stage2/Stage2.scala
+++ b/stage2/Stage2.scala
@@ -25,7 +25,7 @@ object Stage2 extends Stage2Base{
}
val task = args.args.lift( taskIndex )
- val context = Context( args.cwd, args.args.drop( taskIndex ), logger, /*args.cbtHasChanged,*/ new ClassLoaderCache(logger) )
+ val context = Context( args.cwd, args.args.drop( taskIndex ), logger, args.cbtHasChanged, new ClassLoaderCache(logger) )
val first = lib.loadRoot( context )
val build = first.finalBuild
diff --git a/test/test.scala b/test/test.scala
index 242b639..811e619 100644
--- a/test/test.scala
+++ b/test/test.scala
@@ -77,7 +77,7 @@ object Main{
compile("simple")
{
- val noContext = Context(cbtHome ++ "/test/nothing", Seq(), logger, new ClassLoaderCache(logger))
+ val noContext = Context(cbtHome ++ "/test/nothing", Seq(), logger, false, new ClassLoaderCache(logger))
val b = new Build(noContext){
override def dependencies = Seq(
JavaDependency("net.incongru.watchservice","barbary-watchservice","1.0"),