diff --git a/compile/inc/Compile.scala b/compile/inc/Compile.scala index 42f3239e9..830d0c823 100644 --- a/compile/inc/Compile.scala +++ b/compile/inc/Compile.scala @@ -9,7 +9,7 @@ import java.io.File object IncrementalCompile { - def apply(sources: Set[File], entry: String => Option[File], compile: (Set[File], xsbti.AnalysisCallback) => Unit, previous: Analysis, forEntry: File => Option[Analysis], outputPath: File): Analysis = + def apply(sources: Set[File], entry: String => Option[File], compile: (Set[File], xsbti.AnalysisCallback) => Unit, previous: Analysis, forEntry: File => Option[Analysis], outputPath: File): (Boolean, Analysis) = { val current = Stamps.initial(Stamp.exists, Stamp.hash, Stamp.lastModified) val internalMap = (f: File) => previous.relations.produced(f).headOption diff --git a/compile/inc/Incremental.scala b/compile/inc/Incremental.scala index ee377375b..33fb0ebe9 100644 --- a/compile/inc/Incremental.scala +++ b/compile/inc/Incremental.scala @@ -12,12 +12,13 @@ import java.io.File object Incremental { def println(s: String) = if(java.lang.Boolean.getBoolean("xsbt.inc.debug")) System.out.println(s) else () - def compile(sources: Set[File], entry: String => Option[File], previous: Analysis, current: ReadStamps, forEntry: File => Option[Analysis], doCompile: Set[File] => Analysis)(implicit equivS: Equiv[Stamp]): Analysis = + def compile(sources: Set[File], entry: String => Option[File], previous: Analysis, current: ReadStamps, forEntry: File => Option[Analysis], doCompile: Set[File] => Analysis)(implicit equivS: Equiv[Stamp]): (Boolean, Analysis) = { val initialChanges = changedInitial(entry, sources, previous, current, forEntry) val initialInv = invalidateInitial(previous.relations, initialChanges) println("Initially invalidated: " + initialInv) - cycle(initialInv, previous, doCompile) + val analysis = cycle(initialInv, previous, doCompile) + (!initialInv.isEmpty, analysis) } // TODO: the Analysis for the last successful compilation should get returned + Boolean indicating success diff --git a/main/build/AggressiveCompile.scala b/main/build/AggressiveCompile.scala index c5a872f91..becfdbf6e 100644 --- a/main/build/AggressiveCompile.scala +++ b/main/build/AggressiveCompile.scala @@ -34,11 +34,12 @@ class AggressiveCompile(cacheDirectory: File) { val (previousAnalysis, previousSetup) = extract(store.get()) val config = new CompileConfiguration(sources, classpath, javaSrcBases, previousAnalysis, previousSetup, setup, analysis.get _, maxErrors, compiler, javac) - val result = compile2(config) - store.set(result, setup) + val (modified, result) = compile2(config) + if(modified) + store.set(result, setup) result } - def compile2(config: CompileConfiguration)(implicit log: Logger, equiv: Equiv[CompileSetup]): Analysis = + def compile2(config: CompileConfiguration)(implicit log: Logger, equiv: Equiv[CompileSetup]): (Boolean, Analysis) = { import config._ import currentSetup._