mirror of https://github.com/sbt/sbt.git
Windows io really doesn't handle concurrent readers and writers all that well. Using the LegacyFileTreeRepository was problematic in windows scripted tests because even though the repository implementation did not use the cache in its list methods, it did persistently monitor the directories that were registered. The monitor has to do a lot of io on a background thread to maintain the cache. This caused io contention that would cause IO.createDirectory to fail with an obscure AccessDeniedException. The way to avoid this is to prevent the background io from occurring at all. I don't necessarily think this will impact most users running sbt interactively with a cache, but it did cause scripted tests to fail. For that reason I made the default in non-interactive/shell use cases on windows to be a PollingFileRepository which never monitors the file system except when we are in a watch. The LegacyFileTreeRepository works fine on mac and linux which have a more forgiving file system. To make this work, I had to add FileManagement.toMonitoringRepository. There are now two kinds of repositories that cannot monitor on their own: HybridPollingFileTreeRepository and PollingFileRepository. The FileManagement.toMonitoringRepository makes a new repository that turns on monitoring for those two repository types and disables the close method on all other repositories so that closing the FileEventMonitor does not actually close the global file repository. |
||
|---|---|---|
| .github | ||
| core-macros/src/main/scala/sbt/internal/util/appmacro | ||
| internal | ||
| launch | ||
| licenses | ||
| main | ||
| main-actions/src | ||
| main-command/src | ||
| main-settings/src | ||
| notes | ||
| project | ||
| protocol/src/main | ||
| run | ||
| sbt/src | ||
| scripted-plugin/src/main/scala/sbt | ||
| scripted-sbt-old/src/main/scala/sbt/test | ||
| scripted-sbt-redux | ||
| src/main/conscript | ||
| tasks | ||
| tasks-standard | ||
| testing | ||
| vscode-sbt-scala | ||
| .appveyor.yml | ||
| .gitattributes | ||
| .gitignore | ||
| .java-version | ||
| .sbtopts | ||
| .scalafmt.conf | ||
| .travis.yml | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE | ||
| PROFILING.md | ||
| README.md | ||
| SUPPORT.md | ||
| build.sbt | ||
| reset.sh | ||
| sbt-allsources.sh | ||
| server.md | ||
README.md
sbt
sbt is a build tool for Scala, Java, and more.
For general documentation, see http://www.scala-sbt.org/.
sbt 1.x
This is the 1.x series of sbt. The source code of sbt is split across several Github repositories, including this one.
- sbt/io hosts
sbt.iomodule. - sbt/util hosts a collection of internally used modules.
- sbt/librarymanagement hosts
sbt.librarymanagementmodule that wraps Ivy. - sbt/zinc hosts Zinc, an incremental compiler for Scala.
- sbt/sbt, this repository hosts modules that implements the build tool.
Other links
- Setup: Describes getting started with the latest binary release.
- FAQ: Explains how to get help and more.
- sbt/sbt-zero-seven: hosts sbt 0.7.7 and earlier versions
Issues and Pull Requests
Please read CONTRIBUTING carefully before opening a GitHub Issue.
The short version: try searching or asking on StackOverflow.
license
See LICENSE.