aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
diff options
context:
space:
mode:
authorGravatar mschaller <mschaller@google.com>2018-04-19 11:40:16 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-19 11:42:04 -0700
commit1673cf67fc8be563ff3541795c42c44de1f70705 (patch)
treea376126c32bcddac31273793263b74d85a7dc335 /src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
parent913b66c552a6e6b6c4bb496d4ccfd8f3fd518e7c (diff)
Introduce PackageErrorMessageValue
This CL introduces a new intermediate SkyValue type, PackageErrorMessageValue, to be used by RecursivePkgFunction. RecursivePkgValue will now have a direct dep on PackageErrorMessageValue rather than PackageValue. RELNOTES: None PiperOrigin-RevId: 193549158
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java65
1 files changed, 27 insertions, 38 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
index 4de261913d..faccffda57 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
@@ -23,14 +23,11 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.packages.NoSuchPackageException;
-import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.ValueOrException;
import java.util.Map;
/**
@@ -106,7 +103,7 @@ abstract class RecursiveDirectoryTraversalFunction<
* cycle
* </ol>
*/
- void notePackageError(NoSuchPackageException e);
+ void notePackageError(String noSuchPackageExceptionErrorMessage);
}
/**
@@ -137,47 +134,39 @@ abstract class RecursiveDirectoryTraversalFunction<
Map<SkyKey, SkyValue> subdirectorySkyValues;
if (packageExistenceAndSubdirDeps.packageExists()) {
PathFragment rootRelativePath = rootedPath.getRootRelativePath();
- SkyKey packageKey =
- PackageValue.key(
+ SkyKey packageErrorMessageKey =
+ PackageErrorMessageValue.key(
PackageIdentifier.create(recursivePkgKey.getRepository(), rootRelativePath));
- Map<SkyKey, ValueOrException<NoSuchPackageException>> dependentSkyValues =
- env.getValuesOrThrow(
- Iterables.concat(childDeps, ImmutableList.of(packageKey)),
- NoSuchPackageException.class);
+ Map<SkyKey, SkyValue> dependentSkyValues =
+ env.getValues(Iterables.concat(childDeps, ImmutableList.of(packageErrorMessageKey)));
if (env.valuesMissing()) {
return null;
}
- try {
- PackageValue pkgValue = (PackageValue) dependentSkyValues.get(packageKey).get();
- if (pkgValue == null) {
- return null;
- }
- Package pkg = pkgValue.getPackage();
- if (pkg.containsErrors()) {
+ PackageErrorMessageValue pkgErrorMessageValue =
+ (PackageErrorMessageValue) dependentSkyValues.get(packageErrorMessageKey);
+ switch (pkgErrorMessageValue.getResult()) {
+ case NO_ERROR:
+ consumer.notePackage(rootRelativePath);
+ break;
+ case ERROR:
env.getListener()
.handle(Event.error("package contains errors: " + rootRelativePath.getPathString()));
- }
- consumer.notePackage(rootRelativePath);
- } catch (NoSuchPackageException e) {
- // The package had errors, but don't fail-fast as there might be subpackages below the
- // current directory.
- env.getListener().handle(Event.error(e.getMessage()));
- consumer.notePackageError(e);
- if (env.valuesMissing()) {
- return null;
- }
+ consumer.notePackage(rootRelativePath);
+ break;
+ case NO_SUCH_PACKAGE_EXCEPTION:
+ // The package had errors, but don't fail-fast as there might be subpackages below the
+ // current directory.
+ String msg = pkgErrorMessageValue.getNoSuchPackageExceptionMessage();
+ env.getListener().handle(Event.error(msg));
+ consumer.notePackageError(msg);
+ break;
+ default:
+ throw new IllegalStateException(pkgErrorMessageValue.getResult().toString());
}
- ImmutableMap.Builder<SkyKey, SkyValue> subdirectoryBuilder = ImmutableMap.builder();
- for (Map.Entry<SkyKey, ValueOrException<NoSuchPackageException>> entry :
- Maps.filterKeys(dependentSkyValues, Predicates.not(Predicates.equalTo(packageKey)))
- .entrySet()) {
- try {
- subdirectoryBuilder.put(entry.getKey(), entry.getValue().get());
- } catch (NoSuchPackageException e) {
- // ignored.
- }
- }
- subdirectorySkyValues = subdirectoryBuilder.build();
+ subdirectorySkyValues =
+ ImmutableMap.copyOf(
+ Maps.filterKeys(
+ dependentSkyValues, Predicates.not(Predicates.equalTo(packageErrorMessageKey))));
} else {
subdirectorySkyValues = env.getValues(childDeps);
}