Tolerate Skyframe errors encountered during target pattern parsing.
PiperOrigin-RevId: 295178674
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index c37f308..187b5d8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -184,8 +184,6 @@
+ fileRootedPath.asPath()),
Transience.PERSISTENT);
} catch (IOException e) {
- // TODO(bazel-team): throw an IOException here and let PackageFunction wrap that into a
- // BuildFileNotFoundException.
throw new PackageLookupFunctionException(new BuildFileNotFoundException(packageIdentifier,
"IO errors while looking for " + basename + " file reading "
+ fileRootedPath.asPath() + ": " + e.getMessage(), e),
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 33e34fb..fe51536 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -2902,11 +2902,6 @@
} else {
Exception e = Preconditions.checkNotNull(errorInfo.getException());
- // TargetPatternPhaseFunction never directly throws. Thus, the only way
- // evalResult.hasError() && keepGoing can hold is if there are cycles, which is handled
- // above.
- Preconditions.checkState(!keepGoing, e.getMessage());
-
// Following SkyframeTargetPatternEvaluator, we convert any exception into a
// TargetParsingException.
exc =
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
index e099990..f7f0132 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
@@ -17,6 +17,7 @@
import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
import com.google.devtools.build.lib.clock.BlazeClock;
+import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
@@ -56,4 +57,14 @@
reporter.removeHandler(failFastHandler);
assertThrows(ViewCreationFailedException.class, () -> update("//b:b"));
}
+
+ @Test
+ public void testWorkspaceError() throws IOException {
+ scratch.file("a/BUILD");
+ crashMessage = path -> path.toString().contains("WORKSPACE") ? "bork" : null;
+ reporter.removeHandler(failFastHandler);
+ assertThrows(
+ TargetParsingException.class,
+ () -> update(new FlagBuilder().with(Flag.KEEP_GOING), "//a:a"));
+ }
}