mirror of https://github.com/sbt/sbt.git
cleanup cache-related code, aiming for unknown cause of #292
This commit is contained in:
parent
a0300cd3b3
commit
d146c7f84c
|
|
@ -31,6 +31,8 @@ package sbt
|
||||||
|
|
||||||
object Defaults extends BuildCommon
|
object Defaults extends BuildCommon
|
||||||
{
|
{
|
||||||
|
final val CacheDirectoryName = "cache"
|
||||||
|
|
||||||
def configSrcSub(key: SettingKey[File]): Initialize[File] = (key in ThisScope.copy(config = Global), configuration) { (src, conf) => src / nameForSrc(conf.name) }
|
def configSrcSub(key: SettingKey[File]): Initialize[File] = (key in ThisScope.copy(config = Global), configuration) { (src, conf) => src / nameForSrc(conf.name) }
|
||||||
def nameForSrc(config: String) = if(config == "compile") "main" else config
|
def nameForSrc(config: String) = if(config == "compile") "main" else config
|
||||||
def prefix(config: String) = if(config == "compile") "" else config + "-"
|
def prefix(config: String) = if(config == "compile") "" else config + "-"
|
||||||
|
|
@ -131,7 +133,7 @@ object Defaults extends BuildCommon
|
||||||
sourceDirectory <<= baseDirectory / "src",
|
sourceDirectory <<= baseDirectory / "src",
|
||||||
sourceManaged <<= crossTarget / "src_managed",
|
sourceManaged <<= crossTarget / "src_managed",
|
||||||
resourceManaged <<= crossTarget / "resource_managed",
|
resourceManaged <<= crossTarget / "resource_managed",
|
||||||
cacheDirectory <<= (target, thisProject)(_ / "cache" / _.id)
|
cacheDirectory <<= (crossTarget, thisProject)(_ / CacheDirectoryName / _.id / "global")
|
||||||
)
|
)
|
||||||
|
|
||||||
lazy val configPaths = sourceConfigPaths ++ resourceConfigPaths ++ outputConfigPaths
|
lazy val configPaths = sourceConfigPaths ++ resourceConfigPaths ++ outputConfigPaths
|
||||||
|
|
@ -168,7 +170,7 @@ object Defaults extends BuildCommon
|
||||||
resources <<= Classpaths.concat(managedResources, unmanagedResources)
|
resources <<= Classpaths.concat(managedResources, unmanagedResources)
|
||||||
)
|
)
|
||||||
lazy val outputConfigPaths = Seq(
|
lazy val outputConfigPaths = Seq(
|
||||||
cacheDirectory <<= (cacheDirectory, configuration) { _ / _.name },
|
cacheDirectory <<= (crossTarget, thisProject, configuration) { _ / CacheDirectoryName / _.id / _.name },
|
||||||
classDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "classes") },
|
classDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "classes") },
|
||||||
docDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "api") }
|
docDirectory <<= (crossTarget, configuration) { (outDir, conf) => outDir / (prefix(conf.name) + "api") }
|
||||||
)
|
)
|
||||||
|
|
@ -189,8 +191,7 @@ object Defaults extends BuildCommon
|
||||||
scalaVersion in GlobalScope <<= appConfiguration( _.provider.scalaProvider.version),
|
scalaVersion in GlobalScope <<= appConfiguration( _.provider.scalaProvider.version),
|
||||||
scalaBinaryVersion <<= scalaVersion(v => binaryVersion(v, "2.10")),
|
scalaBinaryVersion <<= scalaVersion(v => binaryVersion(v, "2.10")),
|
||||||
crossScalaVersions in GlobalScope <<= Seq(scalaVersion).join,
|
crossScalaVersions in GlobalScope <<= Seq(scalaVersion).join,
|
||||||
crossTarget <<= (target, scalaBinaryVersion, sbtBinaryVersion, sbtPlugin, crossPaths)(makeCrossTarget),
|
crossTarget <<= (target, scalaBinaryVersion, sbtBinaryVersion, sbtPlugin, crossPaths)(makeCrossTarget)
|
||||||
cacheDirectory <<= (crossTarget, thisProject)(_ / "cache" / _.id)
|
|
||||||
)
|
)
|
||||||
def makeCrossTarget(t: File, sv: String, sbtv: String, plugin: Boolean, cross: Boolean): File =
|
def makeCrossTarget(t: File, sv: String, sbtv: String, plugin: Boolean, cross: Boolean): File =
|
||||||
{
|
{
|
||||||
|
|
@ -396,6 +397,10 @@ object Defaults extends BuildCommon
|
||||||
else
|
else
|
||||||
base.configurations
|
base.configurations
|
||||||
def pairID[A,B] = (a: A, b: B) => (a,b)
|
def pairID[A,B] = (a: A, b: B) => (a,b)
|
||||||
|
|
||||||
|
def perTaskCache(key: TaskKey[_]): Setting[File] =
|
||||||
|
cacheDirectory ~= { _ / ("for_" + key.key.label) }
|
||||||
|
|
||||||
def packageTasks(key: TaskKey[File], mappingsTask: Initialize[Task[Seq[(File,String)]]]) =
|
def packageTasks(key: TaskKey[File], mappingsTask: Initialize[Task[Seq[(File,String)]]]) =
|
||||||
inTask(key)( Seq(
|
inTask(key)( Seq(
|
||||||
key in TaskGlobal <<= packageTask,
|
key in TaskGlobal <<= packageTask,
|
||||||
|
|
@ -403,7 +408,7 @@ object Defaults extends BuildCommon
|
||||||
mappings <<= mappingsTask,
|
mappings <<= mappingsTask,
|
||||||
packagedArtifact <<= (artifact, key) map pairID,
|
packagedArtifact <<= (artifact, key) map pairID,
|
||||||
artifact <<= artifactSetting,
|
artifact <<= artifactSetting,
|
||||||
cacheDirectory <<= cacheDirectory / key.key.label,
|
perTaskCache(key),
|
||||||
artifactPath <<= artifactPathSetting(artifact)
|
artifactPath <<= artifactPathSetting(artifact)
|
||||||
))
|
))
|
||||||
def packageTask: Initialize[Task[File]] =
|
def packageTask: Initialize[Task[File]] =
|
||||||
|
|
@ -458,7 +463,7 @@ object Defaults extends BuildCommon
|
||||||
}
|
}
|
||||||
|
|
||||||
def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(compileInputsSettings ++ Seq(
|
def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(compileInputsSettings ++ Seq(
|
||||||
cacheDirectory ~= (_ / key.key.label),
|
perTaskCache(key),
|
||||||
target <<= docDirectory, // deprecate docDirectory in favor of 'target in doc'; remove when docDirectory is removed
|
target <<= docDirectory, // deprecate docDirectory in favor of 'target in doc'; remove when docDirectory is removed
|
||||||
scalacOptions <<= scaladocOptions or scalacOptions, // deprecate scaladocOptions in favor of 'scalacOptions in doc'; remove when scaladocOptions is removed
|
scalacOptions <<= scaladocOptions or scalacOptions, // deprecate scaladocOptions in favor of 'scalacOptions in doc'; remove when scaladocOptions is removed
|
||||||
key in TaskGlobal <<= (cacheDirectory, compileInputs, target, configuration, streams) map { (cache, in, out, config, s) =>
|
key in TaskGlobal <<= (cacheDirectory, compileInputs, target, configuration, streams) map { (cache, in, out, config, s) =>
|
||||||
|
|
@ -502,7 +507,7 @@ object Defaults extends BuildCommon
|
||||||
def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) }
|
def compileTask = (compileInputs, streams) map { (i,s) => Compiler(i,s.log) }
|
||||||
def compileIncSetupTask =
|
def compileIncSetupTask =
|
||||||
(dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) =>
|
(dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) =>
|
||||||
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile")
|
Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "inc_compile")
|
||||||
}
|
}
|
||||||
def compileInputsSettings: Seq[Setting[_]] = {
|
def compileInputsSettings: Seq[Setting[_]] = {
|
||||||
val optionsPair = TaskKey.local[(Seq[String], Seq[String])]
|
val optionsPair = TaskKey.local[(Seq[String], Seq[String])]
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ final class CompileConfiguration(val sources: Seq[File], val classpath: Seq[File
|
||||||
val previousAnalysis: Analysis, val previousSetup: Option[CompileSetup], val currentSetup: CompileSetup, val getAnalysis: File => Option[Analysis], val definesClass: DefinesClass,
|
val previousAnalysis: Analysis, val previousSetup: Option[CompileSetup], val currentSetup: CompileSetup, val getAnalysis: File => Option[Analysis], val definesClass: DefinesClass,
|
||||||
val maxErrors: Int, val compiler: AnalyzingCompiler, val javac: JavaCompiler)
|
val maxErrors: Int, val compiler: AnalyzingCompiler, val javac: JavaCompiler)
|
||||||
|
|
||||||
class AggressiveCompile(cacheDirectory: File)
|
class AggressiveCompile(cacheFile: 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, skip: Boolean = false)(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 =
|
||||||
{
|
{
|
||||||
|
|
@ -106,7 +106,7 @@ class AggressiveCompile(cacheDirectory: File)
|
||||||
options.dropWhile(_ != CompilerArguments.BootClasspathOption).drop(1).take(1).headOption.toList.flatMap(IO.parseClasspath)
|
options.dropWhile(_ != CompilerArguments.BootClasspathOption).drop(1).take(1).headOption.toList.flatMap(IO.parseClasspath)
|
||||||
|
|
||||||
import AnalysisFormats._
|
import AnalysisFormats._
|
||||||
val store = AggressiveCompile.staticCache(cacheDirectory, AnalysisStore.sync(AnalysisStore.cached(FileBasedStore(cacheDirectory))))
|
val store = AggressiveCompile.staticCache(cacheFile, AnalysisStore.sync(AnalysisStore.cached(FileBasedStore(cacheFile))))
|
||||||
}
|
}
|
||||||
private object AggressiveCompile
|
private object AggressiveCompile
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -25,16 +25,17 @@ object Compiler
|
||||||
|
|
||||||
final case class Inputs(compilers: Compilers, config: Options, incSetup: IncSetup)
|
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 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, skip: Boolean, cacheDirectory: File)
|
final case class IncSetup(analysisMap: Map[File, Analysis], definesClass: DefinesClass, skip: Boolean, cacheFile: File)
|
||||||
final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler)
|
final case class Compilers(scalac: AnalyzingCompiler, javac: JavaCompiler)
|
||||||
|
|
||||||
|
@deprecated("Use the other inputs variant.", "0.12.0")
|
||||||
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 =
|
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 =
|
||||||
{
|
{
|
||||||
import Path._
|
import Path._
|
||||||
val classesDirectory = outputDirectory / "classes"
|
val classesDirectory = outputDirectory / "classes"
|
||||||
val cacheDirectory = outputDirectory / "cache"
|
val cacheFile = outputDirectory / "cache_old_style"
|
||||||
val augClasspath = classesDirectory.asFile +: classpath
|
val augClasspath = classesDirectory.asFile +: classpath
|
||||||
val incSetup = IncSetup(Map.empty, definesClass, false, cacheDirectory)
|
val incSetup = IncSetup(Map.empty, definesClass, false, cacheFile)
|
||||||
inputs(augClasspath, sources, classesDirectory, options, javacOptions, maxErrors, order)(compilers, incSetup, log)
|
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 =
|
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 =
|
||||||
|
|
@ -103,7 +104,7 @@ object Compiler
|
||||||
import in.config._
|
import in.config._
|
||||||
import in.incSetup._
|
import in.incSetup._
|
||||||
|
|
||||||
val agg = new AggressiveCompile(cacheDirectory)
|
val agg = new AggressiveCompile(cacheFile)
|
||||||
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order, skip)(log)
|
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order, skip)(log)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue