OutputService: simplify interface

Originally, OutputService.createSymlinkTree had to read the MANIFEST file
in order to get the list of symlinks. This was problematic, because the
file is not round-trip safe for paths containing whitespace characters.

In addition, it was responsible for creating a symlink from the output
manifest location to the input manifest location, which all subclasses
implemented in the same way.

Instead, it now receives a map representation of the symlinks, and the
creation of the output manifest symlink is the responsibility of the
action.

The current change is primarily a cleanup to reduce code duplication.

However, this change also makes it possible to globally change the
contents of the output manifest. By making it a non-symlink (e.g.,
a hash of the symlink map), we can decouple the symlink tree action
from the manifest writing action. We could run both in parallel, or
even skip writing the input manifest entirely (though note that the
input manifest is currently still necessary in some cases because
we use an external subprocess to create the symlink tree).

PiperOrigin-RevId: 282564612
6 files changed
tree: f11537a7dadf385ab4be4428ff517740805cd2ac
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
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

Contributing to Bazel

See CONTRIBUTING.md

Build status