diff options
author | 2016-01-16 19:05:56 +0000 | |
---|---|---|
committer | 2016-01-18 14:32:22 +0000 | |
commit | bcb1beaf0adad3f7409e55ae42f3c8498bd8a0eb (patch) | |
tree | 2737c33ad2db19678f2dac9909167d82649ba984 /src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java | |
parent | e3ce21fab041c6c8e6da2811f5dce75615ccb1f4 (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.java | 16 |
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 { |