Use uploaded R2C2 digests for fresh repository metadata (#32109)

After a repository fetch, `RemoteRepoContentsCacheImpl.addToCache` installs the uploaded `Tree` digests in `RemoteExternalOverlayFileSystem`. Fresh fetches and remote cache restores then expose the same digest-backed metadata, so Skyframe can retain unchanged generated `.bzl` files and their consumers. Native files remain readable without another download. Relative repository-root symlinks retain their behavior, and an installation failure removes partial metadata.

On the original fork-master fixture with 2,048 generated `.bzl` files, a single changed shard reloaded and configured 1 package instead of 2,048 for both fresh fetches and cached restores (12 samples per variant and transition). Median command time was 4.62 s → 4.47 s and 4.62 s → 4.22 s respectively. All 64 commands produced identical target bytes.

Original fork validation: 3,190 executed cases passed across the remote, VFS and R2C2 integration suites (18 skips). The upstream regression covers digest metadata, native reads without CAS, and cleanup on failed installation. On upstream, `//src/test/java/com/google/devtools/build/lib/remote:RemoteTests --test_filter=RemoteExternalOverlayFileSystemTest` passes all 5 selected cases on macOS, including the new regression. The full upstream diff passes `git diff --check`.

@fmeum

Closes #32109

COPYBARA_INTEGRATE_REVIEW=https://github.com/bazelbuild/bazel/pull/32109 from dzbarsky:dzbarsky/upstream-bazel-161 a35e6f825356b1d211c84162d6105ddefa65b1e9
PiperOrigin-RevId: 1013205193
Change-Id: Ie255d461792c7c5634d74225095ca1b4430f6f47
5 files changed
tree: 17208ab8d4226a53634046b90599015319e2d2d1
  1. .bazelci/
  2. .devcontainer/
  3. .gemini/
  4. .github/
  5. docs/
  6. examples/
  7. scripts/
  8. src/
  9. third_party/
  10. tools/
  11. .bazelrc
  12. .bazelversion
  13. .gitattributes
  14. .gitignore
  15. AGENTS.md
  16. AUTHORS
  17. bazel_downloader.cfg
  18. BUILD
  19. CHANGELOG.md
  20. CODE_OF_CONDUCT.md
  21. CODEOWNERS
  22. combine_distfiles.py
  23. combine_distfiles_to_tar.sh
  24. compile.sh
  25. CONTRIBUTING.md
  26. CONTRIBUTORS
  27. distdir.bzl
  28. extensions.bzl
  29. LICENSE
  30. maven_install.json
  31. MODULE.bazel
  32. MODULE.bazel.lock
  33. oneversion_allowlist.csv
  34. oneversion_allowlist_for_tests.csv
  35. pyproject.toml
  36. README.md
  37. repositories.bzl
  38. requirements.txt
  39. SECURITY.md
  40. verify_module_bazel_lock.sh
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Reporting a Vulnerability

To report a security issue, please email security@bazel.build with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. Our vulnerability management team will respond within 3 working days of your email. If the issue is confirmed as a vulnerability, we will open a Security Advisory. This project follows a 90 day disclosure timeline.

Contributing to Bazel

See CONTRIBUTING.md

Build status