mirror of https://github.com/sbt/sbt.git
Building on #9270 (which parallelized resolution in non-interactive runs by narrowing the lm-coursier lock to only fire while coursier renders its interactive progress bar), this makes `update` resolve in parallel under the interactive super shell as well. Under the super shell, LMCoursier.coursierLoggerTask previously returned None, so coursier drew its own per-module progress bars and resolution stayed serialized (those bars are not safe to render concurrently). It now supplies a CacheLogger, which both suppresses coursier's bars and flips #9270's progressBarActive predicate to false, so resolution runs in parallel. Progress is rendered at the sbt task level instead. Resolution progress is tracked by a per-command ResolutionProgress instance, created in MainLoop.next alongside Keys.taskProgress and held under an AttributeKey with the same lifecycle -- no JVM-global state. coursierLoggerTask reads it from State and hands it to the ResolutionProgressLogger that coursier's download threads call; TaskProgress holds the same instance and appends a single aggregate line at render time, e.g. "Updating 18 modules, 240 artifacts, 31.0 MiB". The instance is born empty per command and discarded with it, so totals never leak across commands and the count never resets mid-update (a single update runs a resolve phase and a separate artifacts phase). v1 renders one aggregate line because it needs no schema change; per-module status lines (which would add a status field to ProgressItem) are a follow-up. UpdateRun's report-building lock is left as a separate follow-up since the network-heavy paths (ResolutionRun/ArtifactsRun) are already unlocked. re: #5627 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github | ||
| buildfile/src | ||
| client | ||
| contributing-docs | ||
| core-macros/src | ||
| internal | ||
| launch | ||
| launcher-package | ||
| licenses | ||
| lm-core | ||
| lm-coursier | ||
| lm-ivy/src | ||
| main | ||
| main-actions/src | ||
| main-command/src | ||
| main-settings/src | ||
| notes | ||
| project | ||
| protocol/src | ||
| run | ||
| sbt-app/src | ||
| sbt-ivy/src/main/scala/sbt | ||
| sbt-remote-cache/src/main/scala/sbt | ||
| sbtw | ||
| scripted-sbt | ||
| scripts | ||
| server-test/src | ||
| src | ||
| tasks | ||
| tasks-standard | ||
| testing | ||
| util-cache | ||
| util-collection | ||
| util-tracking | ||
| worker/src | ||
| zinc-lm-integration/src | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .java-version | ||
| .jvmopts | ||
| .mailmap | ||
| .sbtopts | ||
| .scala-steward.conf | ||
| .scalafix.conf | ||
| .scalafmt.conf | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE | ||
| PROFILING.md | ||
| README.md | ||
| SUPPORT.md | ||
| build.sbt | ||
| sbt | ||
| sbt-allsources.sh | ||
| sbt.sh | ||
| server.md | ||
README.md
sbt
sbt is a build tool for Scala, Java, and more.
For general documentation, see https://www.scala-sbt.org/.
sbt 2.x
This is the 2.x series of sbt. The source code of sbt is split across several GitHub repositories, including this one.
- sbt/io hosts
sbt.iomodule. - sbt/zinc hosts Zinc, an incremental compiler for Scala.
- sbt/sbt, this repository hosts modules that implement 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 or a pull request.
If you're looking for an idea for a contribution, issues labeled with good first issue or help wanted might be good starting points.
If you would like to ask questions about sbt, there's sbt channel on Scala Discord, but it would be good to gather questions on Stackoverflow.
license
See LICENSE.