diff --git a/main/Defaults.scala b/main/Defaults.scala index 81f41c5bf..d7a2cb578 100644 --- a/main/Defaults.scala +++ b/main/Defaults.scala @@ -68,6 +68,7 @@ object Defaults extends BuildCommon scalaHome :== None, javaHome :== None, extraLoggers :== { _ => Nil }, + skip :== false, version :== "0.1", outputStrategy :== None, exportJars :== false, @@ -422,8 +423,8 @@ object Defaults extends BuildCommon def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) } def compileIncSetupTask = - (dependencyClasspath, cacheDirectory, definesClass) map { (cp, cacheDir, definesC) => - Compiler.IncSetup(analysisMap(cp), definesC, cacheDir / "compile") + (dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) => + Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile") } def compileInputsTask = (dependencyClasspath, sources, compilers, javacOptions, scalacOptions, classDirectory, compileOrder, compileIncSetup, streams) map { diff --git a/main/Keys.scala b/main/Keys.scala index b615e8b7e..1a569bbba 100644 --- a/main/Keys.scala +++ b/main/Keys.scala @@ -261,6 +261,7 @@ object Keys val sbtResolver = SettingKey[Resolver]("sbt-resolver", "Provides a resolver for obtaining sbt as a dependency.") val sbtDependency = SettingKey[ModuleID]("sbt-dependency", "Provides a definition for declaring the current version of sbt.") val sbtVersion = SettingKey[String]("sbt-version", "Provides the version of sbt. This setting should be not be modified.") + val skip = SettingKey[Boolean]("skip") // special val parallelExecution = SettingKey[Boolean]("parallel-execution", "Enables (true) or disables (false) parallel execution of tasks.") diff --git a/main/actions/AggressiveCompile.scala b/main/actions/AggressiveCompile.scala index 484ac503d..5494518ca 100644 --- a/main/actions/AggressiveCompile.scala +++ b/main/actions/AggressiveCompile.scala @@ -22,23 +22,27 @@ final class CompileConfiguration(val sources: Seq[File], val classpath: Seq[File class AggressiveCompile(cacheDirectory: File) { - def apply(compiler: AnalyzingCompiler, javac: JavaCompiler, sources: Seq[File], classpath: Seq[File], outputDirectory: File, options: Seq[String] = Nil, javacOptions: Seq[String] = Nil, analysisMap: Map[File, Analysis] = Map.empty, definesClass: DefinesClass = Locate.definesClass _, maxErrors: Int = 100, compileOrder: CompileOrder.Value = Mixed)(implicit log: Logger): Analysis = + def apply(compiler: AnalyzingCompiler, javac: JavaCompiler, sources: Seq[File], classpath: Seq[File], outputDirectory: File, options: Seq[String] = Nil, javacOptions: Seq[String] = Nil, analysisMap: Map[File, Analysis] = Map.empty, definesClass: DefinesClass = Locate.definesClass _, maxErrors: Int = 100, compileOrder: CompileOrder.Value = Mixed, skip: Boolean = false)(implicit log: Logger): Analysis = { val setup = new CompileSetup(outputDirectory, new CompileOptions(options, javacOptions), compiler.scalaInstance.actualVersion, compileOrder) - compile1(sources, classpath, setup, store, analysisMap, definesClass, compiler, javac, maxErrors) + compile1(sources, classpath, setup, store, analysisMap, definesClass, compiler, javac, maxErrors, skip) } def withBootclasspath(args: CompilerArguments, classpath: Seq[File]): Seq[File] = args.bootClasspath ++ args.finishClasspath(classpath) - def compile1(sources: Seq[File], classpath: Seq[File], setup: CompileSetup, store: AnalysisStore, analysis: Map[File, Analysis], definesClass: DefinesClass, compiler: AnalyzingCompiler, javac: JavaCompiler, maxErrors: Int)(implicit log: Logger): Analysis = + def compile1(sources: Seq[File], classpath: Seq[File], setup: CompileSetup, store: AnalysisStore, analysis: Map[File, Analysis], definesClass: DefinesClass, compiler: AnalyzingCompiler, javac: JavaCompiler, maxErrors: Int, skip: Boolean)(implicit log: Logger): Analysis = { val (previousAnalysis, previousSetup) = extract(store.get()) - val config = new CompileConfiguration(sources, classpath, previousAnalysis, previousSetup, setup, analysis.get _, definesClass, maxErrors, compiler, javac) - val (modified, result) = compile2(config) - if(modified) - store.set(result, setup) - result + if(skip) + previousAnalysis + else { + val config = new CompileConfiguration(sources, classpath, previousAnalysis, previousSetup, setup, analysis.get _, definesClass, maxErrors, compiler, javac) + val (modified, result) = compile2(config) + if(modified) + store.set(result, setup) + result + } } def compile2(config: CompileConfiguration)(implicit log: Logger, equiv: Equiv[CompileSetup]): (Boolean, Analysis) = { diff --git a/main/actions/Compiler.scala b/main/actions/Compiler.scala index 64fe28948..47655d79b 100644 --- a/main/actions/Compiler.scala +++ b/main/actions/Compiler.scala @@ -25,7 +25,7 @@ object Compiler final case class Inputs(compilers: Compilers, config: Options, incSetup: IncSetup) final case class Options(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value) - final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, cacheDirectory: File) + final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, skip: Boolean, cacheDirectory: File) final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler) def inputs(classpath: Seq[File], sources: Seq[File], outputDirectory: File, options: Seq[String], javacOptions: Seq[String], definesClass: DefinesClass, maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, log: Logger): Inputs = @@ -34,7 +34,7 @@ object Compiler val classesDirectory = outputDirectory / "classes" val cacheDirectory = outputDirectory / "cache" val augClasspath = classesDirectory.asFile +: classpath - val incSetup = IncSetup(Map.empty, definesClass, cacheDirectory) + val incSetup = IncSetup(Map.empty, definesClass, false, cacheDirectory) inputs(augClasspath, sources, classesDirectory, options, javacOptions, maxErrors, order)(compilers, incSetup, log) } def inputs(classpath: Seq[File], sources: Seq[File], classesDirectory: File, options: Seq[String], javacOptions: Seq[String], maxErrors: Int, order: CompileOrder.Value)(implicit compilers: Compilers, incSetup: IncSetup, log: Logger): Inputs = @@ -104,7 +104,7 @@ object Compiler import in.incSetup._ val agg = new AggressiveCompile(cacheDirectory) - agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order)(log) + agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order, skip)(log) } }