aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2017-11-22 05:54:20 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-22 05:56:28 -0800
commit337f19cc54e77c45daa1d5f61bf0a8d3daf8268f (patch)
treec97b7e5268e1127dc85fc314f716d2d2384eb8cf /src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
parent3275b2555d1c043af0ee0397d1d6a4a3df64c011 (diff)
Move override check to the createAndOverrideRule function
So we actually test for override also from skylark repositories. Fixes #3908. Change-Id: I7650a17834a6915a73c89df46989f72aa2f56920 PiperOrigin-RevId: 176645218
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java15
1 files changed, 3 insertions, 12 deletions
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 2d7176aba8..dae4393b7c 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
@@ -335,7 +335,7 @@ public class WorkspaceFactory {
// This effectively adds a "local_repository(name = "<ws>", path = ".")"
// definition to the WORKSPACE file.
WorkspaceFactoryHelper.createAndAddRepositoryRule(
- builder, localRepositoryRuleClass, bindRuleClass, kwargs, ast);
+ builder, localRepositoryRuleClass, bindRuleClass, kwargs, ast, allowOverride);
} catch (InvalidRuleException | NameConflictException | LabelSyntaxException e) {
throw new EvalException(ast.getLocation(), e.getMessage());
}
@@ -451,21 +451,11 @@ public class WorkspaceFactory {
throws EvalException, InterruptedException {
try {
Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
- if (!allowOverride
- && kwargs.containsKey("name")
- && builder.targets.containsKey(kwargs.get("name"))) {
- throw new EvalException(
- ast.getLocation(),
- "Cannot redefine repository after any load statement in the WORKSPACE file"
- + " (for repository '"
- + kwargs.get("name")
- + "')");
- }
RuleClass ruleClass = ruleFactory.getRuleClass(ruleClassName);
RuleClass bindRuleClass = ruleFactory.getRuleClass("bind");
Rule rule =
WorkspaceFactoryHelper.createAndAddRepositoryRule(
- builder, ruleClass, bindRuleClass, kwargs, ast);
+ builder, ruleClass, bindRuleClass, kwargs, ast, allowOverride);
if (!isLegalWorkspaceName(rule.getName())) {
throw new EvalException(
ast.getLocation(), rule + "'s name field must be a legal workspace name");
@@ -515,6 +505,7 @@ public class WorkspaceFactory {
workspaceEnv.setupDynamic(
PackageFactory.PKG_CONTEXT,
new PackageFactory.PackageContext(builder, null, localReporter, AttributeContainer::new));
+ workspaceEnv.setupDynamic("$allow_override", allowOverride);
} catch (EvalException e) {
throw new AssertionError(e);
}