aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar brandjon <brandjon@google.com>2017-10-23 19:02:31 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-10-24 10:39:30 +0200
commitdbff8b81bec72dd0f8a2fef825128e5f33c650d0 (patch)
tree68ba03941dfb5647a567848252b9f98033395b54 /src/main
parente287d4bf333e412033c8f484018cc431100eeee6 (diff)
Propagate skylark flags to WORKSPACE and repo rules
RELNOTES: Skylark semantics flags now affect WORKSPACE files and repository rules. PiperOrigin-RevId: 173130286
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java7
3 files changed, 32 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
index 6f708863fd..027d901611 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java
@@ -22,10 +22,12 @@ import com.google.devtools.build.lib.bazel.repository.downloader.HttpDownloader;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.syntax.BaseFunction;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Mutability;
import com.google.devtools.build.lib.syntax.Runtime;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -54,11 +56,14 @@ public class SkylarkRepositoryFunction extends RepositoryFunction {
if (declareEnvironmentDependencies(markerData, env, getEnviron(rule)) == null) {
return null;
}
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
try (Mutability mutability = Mutability.create("skylark repository")) {
- // This Skylark environment ignores command line flags.
com.google.devtools.build.lib.syntax.Environment buildEnv =
com.google.devtools.build.lib.syntax.Environment.builder(mutability)
- .useDefaultSemantics()
+ .setSemantics(skylarkSemantics)
.setEventHandler(env.getListener())
.build();
SkylarkRepositoryContext skylarkRepositoryContext =
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 0a9d68bff5..88ef31b5dc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.lib.syntax.ParserInputSource;
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.Runtime.NoneType;
import com.google.devtools.build.lib.syntax.SkylarkList;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
import com.google.devtools.build.lib.vfs.Path;
import java.io.File;
@@ -141,15 +142,19 @@ public class WorkspaceFactory {
}
/**
- * Parses the given WORKSPACE file without resolving skylark imports.
+ * Parses the given WORKSPACE file without resolving Skylark imports, using the default Skylark
+ * semantics.
*/
public void parse(ParserInputSource source)
throws BuildFileContainsErrorsException, InterruptedException {
- parse(source, null);
+ parse(source, SkylarkSemantics.DEFAULT_SEMANTICS, null);
}
@VisibleForTesting
- public void parse(ParserInputSource source, @Nullable StoredEventHandler localReporter)
+ public void parse(
+ ParserInputSource source,
+ SkylarkSemantics skylarkSemantics,
+ @Nullable StoredEventHandler localReporter)
throws BuildFileContainsErrorsException, InterruptedException {
// This method is split in 2 so WorkspaceFileFunction can call the two parts separately and
// do the Skylark load imports in between. We can't load skylark imports from
@@ -163,7 +168,7 @@ public class WorkspaceFactory {
throw new BuildFileContainsErrorsException(
Label.EXTERNAL_PACKAGE_IDENTIFIER, "Failed to parse " + source.getPath());
}
- execute(buildFileAST, null, localReporter);
+ execute(buildFileAST, null, skylarkSemantics, localReporter);
}
@@ -171,15 +176,21 @@ public class WorkspaceFactory {
* Actually runs through the AST, calling the functions in the WORKSPACE file and adding rules
* to the //external package.
*/
- public void execute(BuildFileAST ast, Map<String, Extension> importedExtensions)
+ public void execute(
+ BuildFileAST ast,
+ Map<String, Extension> importedExtensions,
+ SkylarkSemantics skylarkSemantics)
throws InterruptedException {
Preconditions.checkNotNull(ast);
Preconditions.checkNotNull(importedExtensions);
- execute(ast, importedExtensions, new StoredEventHandler());
+ execute(ast, importedExtensions, skylarkSemantics, new StoredEventHandler());
}
- private void execute(BuildFileAST ast, @Nullable Map<String, Extension> importedExtensions,
+ private void execute(
+ BuildFileAST ast,
+ @Nullable Map<String, Extension> importedExtensions,
+ SkylarkSemantics skylarkSemantics,
StoredEventHandler localReporter)
throws InterruptedException {
if (importedExtensions != null) {
@@ -191,8 +202,7 @@ public class WorkspaceFactory {
}
Environment workspaceEnv =
Environment.builder(mutability)
- // Note that this Skylark environment ignores command line flags.
- .useDefaultSemantics()
+ .setSemantics(skylarkSemantics)
.setGlobals(BazelLibrary.GLOBALS)
.setEventHandler(localReporter)
.setImportedExtensions(importMap)
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 71f2c98ff6..3f0f3f8ec2 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
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.skyframe.WorkspaceFileValue.WorkspaceFileKe
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.Environment.Extension;
import com.google.devtools.build.lib.syntax.Mutability;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -66,6 +67,10 @@ public class WorkspaceFileFunction implements SkyFunction {
if (workspaceASTValue == null) {
return null;
}
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
Path repoWorkspace = workspaceRoot.getRoot().getRelative(workspaceRoot.getRelativePath());
Package.Builder builder = packageFactory.newExternalPackageBuilder(
@@ -112,7 +117,7 @@ public class WorkspaceFileFunction implements SkyFunction {
if (importResult == null) {
return null;
}
- parser.execute(ast, importResult.importMap);
+ parser.execute(ast, importResult.importMap, skylarkSemantics);
} catch (NoSuchPackageException e) {
throw new WorkspaceFileFunctionException(e, Transience.PERSISTENT);
} catch (NameConflictException e) {