Skip to content

Commit

Permalink
Fix a crash on use_repo_rule with no repos
Browse files Browse the repository at this point in the history
Fixes #22489

Closes #22493.

PiperOrigin-RevId: 636310898
Change-Id: If2fb41fd8d51f15aa1047cb62d55035e81187e41
  • Loading branch information
fmeum authored and Copybara-Service committed May 22, 2024
1 parent 739f7b8 commit 792d17c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -656,18 +656,18 @@ public RepoRuleProxy useRepoRule(String bzlFile, String ruleName, StarlarkThread
throws EvalException {
ModuleThreadContext context = ModuleThreadContext.fromOrFail(thread, "use_repo_rule()");
context.setNonModuleCalled();
// The builder for the singular "innate" extension of this module.
// Find or create the builder for the singular "innate" extension of this module.
for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) {
if (usageBuilder.isForExtension("//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME)) {
return new RepoRuleProxy(usageBuilder, bzlFile + '%' + ruleName);
}
}
ModuleExtensionUsageBuilder newUsageBuilder =
new ModuleExtensionUsageBuilder(
context,
"//:MODULE.bazel",
ModuleExtensionId.INNATE_EXTENSION_NAME,
/* isolate= */ false);
for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) {
if (usageBuilder.isForExtension("//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME)) {
return new RepoRuleProxy(usageBuilder, bzlFile + '%' + ruleName);
}
}
context.getExtensionUsageBuilders().add(newUsageBuilder);
return new RepoRuleProxy(newUsageBuilder, bzlFile + '%' + ruleName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ public InterimModule buildModule(@Nullable Registry registry) throws EvalExcepti
// Build module extension usages and the rest of the module.
var extensionUsages = ImmutableList.<ModuleExtensionUsage>builder();
for (var extensionUsageBuilder : extensionUsageBuilders) {
if (extensionUsageBuilder.proxyBuilders.isEmpty()) {
// This can happen for the special extension used for "use_repo_rule" calls.
continue;
}
extensionUsages.add(extensionUsageBuilder.buildUsage());
}
return module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,20 @@ public void testRegisterToolchains_singlePackageRestriction() throws Exception {
assertThat(result.hasError()).isFalse();
}

@Test
public void testNoUsages() throws Exception {
scratch.overwriteFile(
rootDirectory.getRelative("MODULE.bazel").getPathString(),
"module(name='aaa')",
"http_archive = use_repo_rule('@bazel_tools//tools/build_defs/repo:http.bzl',"
+ " 'http_archive')");

EvaluationResult<RootModuleFileValue> result =
evaluator.evaluate(
ImmutableList.of(ModuleFileValue.KEY_FOR_ROOT_MODULE), evaluationContext);
assertThat(result.hasError()).isFalse();
}

@Test
public void testInvalidRepoInPatches() throws Exception {
scratch.overwriteFile(
Expand Down

0 comments on commit 792d17c

Please sign in to comment.