From b7b498bdd3771e40a64067fe8346c41749fd3066 Mon Sep 17 00:00:00 2001 From: Tiago Quelhas Date: Mon, 10 Nov 2025 20:13:23 +0000 Subject: [PATCH] [9.0.0] Compare paths as fragments in `AbstractActionInputPrefetcher`. (#27627) This is required because `execRoot` might be located on an action file system overlaying the host file system where downloads are written (see the changes in https://github.com/bazelbuild/bazel/commit/b8589c3b278e3f5cee6ef85b0dcabb1cdcd69839 for context). PiperOrigin-RevId: 830480221 Change-Id: I217b81a81da80f2050c4ec9082ef5f18cb9a0bc9 (cherry picked from commit 1e9d843fa6362b88d5ca1b6cc04b38f69823fb76) --- .../build/lib/remote/AbstractActionInputPrefetcher.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java b/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java index 1b67f191fd2ec7..4b018ee621f07b 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java +++ b/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java @@ -139,10 +139,13 @@ private void setWritable(Path dir, DirectoryState newState) throws IOException { // dir may be on the host file system while the output base is on an overlay) so that the exec // root, which is only resolvable during the loading phase and later, is not resolved during // external repo materialization. + // + // Compare against the exec root as fragments as well, since it may be located on a file + // system overlaying the host file system where downloads are written to. if (dir.asFragment() .startsWith( outputBase.getRelative(LabelConstants.EXTERNAL_REPOSITORY_LOCATION).asFragment()) - || !dir.startsWith(execRoot())) { + || !dir.asFragment().startsWith(execRoot().asFragment())) { return; } AtomicReference caughtException = new AtomicReference<>();