diff options
author | 2017-07-13 19:55:32 +0200 | |
---|---|---|
committer | 2017-07-14 10:52:09 +0200 | |
commit | 28adce590d95cb9aa826fcd9f939efbb8e1eab7e (patch) | |
tree | 4df40b5eebecd4f237a6343d5f3577c480600e24 /src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java | |
parent | 5abf4ed4dc9fc134e47f9b56e3b65ba26d0ba9f0 (diff) |
If globbing throws an IOException, fail to construct the package instead of constructing the package with an error.
Prior to this change, if a Package.Builder object was constructed, it was guaranteed that a Package (possibly with errors) would be created. This is no longer true: if an IOException is set on the Package.Builder object, it will throw a NoSuchPackageException during #build().
PiperOrigin-RevId: 161832111
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java | 36 |
1 files changed, 22 insertions, 14 deletions
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 |