aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
diff options
context:
space:
mode:
authorGravatar John Field <jfield@google.com>2016-01-16 19:05:56 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2016-01-18 14:32:22 +0000
commitbcb1beaf0adad3f7409e55ae42f3c8498bd8a0eb (patch)
tree2737c33ad2db19678f2dac9909167d82649ba984 /src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
parente3ce21fab041c6c8e6da2811f5dce75615ccb1f4 (diff)
Disallow loads from external repos in WORKSPACE files. Currently, attempting to do such a load will result in a skyframe circular dependency exception.
As a side effect of this change, SkylarkImportFailedExceptions thrown by SkylarkImportLookupFunction are now caught by PackageFunction and wrapped and rethrown as a PackageFunctionException. Previously, the first exception wasn't caught, generating an uncaught exception error at top level. -- MOS_MIGRATED_REVID=112328755
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
index 801fbb3372..0898b3617f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
@@ -113,6 +113,13 @@ public class SkylarkImportLookupFunction implements SkyFunction {
throws InconsistentFilesystemException, SkylarkImportFailedException, InterruptedException {
PathFragment filePath = fileLabel.toPathFragment();
+ boolean loadingFromDefaultlRepo = fileLabel.getPackageIdentifier().getRepository().isDefault();
+ if (inWorkspace && !loadingFromDefaultlRepo) {
+ // Loads of files in external repos are currently prohibited in a WORKSPACE file to prevent
+ // circular skyframe dependencies.
+ throw SkylarkImportFailedException.noExternalLoadsFromWorkspace(fileLabel);
+ }
+
// Load the AST corresponding to this file.
ASTFileLookupValue astLookupValue;
try {
@@ -422,6 +429,15 @@ public class SkylarkImportLookupFunction implements SkyFunction {
static SkylarkImportFailedException skylarkErrors(PathFragment file) {
return new SkylarkImportFailedException(String.format("Extension '%s' has errors", file));
}
+
+ static final String NO_EXT_WORKSPACE_LOAD_MSG_TEMPLATE =
+ "Extension file '%s' may not be loaded from a WORKSPACE file "
+ + "since the extension file is located in an external repository.";
+ static SkylarkImportFailedException noExternalLoadsFromWorkspace(Label fileLabel) {
+ return new SkylarkImportFailedException(String.format(NO_EXT_WORKSPACE_LOAD_MSG_TEMPLATE,
+ fileLabel));
+ }
+
}
private static final class SkylarkImportLookupFunctionException extends SkyFunctionException {