diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-02 19:59:16 -0400 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-02 20:09:42 -0400 |
commit | 107f62303794fa14b05c211d52dddc1f50f14886 (patch) | |
tree | b691ca3ff428ff0d91b973c93aa590fc50431b72 | |
parent | ef08ce94aa537c50651f5c18b8cdf1d6313ff208 (diff) | |
download | cbt-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.java | 8 | ||||
-rw-r--r-- | stage1/Stage1.scala | 10 | ||||
-rw-r--r-- | stage1/Stage1Lib.scala | 2 | ||||
-rw-r--r-- | stage2/BasicBuild.scala | 8 | ||||
-rw-r--r-- | stage2/GitDependency.scala | 4 | ||||
-rw-r--r-- | stage2/Lib.scala | 2 | ||||
-rw-r--r-- | stage2/Stage2.scala | 2 | ||||
-rw-r--r-- | test/test.scala | 2 |
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"), |