mirror of https://github.com/sbt/sbt.git
Change default FileTree implementation
I have noticed on linux that the file cache updates aren't fast enough for ExternalHooks. Say you have project b that depends on project a. With a clean build, if you run b/compile, the file cache may not yet see the changes to *.class files generated by project a. There are multiple ways to fix this: * don't use the file cache for binary products * use the analysis results to invalidate the cache * switch over to my hypothetical replacement file system In the meantime, we should stop spamming users by default.
This commit is contained in:
parent
5a65c63e17
commit
7f46b27143
|
|
@ -21,7 +21,7 @@ object FileTree {
|
||||||
private sealed trait CacheOptions
|
private sealed trait CacheOptions
|
||||||
private case object NoCache extends CacheOptions
|
private case object NoCache extends CacheOptions
|
||||||
private case object UseCache extends CacheOptions
|
private case object UseCache extends CacheOptions
|
||||||
private case object LogDifferences extends CacheOptions
|
private case object Validate extends CacheOptions
|
||||||
private def toPair(
|
private def toPair(
|
||||||
filter: Entry[FileAttributes] => Boolean
|
filter: Entry[FileAttributes] => Boolean
|
||||||
)(e: Entry[FileAttributes]): Option[(Path, FileAttributes)] =
|
)(e: Entry[FileAttributes]): Option[(Path, FileAttributes)] =
|
||||||
|
|
@ -55,14 +55,14 @@ object FileTree {
|
||||||
private class CachingRepository(underlying: FileTreeRepository[FileAttributes])
|
private class CachingRepository(underlying: FileTreeRepository[FileAttributes])
|
||||||
extends Repository {
|
extends Repository {
|
||||||
lazy val cacheOptions = System.getProperty("sbt.io.filecache") match {
|
lazy val cacheOptions = System.getProperty("sbt.io.filecache") match {
|
||||||
case "false" => NoCache
|
case "true" => UseCache
|
||||||
case "true" => UseCache
|
case "validate" => Validate
|
||||||
case _ => LogDifferences
|
case _ => NoCache
|
||||||
}
|
}
|
||||||
override def get(key: Glob): Seq[(Path, FileAttributes)] = {
|
override def get(key: Glob): Seq[(Path, FileAttributes)] = {
|
||||||
underlying.register(key)
|
underlying.register(key)
|
||||||
cacheOptions match {
|
cacheOptions match {
|
||||||
case LogDifferences =>
|
case Validate =>
|
||||||
val res = Repository.polling.get(key)
|
val res = Repository.polling.get(key)
|
||||||
val filter = key.toEntryFilter
|
val filter = key.toEntryFilter
|
||||||
val cacheRes = underlying
|
val cacheRes = underlying
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue