aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Package.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java36
4 files changed, 53 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 4ec65dd3b0..ec5806869a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -39,6 +39,7 @@ import com.google.devtools.build.lib.util.SpellChecker;
import com.google.devtools.build.lib.vfs.Canonicalizer;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
+import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
@@ -751,6 +752,8 @@ public class Package {
private List<String> features = new ArrayList<>();
private List<Event> events = Lists.newArrayList();
private List<Postable> posts = Lists.newArrayList();
+ @Nullable String ioExceptionMessage = null;
+ @Nullable private IOException ioException = null;
private boolean containsErrors = false;
private License defaultLicense = License.NO_LICENSE;
@@ -928,6 +931,12 @@ public class Package {
return this;
}
+ Builder setIOExceptionAndMessage(IOException e, String message) {
+ this.ioException = e;
+ this.ioExceptionMessage = message;
+ return setContainsErrors();
+ }
+
/**
* Declares that errors were encountering while loading this package.
*/
@@ -1284,11 +1293,15 @@ public class Package {
this.registeredToolchainLabels.addAll(toolchains);
}
- private Builder beforeBuild(boolean discoverAssumedInputFiles) throws InterruptedException {
+ private Builder beforeBuild(boolean discoverAssumedInputFiles)
+ throws InterruptedException, NoSuchPackageException {
Preconditions.checkNotNull(pkg);
Preconditions.checkNotNull(filename);
Preconditions.checkNotNull(buildFileLabel);
Preconditions.checkNotNull(makeEnv);
+ if (ioException != null) {
+ throw new NoSuchPackageException(getPackageIdentifier(), ioExceptionMessage, ioException);
+ }
// Freeze subincludes.
subincludes = (subincludes == null)
? Collections.<Label, Path>emptyMap()
@@ -1337,7 +1350,7 @@ public class Package {
}
/** Intended for use by {@link com.google.devtools.build.lib.skyframe.PackageFunction} only. */
- public Builder buildPartial() throws InterruptedException {
+ public Builder buildPartial() throws InterruptedException, NoSuchPackageException {
if (alreadyBuilt) {
return this;
}
@@ -1385,15 +1398,16 @@ public class Package {
return externalPackageData;
}
- public Package build() throws InterruptedException {
+ public Package build() throws InterruptedException, NoSuchPackageException {
return build(/*discoverAssumedInputFiles=*/ true);
}
/**
- * Build the package, optionally adding any labels in the package not already associated with
- * a target as an input file.
+ * Build the package, optionally adding any labels in the package not already associated with a
+ * target as an input file.
*/
- public Package build(boolean discoverAssumedInputFiles) throws InterruptedException {
+ public Package build(boolean discoverAssumedInputFiles)
+ throws InterruptedException, NoSuchPackageException {
if (alreadyBuilt) {
return pkg;
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index cab4a4f6d6..3eead14e7d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -573,11 +573,12 @@ public final class PackageFactory {
try {
Globber.Token globToken = context.globber.runAsync(includes, excludes, excludeDirs);
matches = context.globber.fetch(globToken);
- } catch (IOException expected) {
- context.eventHandler.handle(Event.error(ast.getLocation(),
- "error globbing [" + Joiner.on(", ").join(includes) + "]: " + expected.getMessage()));
- context.pkgBuilder.setContainsErrors();
- matches = ImmutableList.<String>of();
+ } catch (IOException e) {
+ String errorMessage =
+ "error globbing [" + Joiner.on(", ").join(includes) + "]: " + e.getMessage();
+ context.eventHandler.handle(Event.error(ast.getLocation(), errorMessage));
+ context.pkgBuilder.setIOExceptionAndMessage(e, errorMessage);
+ matches = ImmutableList.of();
} catch (BadGlobException e) {
throw new EvalException(ast.getLocation(), e.getMessage());
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index 33fb4aa5cb..4a6010faba 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -567,7 +567,11 @@ public class PackageFunction implements SkyFunction {
return null;
}
Package.Builder pkgBuilder = packageBuilderAndGlobDeps.value;
- pkgBuilder.buildPartial();
+ try {
+ pkgBuilder.buildPartial();
+ } catch (NoSuchPackageException e) {
+ throw new PackageFunctionException(e, Transience.TRANSIENT);
+ }
try {
// Since the Skyframe dependencies we request below in
// markDependenciesAndPropagateFilesystemExceptions are requested independently of
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 2372793333..71f2c98ff6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -72,13 +72,17 @@ public class WorkspaceFileFunction implements SkyFunction {
repoWorkspace, ruleClassProvider.getRunfilesPrefix());
if (workspaceASTValue.getASTs().isEmpty()) {
- return new WorkspaceFileValue(
- builder.build(), // resulting package
- ImmutableMap.<String, Extension>of(), // list of imports
- ImmutableMap.<String, Object>of(), // list of symbol bindings
- workspaceRoot, // Workspace root
- 0, // first fragment, idx = 0
- false); // last fragment
+ try {
+ return new WorkspaceFileValue(
+ builder.build(), // resulting package
+ ImmutableMap.<String, Extension>of(), // list of imports
+ ImmutableMap.<String, Object>of(), // list of symbol bindings
+ workspaceRoot, // Workspace root
+ 0, // first fragment, idx = 0
+ false); // last fragment
+ } catch (NoSuchPackageException e) {
+ throw new WorkspaceFileFunctionException(e, Transience.TRANSIENT);
+ }
}
WorkspaceFactory parser;
try (Mutability mutability = Mutability.create("workspace %s", repoWorkspace)) {
@@ -115,13 +119,17 @@ public class WorkspaceFileFunction implements SkyFunction {
throw new WorkspaceFileFunctionException(e, Transience.PERSISTENT);
}
- return new WorkspaceFileValue(
- builder.build(),
- parser.getImportMap(),
- parser.getVariableBindings(),
- workspaceRoot,
- key.getIndex(),
- key.getIndex() < workspaceASTValue.getASTs().size() - 1);
+ try {
+ return new WorkspaceFileValue(
+ builder.build(),
+ parser.getImportMap(),
+ parser.getVariableBindings(),
+ workspaceRoot,
+ key.getIndex(),
+ key.getIndex() < workspaceASTValue.getASTs().size() - 1);
+ } catch (NoSuchPackageException e) {
+ throw new WorkspaceFileFunctionException(e, Transience.TRANSIENT);
+ }
}
@Override