Skip to content

Commit 674a71c

Browse files
fmeumiancha1992
authored andcommitted
Fix a crash on use_repo_rule with no repos
Fixes bazelbuild#22489 Closes bazelbuild#22493. PiperOrigin-RevId: 636310898 Change-Id: If2fb41fd8d51f15aa1047cb62d55035e81187e41
1 parent 4f60def commit 674a71c

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -643,18 +643,18 @@ public RepoRuleProxy useRepoRule(String bzlFile, String ruleName, StarlarkThread
643643
throws EvalException {
644644
ModuleThreadContext context = ModuleThreadContext.fromOrFail(thread, "use_repo_rule()");
645645
context.setNonModuleCalled();
646-
// The builder for the singular "innate" extension of this module.
646+
// Find or create the builder for the singular "innate" extension of this module.
647+
for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) {
648+
if (usageBuilder.isForExtension("//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME)) {
649+
return new RepoRuleProxy(usageBuilder, bzlFile + '%' + ruleName);
650+
}
651+
}
647652
ModuleExtensionUsageBuilder newUsageBuilder =
648653
new ModuleExtensionUsageBuilder(
649654
context,
650655
"//:MODULE.bazel",
651656
ModuleExtensionId.INNATE_EXTENSION_NAME,
652657
/* isolate= */ false);
653-
for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) {
654-
if (usageBuilder.isForExtension("//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME)) {
655-
return new RepoRuleProxy(usageBuilder, bzlFile + '%' + ruleName);
656-
}
657-
}
658658
context.getExtensionUsageBuilders().add(newUsageBuilder);
659659
return new RepoRuleProxy(newUsageBuilder, bzlFile + '%' + ruleName);
660660
}

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,10 @@ public InterimModule buildModule(@Nullable Registry registry) throws EvalExcepti
249249
// Build module extension usages and the rest of the module.
250250
var extensionUsages = ImmutableList.<ModuleExtensionUsage>builder();
251251
for (var extensionUsageBuilder : extensionUsageBuilders) {
252+
if (extensionUsageBuilder.proxyBuilders.isEmpty()) {
253+
// This can happen for the special extension used for "use_repo_rule" calls.
254+
continue;
255+
}
252256
extensionUsages.add(extensionUsageBuilder.buildUsage());
253257
}
254258
return module

src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,20 @@ public void isolatedUsage_notEnabled() throws Exception {
15381538
+ "--experimental_isolated_extension_usages");
15391539
}
15401540

1541+
@Test
1542+
public void testNoUsages() throws Exception {
1543+
scratch.overwriteFile(
1544+
rootDirectory.getRelative("MODULE.bazel").getPathString(),
1545+
"module(name='aaa')",
1546+
"http_archive = use_repo_rule('@bazel_tools//tools/build_defs/repo:http.bzl',"
1547+
+ " 'http_archive')");
1548+
1549+
EvaluationResult<RootModuleFileValue> result =
1550+
evaluator.evaluate(
1551+
ImmutableList.of(ModuleFileValue.KEY_FOR_ROOT_MODULE), evaluationContext);
1552+
assertThat(result.hasError()).isFalse();
1553+
}
1554+
15411555
@Test
15421556
public void testInvalidRepoInPatches() throws Exception {
15431557
scratch.overwriteFile(

0 commit comments

Comments
 (0)