commit | dda67a2c60869f6331e1d576f93213ae27e334ac | [log] [tgz] |
---|---|---|
author | Laszlo Csomor <laszlocsomor@google.com> | Wed Feb 20 23:37:05 2019 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Wed Feb 20 23:38:53 2019 -0800 |
tree | 441a5b73142411f882772ef3d9d8d791f145b3fa | |
parent | be9483129401a7c9f1a86a40a3d7770662248576 [diff] |
new_local_repo: fix correctness bug with glob() In Skyframe, the DirectoryListingStateValue (DLS) of an external repository's path will now depend on the RepositoryDirectoryValue (RD). Example: the DLS of [output_root]/external/X now depends on the RD of `@X`. This is relevant for `glob()` expressions in the top-level package of the repository. The GlobValue depends on the DLS in order to get notified about added/removed files. In the root of external directories, those files are added/removed by the repository function. Hence the DLS should depend on the evaluation of the repository function, i.e. the creation of the RD. And that is exactly what this commit now does -- it ensures this dependency is declared. The bugfix is specific to Windows. On Linux, GlobValue depends on the DLS, but it also depends on symlinks in the directory (to get notified about a directory symlink getting replaced by a file with the same name, which would affect recursive globbing). And the symlinks depend on the RD, so the GlobValue always depended on the RD. However on Windows the files in the root of the repository are copies, not symlinks, and the Glob does not depend on files (as a means of optimization), so on Windows the GlobValue didn't depend on the RD, which caused issue #6351. More info: https://github.com/bazelbuild/bazel/issues/6351#issuecomment-465488344 Fixes https://github.com/bazelbuild/bazel/issues/6351 Closes #7473. PiperOrigin-RevId: 234938677
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel only rebuilds 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.
Follow our tutorials:
See CONTRIBUTING.md
Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.