diff options
author | 2017-11-22 05:54:20 -0800 | |
---|---|---|
committer | 2017-11-22 05:56:28 -0800 | |
commit | 337f19cc54e77c45daa1d5f61bf0a8d3daf8268f (patch) | |
tree | c97b7e5268e1127dc85fc314f716d2d2384eb8cf /src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java | |
parent | 3275b2555d1c043af0ee0397d1d6a4a3df64c011 (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.java | 15 |
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); } |