diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java index 7d838d1d17dd4b..0a2661fde95dc7 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java @@ -42,6 +42,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleInspectorValue.AugmentedModule.ResolutionReason; import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.LocalPathOverride; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleOverride; import com.google.devtools.build.lib.bazel.bzlmod.NonRegistryOverride; @@ -290,7 +291,10 @@ SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(directories.getWorkspace .addSkyFunction(SkyFunctions.BAZEL_MODULE_RESOLUTION, new BazelModuleResolutionFunction()) .addSkyFunction(SkyFunctions.SINGLE_EXTENSION_EVAL, singleExtensionEvalFunction) .addSkyFunction(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) - .addSkyFunction(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)); + .addSkyFunction(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .addSkyFunction( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()); filesystem = runtime.getFileSystem(); credentialModule = Preconditions.checkNotNull(runtime.getBlazeModule(CredentialModule.class)); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD index 35adfdc97b66f7..62f23a6706da5e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD @@ -132,6 +132,7 @@ java_library( "ModuleBase.java", "ModuleExtensionEvalFactors.java", "ModuleExtensionEvalStarlarkThreadContext.java", + "ModuleExtensionRepoMappingEntriesValue.java", "ModuleExtensionResolutionEvent.java", "ModuleFileValue.java", "ModuleOverride.java", @@ -182,6 +183,7 @@ java_library( "GsonTypeAdapterUtil.java", "ModuleExtensionContext.java", "ModuleExtensionEvaluationProgress.java", + "ModuleExtensionRepoMappingEntriesFunction.java", "ModuleFileFunction.java", "ModuleFileGlobals.java", "RepoSpecFunction.java", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java new file mode 100644 index 00000000000000..fb1e9adcea3645 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java @@ -0,0 +1,78 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package com.google.devtools.build.lib.bazel.bzlmod; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.cmdline.RepositoryMapping; +import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.skyframe.SkyFunction; +import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; +import javax.annotation.Nullable; + +/** + * A SkyFunction that computes the {@link RepositoryMapping#entries()} for the repos generated by a + * module extension. While the repos differ in {@link RepositoryMapping#ownerRepo()}, the entries + * are identical and sharing the instance ensures that memory and CPU usage are only linear in the + * number of repos. + */ +public class ModuleExtensionRepoMappingEntriesFunction implements SkyFunction { + + @Override + @Nullable + public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException { + BazelDepGraphValue bazelDepGraphValue = + (BazelDepGraphValue) env.getValue(BazelDepGraphValue.KEY); + if (bazelDepGraphValue == null) { + return null; + } + + var moduleExtensionId = ((ModuleExtensionRepoMappingEntriesValue.Key) skyKey).argument(); + var extensionEvalValue = + (SingleExtensionEvalValue) env.getValue(SingleExtensionEvalValue.key(moduleExtensionId)); + if (extensionEvalValue == null) { + return null; + } + + return computeRepoMappingEntries(moduleExtensionId, extensionEvalValue, bazelDepGraphValue); + } + + /** + * Calculates repo mappings for a repo generated from a module extension. Such a repo can see all + * repos generated by the same module extension, as well as all repos that the Bazel module + * hosting the extension can see (see above). + */ + private ModuleExtensionRepoMappingEntriesValue computeRepoMappingEntries( + ModuleExtensionId extensionId, + SingleExtensionEvalValue extensionEvalValue, + BazelDepGraphValue bazelDepGraphValue) { + // Find the key of the module containing this extension. This will be used to compute additional + // mappings -- any repo generated by an extension contained in the module "foo" can additionally + // see all repos that "foo" can see. + ModuleKey moduleKey = + bazelDepGraphValue + .getCanonicalRepoNameLookup() + .get(extensionId.getBzlFileLabel().getRepository()); + // NOTE(wyv): This means that if "foo" has a bazel_dep with the repo name "bar", and the + // extension generates an internal repo name "bar", then within a repo generated by the + // extension, "bar" will refer to the latter. We should explore a way to differentiate between + // the two to avoid any surprises. + ImmutableMap.Builder entries = ImmutableMap.builder(); + entries.putAll(bazelDepGraphValue.getFullRepoMapping(moduleKey).entries()); + entries.putAll(extensionEvalValue.getCanonicalRepoNameToInternalNames().inverse()); + return ModuleExtensionRepoMappingEntriesValue.create(entries.buildKeepingLast(), moduleKey); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java new file mode 100644 index 00000000000000..5f2e2ffa7d7f3a --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java @@ -0,0 +1,76 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package com.google.devtools.build.lib.bazel.bzlmod; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.skyframe.SkyFunctions; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.skyframe.AbstractSkyKey; +import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; + +/** The value for {@link ModuleExtensionRepoMappingEntriesFunction}. */ +@AutoCodec +@AutoValue +public abstract class ModuleExtensionRepoMappingEntriesValue implements SkyValue { + + public abstract ImmutableMap getEntries(); + + public abstract ModuleKey getModuleKey(); + + @AutoCodec.Instantiator + public static ModuleExtensionRepoMappingEntriesValue create( + ImmutableMap entries, ModuleKey moduleKey) { + return new AutoValue_ModuleExtensionRepoMappingEntriesValue(entries, moduleKey); + } + + public static ModuleExtensionRepoMappingEntriesValue.Key key(ModuleExtensionId id) { + return ModuleExtensionRepoMappingEntriesValue.Key.create(id); + } + + /** + * The {@link com.google.devtools.build.skyframe.SkyKey} of a {@link + * ModuleExtensionRepoMappingEntriesValue}. + */ + @AutoCodec + public static class Key extends AbstractSkyKey { + + private static final SkyKeyInterner interner = + SkyKey.newInterner(); + + protected Key(ModuleExtensionId arg) { + super(arg); + } + + @AutoCodec.Instantiator + static ModuleExtensionRepoMappingEntriesValue.Key create(ModuleExtensionId arg) { + return interner.intern(new ModuleExtensionRepoMappingEntriesValue.Key(arg)); + } + + @Override + public SkyFunctionName functionName() { + return SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES; + } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } + } +} diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java index d1e5f35cc7c53f..0246c930171776 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java @@ -17,8 +17,6 @@ import com.google.auto.value.AutoValue; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Interner; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -36,15 +34,6 @@ @AutoValue public abstract class RepositoryMapping { - // All repositories generated by a module extension have the same repository mapping - // entries. Without interning, if a module extension generates N repositories, each such - // repository would have its own copy with (more than) N entries, resulting in memory usage that - // is quadratic in N. - // Note: We intern the entries, not the RepositoryMapping itself, because the latter also includes - // the owner repo, which differs between extension repos. - private static final Interner> ENTRIES_INTERNER = - BlazeInterners.newWeakInterner(); - // Always fallback to the requested name public static final RepositoryMapping ALWAYS_FALLBACK = createAllowingFallback(ImmutableMap.of()); @@ -71,8 +60,7 @@ public static RepositoryMapping createAllowingFallback(Map entries, RepositoryName ownerRepo) { - return new AutoValue_RepositoryMapping( - ENTRIES_INTERNER.intern(ImmutableMap.copyOf(entries)), ownerRepo); + return new AutoValue_RepositoryMapping(ImmutableMap.copyOf(entries), ownerRepo); } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java index 69323adcd9b277..ee6ea36772edef 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java @@ -18,8 +18,8 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelDepGraphValue; import com.google.devtools.build.lib.bazel.bzlmod.Module; import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionId; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesValue; import com.google.devtools.build.lib.bazel.bzlmod.ModuleKey; -import com.google.devtools.build.lib.bazel.bzlmod.SingleExtensionEvalValue; import com.google.devtools.build.lib.bazel.bzlmod.Version; import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.cmdline.RepositoryMapping; @@ -141,14 +141,16 @@ public SkyValue compute(SkyKey skyKey, Environment env) maybeGetModuleExtensionForRepo(repositoryName, bazelDepGraphValue); if (moduleExtensionId.isPresent()) { - SingleExtensionEvalValue extensionEvalValue = - (SingleExtensionEvalValue) - env.getValue(SingleExtensionEvalValue.key(moduleExtensionId.get())); - if (extensionEvalValue == null) { + var repoMappingEntriesValue = + (ModuleExtensionRepoMappingEntriesValue) + env.getValue(ModuleExtensionRepoMappingEntriesValue.key(moduleExtensionId.get())); + if (repoMappingEntriesValue == null) { return null; } - return computeForModuleExtensionRepo( - repositoryName, moduleExtensionId.get(), extensionEvalValue, bazelDepGraphValue); + return RepositoryMappingValue.createForBzlmodRepo( + RepositoryMapping.create(repoMappingEntriesValue.getEntries(), repositoryName), + repoMappingEntriesValue.getModuleKey().getName(), + repoMappingEntriesValue.getModuleKey().getVersion()); } } @@ -192,36 +194,6 @@ private Optional computeForBazelModuleRepo( module.getVersion())); } - /** - * Calculates repo mappings for a repo generated from a module extension. Such a repo can see all - * repos generated by the same module extension, as well as all repos that the Bazel module - * hosting the extension can see (see above). - */ - private RepositoryMappingValue computeForModuleExtensionRepo( - RepositoryName repositoryName, - ModuleExtensionId extensionId, - SingleExtensionEvalValue extensionEvalValue, - BazelDepGraphValue bazelDepGraphValue) { - // Find the key of the module containing this extension. This will be used to compute additional - // mappings -- any repo generated by an extension contained in the module "foo" can additionally - // see all repos that "foo" can see. - ModuleKey moduleKey = - bazelDepGraphValue - .getCanonicalRepoNameLookup() - .get(extensionId.getBzlFileLabel().getRepository()); - Module module = bazelDepGraphValue.getDepGraph().get(moduleKey); - // NOTE(wyv): This means that if "foo" has a bazel_dep with the repo name "bar", and the - // extension generates an internal repo name "bar", then within a repo generated by the - // extension, "bar" will refer to the latter. We should explore a way to differentiate between - // the two to avoid any surprises. - return RepositoryMappingValue.createForBzlmodRepo( - RepositoryMapping.create( - extensionEvalValue.getCanonicalRepoNameToInternalNames().inverse(), repositoryName) - .withAdditionalMappings(bazelDepGraphValue.getFullRepoMapping(moduleKey)), - module.getName(), - module.getVersion()); - } - /** * Calculate repo mappings for a repo generated from WORKSPACE. Such a repo is not subject to * strict deps, and can additionally see all repos that the root module can see. diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java index fbb723db80c435..a6398ead1866ba 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java @@ -157,6 +157,9 @@ public final class SkyFunctions { SkyFunctionName.createHermetic("BAZEL_FETCH_ALL"); public static final SkyFunctionName REPO_SPEC = SkyFunctionName.createNonHermetic("REPO_SPEC"); + public static final SkyFunctionName MODULE_EXTENSION_REPO_MAPPING_ENTRIES = + SkyFunctionName.createHermetic("MODULE_EXTENSION_REPO_MAPPING_ENTRIES"); + public static Predicate isSkyFunction(SkyFunctionName functionName) { return key -> key.functionName().equals(functionName); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java index e49ea3b7c1168d..8eec78c6461dfa 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelLockFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.FakeRegistry; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.NonRegistryOverride; import com.google.devtools.build.lib.bazel.bzlmod.RepoSpecFunction; @@ -176,6 +177,9 @@ public ImmutableMap getSkyFunctions(BlazeDirectori new SingleExtensionEvalFunction(directories, ImmutableMap::of, downloadManager)) .put(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(FakeRegistry.DEFAULT_FACTORY)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java index f563b3b9a564c2..38b058339926aa 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java @@ -130,6 +130,9 @@ public void setup() throws Exception { .put(SkyFunctions.BAZEL_DEP_GRAPH, new BazelDepGraphFunction()) .put(SkyFunctions.BAZEL_MODULE_RESOLUTION, resolutionFunctionMock) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction( diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java index 25cfa1eeff6c2d..54c00ba78aa153 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java @@ -157,6 +157,9 @@ public void setup() throws Exception { new ModuleFileFunction(registryFactory, rootDirectory, ImmutableMap.of())) .put(SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(rootDirectory)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction( diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java index aeceea95a65426..63fbbd4e09656d 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java @@ -116,6 +116,9 @@ public void setup() throws Exception { .put(SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(rootDirectory)) .put(SkyFunctions.BAZEL_MODULE_RESOLUTION, new BazelModuleResolutionFunction()) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java index 992aef9ce40766..010b56d916b593 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java @@ -131,6 +131,9 @@ public void setup() throws Exception { SkyFunctions.MODULE_FILE, new ModuleFileFunction(registryFactory, workspaceRoot, ImmutableMap.of())) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java index 24b262b7b857ff..399e2ca1e23cee 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java @@ -185,6 +185,9 @@ private void setUpWithBuiltinModules(ImmutableMap b BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java index d57f14e5f2bbc9..42a814e9070c22 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java @@ -266,6 +266,9 @@ public void setup() throws Exception { .put(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) .put(SkyFunctions.SINGLE_EXTENSION_EVAL, singleExtensionEvalFunction) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java index 4b68069d28e856..474654691e51bc 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java @@ -154,6 +154,9 @@ private void setUpWithBuiltinModules(ImmutableMap b BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java index b4af3fe4e96c05..95166b3511fe52 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.bazel.bzlmod.FakeRegistry; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.RepoSpecFunction; import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil; @@ -258,6 +259,9 @@ public void setupDelegator() throws Exception { BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of())))