Update error handling for absolute symlink violations when evaluating source action inputs.
PiperOrigin-RevId: 684044178
Change-Id: Ib18cf63bc60d2012ca23882b83fb5fa237a5dac5
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
index 6952ad9..d703084 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
@@ -52,6 +52,7 @@
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingDependenciesProvider;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Fingerprint;
+import com.google.devtools.build.lib.vfs.DetailedIOException;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.lib.vfs.XattrProvider;
@@ -303,6 +304,9 @@
FileValue fileValue;
try {
fileValue = (FileValue) env.getValueOrThrow(fileSkyKey, IOException.class);
+ } catch (DetailedIOException e) {
+ throw new ArtifactFunctionException(
+ SourceArtifactException.createdDetailed(artifact, e), Transience.PERSISTENT);
} catch (IOException e) {
throw new ArtifactFunctionException(
SourceArtifactException.create(artifact, e), Transience.PERSISTENT);
@@ -603,6 +607,20 @@
return new SourceArtifactException(detailedExitCode, e);
}
+ private static SourceArtifactException createdDetailed(
+ Artifact artifact, DetailedIOException e) {
+ FailureDetail failureDetailWithUpdatedErrorMessage =
+ e.getDetailedExitCode().getFailureDetail().toBuilder()
+ .setMessage(
+ constructErrorMessage(
+ artifact,
+ "error reading file: "
+ + e.getDetailedExitCode().getFailureDetail().getMessage()))
+ .build();
+ return new SourceArtifactException(
+ DetailedExitCode.of(failureDetailWithUpdatedErrorMessage), e);
+ }
+
private static SourceArtifactException create(
Artifact artifact, RecursiveFilesystemTraversalException e) {
FailureDetail failureDetail =