[7.2.0] Automatically map paths in `Args#map_each` (#22322)
When path mapping is enabled, `File` objects accessed in a user-supplied callback passed to `Args#map_each` automatically have their paths mapped. Automatic rewriting is preferable to e.g. passing a rewriter object into the callback: All paths emitted into command lines must be rewritten with path mapping as inputs and outputs are staged at the mapped locations, so the user would need to manually map all paths - there is no choice. As an added benefit, the automatic rewriting ensures that existing rules relying on `map_each` do not need to be modified to use path mapping. This is a reland of 955b31e9, which got rolled back due to a 7% CPU time increase on a benchmark caused by frequent comparisons of equal but not reference equal `StarlarkSemantics` used as keys in the `StarlarkClassDescriptor` cache in `CallUtils`. Instead of overriding `equals` and `hashCode` for `PathMapper`, this change subclasses `StarlarkSemantics` to provide a different, reference equal instance as the cache key. This is safe since the value associated with the `path_mapper` key does not affect the availability of any Starlark field or method, just the behavior of their implementations. Work towards https://github.com/bazelbuild/bazel/issues/6526 Closes #21952. PiperOrigin-RevId: 629546010 Change-Id: Ib21fa2371a28a02f0c868523b410c5a40c2c6c82 Closes #22221
Showing
- src/main/java/com/google/devtools/build/lib/actions/Artifact.java 93 additions, 5 deletions.../java/com/google/devtools/build/lib/actions/Artifact.java
- src/main/java/com/google/devtools/build/lib/actions/BUILD 7 additions, 1 deletionsrc/main/java/com/google/devtools/build/lib/actions/BUILD
- src/main/java/com/google/devtools/build/lib/actions/PathMapper.java 42 additions, 0 deletions...ava/com/google/devtools/build/lib/actions/PathMapper.java
- src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java 22 additions, 8 deletions...uild/lib/analysis/starlark/StarlarkCustomCommandLine.java
- src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java 7 additions, 3 deletions...m/google/devtools/build/lib/starlarkbuildapi/FileApi.java
- src/main/java/net/starlark/java/eval/CallUtils.java 2 additions, 1 deletionsrc/main/java/net/starlark/java/eval/CallUtils.java
- src/main/java/net/starlark/java/eval/StarlarkSemantics.java 22 additions, 10 deletionssrc/main/java/net/starlark/java/eval/StarlarkSemantics.java
- src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java 56 additions, 0 deletions...a/com/google/devtools/build/lib/actions/ArtifactTest.java
- src/test/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapperTest.java 25 additions, 19 deletions...s/build/lib/analysis/actions/StrippingPathMapperTest.java
- src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleContextTest.java 41 additions, 0 deletions.../devtools/build/lib/starlark/StarlarkRuleContextTest.java
Please register or sign in to comment