Fix deleteTreesBelow crash if top directory goes missing.

This is a repeat of https://github.com/bazelbuild/bazel/commit/49076cc6694e10170c2640048adbc1b1efd5c810, which was rolled back because the new
tests added here broke when testing InMemoryFileSystem.  As it turns out,
these new tests exposed a bug of the same kind in that other file system's
delete() implementation, which I'm fixing now.

The deleteTreesBelow method starts with a check to see if the given path
is a directory and aborts early if not.  This was masking a bug (introduced
in https://github.com/bazelbuild/bazel/commit/fac322b1ef7a9acbe71f3718143c0dae43fb5833) in the JNI code where we would not gracefully handle errors
if any syscalls failed on this top-level directory.

Fix this by removing an invalid assertion and add a race condition test
to ensure this works and that we get valid error messages.

While doing this, replace all assert()s in this algorithm with CHECK()s for
consistency with the rest of the file.

RELNOTES: None.
PiperOrigin-RevId: 276072383
3 files changed
tree: 3f0b3fc454a238ef92285ce914d81d0db9231b9b
  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