Audit the codebase for more bugs like the recently-fixed one with
EnvironmentBackedRecursivePackageProvider.
RELNOTES: None
PiperOrigin-RevId: 230570463
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index d420573..1c4daf4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -59,8 +59,13 @@
this.env = env;
}
- // TODO(nharmata): Audit the rest of the codebase to determine if we should be calling this method
- // in more places.
+ /**
+ * Whether any of the calls to {@link #getPackage}, {@link #getTarget}, {@link #bulkGetPackages},
+ * or {@link #getPackagesUnderDirectory} encountered a package in error.
+ *
+ * <p>The client of {@link EnvironmentBackedRecursivePackageProvider} may want to check this. See
+ * comments in {@link #getPackage} for details.
+ */
boolean encounteredPackageErrors() {
return encounteredPackageErrors.get();
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
index 057c7a4..6112c72 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
@@ -142,6 +142,9 @@
*/
static class DepsOfPatternPreparer extends TargetPatternResolver<Void> {
+ // Because PrepareDepsOfPatternFunction's only goal is to ensure the proper Skyframe nodes and
+ // edges are in the graph, we don't need to worry about
+ // EnvironmentBackedRecursivePackageProvider#encounteredPackageErrors.
private final EnvironmentBackedRecursivePackageProvider packageProvider;
private final Environment env;
private final ImmutableList<Root> pkgRoots;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index fa3db31..969d656a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -39,7 +39,6 @@
import com.google.devtools.build.lib.pkgcache.LoadingPhaseCompleteEvent;
import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
-import com.google.devtools.build.lib.pkgcache.TargetProvider;
import com.google.devtools.build.lib.pkgcache.TestFilter;
import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue.TargetPatternPhaseKey;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
@@ -348,10 +347,12 @@
.filter(TargetUtils.tagFilter(options.getBuildTargetFilter()))
.build();
if (options.getCompileOneDependency()) {
- TargetProvider targetProvider = new EnvironmentBackedRecursivePackageProvider(env);
+ EnvironmentBackedRecursivePackageProvider environmentBackedRecursivePackageProvider =
+ new EnvironmentBackedRecursivePackageProvider(env);
try {
- return new CompileOneDependencyTransformer(targetProvider)
- .transformCompileOneDependency(env.getListener(), result);
+ result =
+ new CompileOneDependencyTransformer(environmentBackedRecursivePackageProvider)
+ .transformCompileOneDependency(env.getListener(), result);
} catch (MissingDepException e) {
return null;
} catch (TargetParsingException e) {
@@ -364,6 +365,9 @@
env.getListener().handle(Event.error(e.getMessage()));
return ResolvedTargets.failed();
}
+ if (environmentBackedRecursivePackageProvider.encounteredPackageErrors()) {
+ result = ResolvedTargets.<Target>builder().merge(result).setError().build();
+ }
}
return result;
}