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 =