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 db18bf99a34228..c9f8fb723857dc 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 @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.bazel; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Supplier; @@ -162,11 +163,19 @@ public class BazelRepositoryModule extends BlazeModule { @Nullable private CredentialModule credentialModule; + private ImmutableMap builtinModules = null; + public BazelRepositoryModule() { this.starlarkRepositoryFunction = new StarlarkRepositoryFunction(downloadManager); this.repositoryHandlers = repositoryRules(); } + @VisibleForTesting + public BazelRepositoryModule(ImmutableMap builtinModules) { + this(); + this.builtinModules = builtinModules; + } + private static DetailedExitCode detailedExitCode(String message, ExternalRepository.Code code) { return DetailedExitCode.of( FailureDetail.newBuilder() @@ -234,37 +243,39 @@ public void workspaceInit( singleExtensionEvalFunction = new SingleExtensionEvalFunction(directories, clientEnvironmentSupplier, downloadManager); - ImmutableMap builtinModules = - ImmutableMap.of( - // @bazel_tools is a special repo that we pull from the extracted install dir. - "bazel_tools", - LocalPathOverride.create( - directories.getEmbeddedBinariesRoot().getChild("embedded_tools").getPathString()), - // @local_config_platform is currently generated by the native repo rule - // local_config_platform - // It has to be a special repo for now because: - // - It's embedded in local_config_platform.WORKSPACE and depended on by many - // toolchains. - // - The canonical name "local_config_platform" is hardcoded in Bazel code. - // See {@link PlatformOptions} - "local_config_platform", - new NonRegistryOverride() { - @Override - public RepoSpec getRepoSpec(RepositoryName repoName) { - return RepoSpec.builder() - .setRuleClassName("local_config_platform") - .setAttributes( - AttributeValues.create(ImmutableMap.of("name", repoName.getName()))) - .build(); - } - - @Override - public ResolutionReason getResolutionReason() { - // NOTE: It is not exactly a LOCAL_PATH_OVERRIDE, but there is no inspection - // ResolutionReason for builtin modules - return ResolutionReason.LOCAL_PATH_OVERRIDE; - } - }); + if (builtinModules == null) { + builtinModules = + ImmutableMap.of( + // @bazel_tools is a special repo that we pull from the extracted install dir. + "bazel_tools", + LocalPathOverride.create( + directories.getEmbeddedBinariesRoot().getChild("embedded_tools").getPathString()), + // @local_config_platform is currently generated by the native repo rule + // local_config_platform + // It has to be a special repo for now because: + // - It's embedded in local_config_platform.WORKSPACE and depended on by many + // toolchains. + // - The canonical name "local_config_platform" is hardcoded in Bazel code. + // See {@link PlatformOptions} + "local_config_platform", + new NonRegistryOverride() { + @Override + public RepoSpec getRepoSpec(RepositoryName repoName) { + return RepoSpec.builder() + .setRuleClassName("local_config_platform") + .setAttributes( + AttributeValues.create(ImmutableMap.of("name", repoName.getName()))) + .build(); + } + + @Override + public ResolutionReason getResolutionReason() { + // NOTE: It is not exactly a LOCAL_PATH_OVERRIDE, but there is no inspection + // ResolutionReason for builtin modules + return ResolutionReason.LOCAL_PATH_OVERRIDE; + } + }); + } builder .addSkyFunction(SkyFunctions.REPOSITORY_DIRECTORY, repositoryDelegatorFunction) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java index 271a077925ed79..4a7b597f49b498 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java @@ -15,6 +15,8 @@ package com.google.devtools.build.lib.bazel.bzlmod; +import static com.google.common.collect.ImmutableMap.toImmutableMap; + import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -49,6 +51,32 @@ public static BazelDepGraphValue create( extensionUniqueNames); } + public static BazelDepGraphValue createEmptyDepGraph() { + Module root = + Module.builder() + .setName("") + .setVersion(Version.EMPTY) + .setRepoName("") + .setKey(ModuleKey.ROOT) + .setExtensionUsages(ImmutableList.of()) + .setExecutionPlatformsToRegister(ImmutableList.of()) + .setToolchainsToRegister(ImmutableList.of()) + .build(); + + ImmutableMap emptyDepGraph = ImmutableMap.of(ModuleKey.ROOT, root); + + ImmutableMap canonicalRepoNameLookup = + emptyDepGraph.keySet().stream() + .collect(toImmutableMap(ModuleKey::getCanonicalRepoName, key -> key)); + + return BazelDepGraphValue.create( + emptyDepGraph, + canonicalRepoNameLookup, + ImmutableList.of(), + ImmutableTable.of(), + ImmutableMap.of()); + } + /** * The post-selection dep graph. Must have BFS iteration order, starting from the root module. For * any KEY in the returned map, it's guaranteed that {@code depGraph[KEY].getKey() == KEY}. diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java index e288f72522fd5b..8f3d8d738a2b0b 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java @@ -197,7 +197,7 @@ public final class BuildLanguageOptions extends OptionsBase { @Option( name = "enable_bzlmod", oldName = "experimental_enable_bzlmod", - defaultValue = "false", + defaultValue = "true", documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, effectTags = OptionEffectTag.LOADING_AND_ANALYSIS, help = @@ -821,7 +821,7 @@ public StarlarkSemantics toStarlarkSemantics() { public static final String EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS = "-experimental_enable_android_migration_apis"; public static final String EXPERIMENTAL_ENABLE_SCL_DIALECT = "-experimental_enable_scl_dialect"; - public static final String ENABLE_BZLMOD = "-enable_bzlmod"; + public static final String ENABLE_BZLMOD = "+enable_bzlmod"; public static final String EXPERIMENTAL_ISOLATED_EXTENSION_USAGES = "-experimental_isolated_extension_usages"; public static final String INCOMPATIBLE_EXISTING_RULES_IMMUTABLE_VIEW = 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 a23e2a74e4fe57..69323adcd9b277 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 @@ -60,6 +60,10 @@ public SkyValue compute(SkyKey skyKey, Environment env) if (enableBzlmod) { if (StarlarkBuiltinsValue.isBuiltinsRepo(repositoryName)) { + // If tools repo is not set, repo mapping for @_builtins should be always fallback. + if (ruleClassProvider.getToolsRepository() == null) { + return RepositoryMappingValue.createForWorkspaceRepo(RepositoryMapping.ALWAYS_FALLBACK); + } // Builtins .bzl files should use the repo mapping of @bazel_tools, to get access to repos // such as @platforms. RepositoryMappingValue bazelToolsMapping = diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 5b3beea71a4279..12d2edbed166b3 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -99,6 +99,7 @@ import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.constraints.RuleContextConstraintSemantics; import com.google.devtools.build.lib.analysis.producers.ConfiguredTargetAndDataProducer; +import com.google.devtools.build.lib.bazel.bzlmod.BazelDepGraphValue; import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.bazel.repository.RepositoryOptions; import com.google.devtools.build.lib.bugreport.BugReporter; @@ -672,6 +673,16 @@ private ImmutableMap skyFunctions() { throw new IllegalStateException("supposed to be unused"); }); map.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction(externalPackageHelper)); + // Inject an empty default BAZEL_DEP_GRAPH SkyFunction for Blaze, it'll be overridden by + // BazelRepositoryModule in Bazel + map.put( + SkyFunctions.BAZEL_DEP_GRAPH, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BazelDepGraphValue.createEmptyDepGraph(); + } + }); map.put( BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD index 9ba1d3967aa830..eb62abe0c3e701 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD @@ -80,6 +80,9 @@ java_library( ":AbstractPackageLoader", "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", "//src/main/java/com/google/devtools/build/lib/bazel:repository_module", + "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:registry", + "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:resolution_impl", + "//src/main/java/com/google/devtools/build/lib/bazel/repository:repository_options", "//src/main/java/com/google/devtools/build/lib/bazel/repository/cache", "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader", "//src/main/java/com/google/devtools/build/lib/bazel/repository/starlark", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java index 3561a99096cd9c..81338f68375501 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java @@ -18,6 +18,14 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.bazel.BazelRepositoryModule; +import com.google.devtools.build.lib.bazel.bzlmod.BazelDepGraphFunction; +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.ModuleFileFunction; +import com.google.devtools.build.lib.bazel.bzlmod.RegistryFactory; +import com.google.devtools.build.lib.bazel.bzlmod.RegistryFactoryImpl; +import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil; +import com.google.devtools.build.lib.bazel.repository.RepositoryOptions; import com.google.devtools.build.lib.bazel.repository.cache.RepositoryCache; import com.google.devtools.build.lib.bazel.repository.downloader.DownloadManager; import com.google.devtools.build.lib.bazel.repository.downloader.HttpDownloader; @@ -98,7 +106,23 @@ private Builder(Root workspaceDir, Path installBase, Path outputBase, AtomicBool RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, Optional.empty()), PrecomputedValue.injected( RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING, - RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY)); + RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY), + PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of()), + PrecomputedValue.injected( + RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_CONFIGURING, + RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY), + PrecomputedValue.injected(ModuleFileFunction.REGISTRIES, ImmutableList.of()), + PrecomputedValue.injected(ModuleFileFunction.IGNORE_DEV_DEPS, false), + PrecomputedValue.injected( + BazelModuleResolutionFunction.CHECK_DIRECT_DEPENDENCIES, + RepositoryOptions.CheckDirectDepsMode.OFF), + PrecomputedValue.injected( + BazelModuleResolutionFunction.BAZEL_COMPATIBILITY_MODE, + RepositoryOptions.BazelCompatibilityMode.OFF), + PrecomputedValue.injected( + BazelLockFileFunction.LOCKFILE_MODE, RepositoryOptions.LockfileMode.OFF), + PrecomputedValue.injected( + YankedVersionsUtil.ALLOWED_YANKED_VERSIONS, ImmutableList.of())); } @Override @@ -107,6 +131,19 @@ public BazelPackageLoader buildImpl() { RepositoryCache repositoryCache = new RepositoryCache(); HttpDownloader httpDownloader = new HttpDownloader(); DownloadManager downloadManager = new DownloadManager(repositoryCache, httpDownloader); + RegistryFactory registryFactory = + new RegistryFactoryImpl( + directories.getWorkspace(), downloadManager, Suppliers.ofInstance(ImmutableMap.of())); + + // Allow tests to override SkyFunctions.MODULE_FILE to use fake registry + if (!this.extraSkyFunctions.containsKey(SkyFunctions.MODULE_FILE)) { + addExtraSkyFunctions( + ImmutableMap.of( + SkyFunctions.MODULE_FILE, + new ModuleFileFunction( + registryFactory, directories.getWorkspace(), ImmutableMap.of()))); + } + addExtraSkyFunctions( ImmutableMap.builder() .put( @@ -129,7 +166,9 @@ public BazelPackageLoader buildImpl() { ImmutableMap::of, directories, EXTERNAL_PACKAGE_HELPER)) - .build()); + .put(SkyFunctions.BAZEL_DEP_GRAPH, new BazelDepGraphFunction()) + .put(SkyFunctions.BAZEL_MODULE_RESOLUTION, new BazelModuleResolutionFunction()) + .buildOrThrow()); return new BazelPackageLoader(this); } diff --git a/src/main/starlark/tests/builtins_bzl/cc_builtin_tests.sh b/src/main/starlark/tests/builtins_bzl/cc_builtin_tests.sh index 3cd8d1dd6cfd04..9d3c5ee57b02c6 100755 --- a/src/main/starlark/tests/builtins_bzl/cc_builtin_tests.sh +++ b/src/main/starlark/tests/builtins_bzl/cc_builtin_tests.sh @@ -52,6 +52,7 @@ msys*) esac # TODO: cc_shared_library doesn't work well with Bzlmod. +# https://github.com/bazelbuild/bazel/issues/19822 disable_bzlmod function test_starlark_cc() { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java index fec50b194220de..d6d2d283a8bb95 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java @@ -139,6 +139,7 @@ public void setupMockClient(MockToolsConfig config, List workspaceConten config.create("protobuf_workspace/WORKSPACE"); config.create("protobuf_workspace/MODULE.bazel", "module(name='com_google_protobuf')"); config.overwrite("WORKSPACE", workspaceContents.toArray(new String[0])); + config.overwrite("MODULE.bazel"); /* The rest of platforms is initialized in {@link MockPlatformSupport}. */ config.create("platforms_workspace/WORKSPACE", "workspace(name = 'platforms')"); config.create("platforms_workspace/MODULE.bazel", "module(name = 'platforms')"); 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 fdcfa581696e8c..1a832dd4a3a2d3 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 @@ -27,6 +27,10 @@ import com.google.devtools.build.lib.bazel.bzlmod.RepoSpecFunction; import com.google.devtools.build.lib.bazel.bzlmod.SingleExtensionEvalFunction; import com.google.devtools.build.lib.bazel.bzlmod.SingleExtensionUsagesFunction; +import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil; +import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.BazelCompatibilityMode; +import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.CheckDirectDepsMode; +import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.LockfileMode; import com.google.devtools.build.lib.bazel.repository.downloader.DownloadManager; import com.google.devtools.build.lib.bazel.repository.starlark.StarlarkRepositoryFunction; import com.google.devtools.build.lib.bazel.rules.android.AndroidNdkRepositoryFunction; @@ -43,6 +47,7 @@ import com.google.devtools.build.lib.rules.repository.RepositoryFunction; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.ClientEnvironmentFunction; +import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.skyframe.packages.PackageFactoryBuilderWithSkyframeForTesting; import com.google.devtools.build.lib.testutil.TestConstants; @@ -52,6 +57,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import org.mockito.Mockito; @@ -69,6 +75,16 @@ public static AnalysisMock get() { } } + public static AnalysisMock getAnalysisMockWithoutBuiltinModules() { + return new AnalysisMock.Delegate(AnalysisMock.get()) { + @Override + public ImmutableMap getBuiltinModules( + BlazeDirectories directories) { + return ImmutableMap.of(); + } + }; + } + @Override public String getProductName() { return TestConstants.PRODUCT_NAME; @@ -82,7 +98,8 @@ public ImmutableList getEmbeddedTools() { public PackageFactoryBuilderWithSkyframeForTesting getPackageFactoryBuilderForTesting( BlazeDirectories directories) { return super.getPackageFactoryBuilderForTesting(directories) - .setExtraSkyFunctions(getSkyFunctions(directories)); + .setExtraSkyFunctions(getSkyFunctions(directories)) + .setExtraPrecomputeValues(getPrecomputedValues()); } /** @@ -90,7 +107,7 @@ public PackageFactoryBuilderWithSkyframeForTesting getPackageFactoryBuilderForTe * configuration. */ public void setupMockClient(MockToolsConfig mockToolsConfig) throws IOException { - List workspaceContents = getWorkspaceContents(mockToolsConfig); + ImmutableList workspaceContents = getWorkspaceContents(mockToolsConfig); setupMockClient(mockToolsConfig, workspaceContents); } @@ -165,6 +182,29 @@ public ImmutableMap getSkyFunctions(BlazeDirectori .buildOrThrow(); } + public ImmutableList getPrecomputedValues() { + // PrecomputedValues required by SkyFunctions in getSkyFunctions() + return ImmutableList.of( + PrecomputedValue.injected(PrecomputedValue.REPO_ENV, ImmutableMap.of()), + PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of()), + PrecomputedValue.injected( + RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, ImmutableMap.of()), + PrecomputedValue.injected( + RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, Optional.empty()), + PrecomputedValue.injected( + RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING, + RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY), + PrecomputedValue.injected(ModuleFileFunction.REGISTRIES, ImmutableList.of()), + PrecomputedValue.injected(ModuleFileFunction.IGNORE_DEV_DEPS, false), + PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of()), + PrecomputedValue.injected(YankedVersionsUtil.ALLOWED_YANKED_VERSIONS, ImmutableList.of()), + PrecomputedValue.injected( + BazelModuleResolutionFunction.CHECK_DIRECT_DEPENDENCIES, CheckDirectDepsMode.WARNING), + PrecomputedValue.injected( + BazelModuleResolutionFunction.BAZEL_COMPATIBILITY_MODE, BazelCompatibilityMode.ERROR), + PrecomputedValue.injected(BazelLockFileFunction.LOCKFILE_MODE, LockfileMode.UPDATE)); + } + // Allow subclasses to add extra repository functions. public abstract void addExtraRepositoryFunctions( ImmutableMap.Builder repositoryHandlers); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java index b5d6f3c7d245c5..d09d687dee9069 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java @@ -351,6 +351,8 @@ public void useConfiguration(String... args) throws Exception { } if (defaultFlags().contains(Flag.ENABLE_BZLMOD)) { optionsParser.parse("--enable_bzlmod"); + } else { + optionsParser.parse("--noenable_bzlmod"); } optionsParser.parse(args); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index f123d7577ce683..f3d92c2f087341 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -106,14 +106,8 @@ import com.google.devtools.build.lib.analysis.starlark.StarlarkTransition.TransitionException; import com.google.devtools.build.lib.analysis.test.BaselineCoverageAction; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesInfo; -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.ModuleFileFunction; -import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil; -import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.BazelCompatibilityMode; -import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.CheckDirectDepsMode; -import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.LockfileMode; import com.google.devtools.build.lib.buildtool.BuildRequestOptions; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.Label; @@ -299,19 +293,7 @@ public void initializeSkyframeExecutor( getOutputPath().createDirectoryAndParents(); ImmutableList extraPrecomputedValues = ImmutableList.builder() - .add(PrecomputedValue.injected(PrecomputedValue.REPO_ENV, ImmutableMap.of())) - .add(PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of())) - .add( - PrecomputedValue.injected( - RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, ImmutableMap.of())) - .add( - PrecomputedValue.injected( - RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, - Optional.empty())) - .add( - PrecomputedValue.injected( - RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING, - RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY)) + .addAll(analysisMock.getPrecomputedValues()) .add( PrecomputedValue.injected( BuildInfoCollectionFunction.BUILD_INFO_FACTORIES, @@ -319,21 +301,6 @@ public void initializeSkyframeExecutor( .add( PrecomputedValue.injected( ModuleFileFunction.REGISTRIES, ImmutableList.of(registry.getUrl()))) - .add(PrecomputedValue.injected(ModuleFileFunction.IGNORE_DEV_DEPS, false)) - .add(PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of())) - .add( - PrecomputedValue.injected( - YankedVersionsUtil.ALLOWED_YANKED_VERSIONS, ImmutableList.of())) - .add( - PrecomputedValue.injected( - BazelModuleResolutionFunction.CHECK_DIRECT_DEPENDENCIES, - CheckDirectDepsMode.WARNING)) - .add( - PrecomputedValue.injected( - BazelModuleResolutionFunction.BAZEL_COMPATIBILITY_MODE, - BazelCompatibilityMode.ERROR)) - .add( - PrecomputedValue.injected(BazelLockFileFunction.LOCKFILE_MODE, LockfileMode.UPDATE)) .addAll(extraPrecomputedValues()) .build(); PackageFactory.BuilderForTesting pkgFactoryBuilder = diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java index 93e519c49eb8db..1b024e3a27f643 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java @@ -146,10 +146,14 @@ public final void initializeSkyframeExecutor() throws Exception { PackageOptions packageOptions = Options.getDefaults(PackageOptions.class); packageOptions.showLoadingProgress = true; packageOptions.globbingThreads = 7; + BuildLanguageOptions options = Options.getDefaults(BuildLanguageOptions.class); + // TODO: enable Bzlmod for this test case + // https://github.com/bazelbuild/bazel/issues/19824 + options.enableBzlmod = false; skyframeExecutor.preparePackageLoading( pkgLocator, packageOptions, - Options.getDefaults(BuildLanguageOptions.class), + options, UUID.randomUUID(), ImmutableMap.of(), QuiescingExecutorsImpl.forTesting(), diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/KeepGoingTest.java b/src/test/java/com/google/devtools/build/lib/buildtool/KeepGoingTest.java index 41ef1e83e4f1bc..1e3dacab207847 100644 --- a/src/test/java/com/google/devtools/build/lib/buildtool/KeepGoingTest.java +++ b/src/test/java/com/google/devtools/build/lib/buildtool/KeepGoingTest.java @@ -259,7 +259,7 @@ public void testConfigurationErrorsAreToleratedWithKeepGoing() throws Exception assertBuildFailedExceptionFromBuilding( "command succeeded, but not all targets were analyzed", "//a", "//b"); events.assertContainsError( - "in srcs attribute of cc_library rule @//a:a: source file '@//a:missing.foo' is misplaced" + "in srcs attribute of cc_library rule @@//a:a: source file '@@//a:missing.foo' is misplaced" + " here"); events.assertContainsInfo("Analysis succeeded for only 1 of 2 top-level targets"); diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java index eb8a5b0176cad1..cc091df07d44ab 100644 --- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java @@ -604,7 +604,6 @@ protected BlazeRuntime.Builder getRuntimeBuilder() throws Exception { .addBlazeModule(new OutputFilteringModule()) .addBlazeModule(connectivityModule) .addBlazeModule(new SkymeldModule()) - .addBlazeModule(getMockBazelRepositoryModule()) .addBlazeModule(new CredentialModule()); getSpawnModules().forEach(builder::addBlazeModule); builder @@ -617,7 +616,10 @@ protected BlazeRuntime.Builder getRuntimeBuilder() throws Exception { builder .addBlazeModule(new NoSpawnCacheModule()) .addBlazeModule(new WorkerModule()) - .addBlazeModule(new BazelRepositoryModule()); + .addBlazeModule( + new BazelRepositoryModule(AnalysisMock.get().getBuiltinModules(directories))); + } else { + builder.addBlazeModule(getMockBazelRepositoryModule()); } return builder; } diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java index 5e0a4cbcc2c1a2..06501329e8ea6f 100644 --- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java +++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java @@ -484,11 +484,11 @@ public void testShorthandDisplayForm() throws Exception { @Test public void starlarkStrAndRepr() throws Exception { Label label = Label.parseCanonical("//x"); - assertThat(Starlark.str(label, StarlarkSemantics.DEFAULT)).isEqualTo("@//x:x"); + assertThat(Starlark.str(label, StarlarkSemantics.DEFAULT)).isEqualTo("@@//x:x"); assertThat(Starlark.repr(label)).isEqualTo("Label(\"//x:x\")"); label = Label.parseCanonical("@hello//x"); - assertThat(Starlark.str(label, StarlarkSemantics.DEFAULT)).isEqualTo("@hello//x:x"); + assertThat(Starlark.str(label, StarlarkSemantics.DEFAULT)).isEqualTo("@@hello//x:x"); assertThat(Starlark.repr(label)).isEqualTo("Label(\"@hello//x:x\")"); } @@ -497,6 +497,7 @@ public void starlarkStr_ambiguous() throws Exception { StarlarkSemantics semantics = StarlarkSemantics.builder() .setBool(BuildLanguageOptions.INCOMPATIBLE_UNAMBIGUOUS_LABEL_STRINGIFICATION, false) + .setBool(BuildLanguageOptions.ENABLE_BZLMOD, false) .build(); assertThat(Starlark.str(Label.parseCanonical("//x"), semantics)).isEqualTo("//x:x"); assertThat(Starlark.str(Label.parseCanonical("@x//y"), semantics)).isEqualTo("@x//y:y"); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java index 529d960313ffa2..2dbebbb261d025 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java @@ -15,7 +15,6 @@ import static com.google.common.truth.Truth.assertThat; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ActionKeyContext; @@ -28,10 +27,8 @@ import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; -import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.runtime.QuiescingExecutorsImpl; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.ManualClock; @@ -48,7 +45,6 @@ import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import com.google.devtools.common.options.OptionsParser; import java.nio.charset.StandardCharsets; -import java.util.Optional; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -74,7 +70,7 @@ public final void disableLogging() { @Before public final void initializeSkyframeExecutor() { - AnalysisMock analysisMock = AnalysisMock.get(); + AnalysisMock analysisMock = AnalysisMock.getAnalysisMockWithoutBuiltinModules(); ConfiguredRuleClassProvider ruleClassProvider = analysisMock.createRuleClassProvider(); BlazeDirectories directories = new BlazeDirectories( @@ -95,10 +91,7 @@ public final void initializeSkyframeExecutor() { .setExtraSkyFunctions(analysisMock.getSkyFunctions(directories)) .setSyscallCache(SyscallCache.NO_CACHE) .build(); - skyframeExecutor.injectExtraPrecomputedValues( - ImmutableList.of( - PrecomputedValue.injected( - RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, Optional.empty()))); + skyframeExecutor.injectExtraPrecomputedValues(analysisMock.getPrecomputedValues()); SkyframeExecutorTestHelper.process(skyframeExecutor); OptionsParser parser = OptionsParser.builder() diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java index 403bf501c392b0..c659e3efd29e9d 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java @@ -47,12 +47,10 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; import com.google.devtools.build.lib.packages.util.MockToolsConfig; -import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.runtime.QuiescingExecutorsImpl; import com.google.devtools.build.lib.server.FailureDetails.PackageLoading; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.PatternExpandingError; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue; import com.google.devtools.build.lib.testutil.ManualClock; @@ -80,7 +78,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -1342,7 +1339,7 @@ private static final class LoadingPhaseTester { this.workspace = fs.getPath("/workspace"); workspace.createDirectory(); mockToolsConfig = new MockToolsConfig(workspace); - AnalysisMock analysisMock = AnalysisMock.get(); + AnalysisMock analysisMock = AnalysisMock.getAnalysisMockWithoutBuiltinModules(); analysisMock.setupMockClient(mockToolsConfig); BlazeDirectories directories = new BlazeDirectories( @@ -1380,11 +1377,7 @@ private static final class LoadingPhaseTester { packageOptions.defaultVisibility = RuleVisibility.PRIVATE; packageOptions.showLoadingProgress = true; packageOptions.globbingThreads = 7; - skyframeExecutor.injectExtraPrecomputedValues( - ImmutableList.of( - PrecomputedValue.injected( - RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, - Optional.empty()))); + skyframeExecutor.injectExtraPrecomputedValues(analysisMock.getPrecomputedValues()); skyframeExecutor.preparePackageLoading( pkgLocator, packageOptions, diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java index 34fd1a27d8ea95..3c0c67efd43775 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageLoadingTest.java @@ -38,11 +38,9 @@ import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; -import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.runtime.QuiescingExecutorsImpl; import com.google.devtools.build.lib.server.FailureDetails.PackageLoading; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.MoreAsserts; @@ -55,7 +53,6 @@ import com.google.devtools.build.lib.vfs.SyscallCache; import com.google.devtools.common.options.OptionsParser; import java.io.IOException; -import java.util.Optional; import java.util.UUID; import net.starlark.java.syntax.StarlarkFile; import org.junit.Before; @@ -80,7 +77,7 @@ public final void initializeSkyframeExecutor() throws Exception { * this test performs, and the results compared to SkyFrame's result. */ private void initializeSkyframeExecutor(boolean doPackageLoadingChecks) throws Exception { - AnalysisMock analysisMock = AnalysisMock.get(); + AnalysisMock analysisMock = AnalysisMock.getAnalysisMockWithoutBuiltinModules(); ConfiguredRuleClassProvider ruleClassProvider = analysisMock.createRuleClassProvider(); BlazeDirectories directories = new BlazeDirectories( @@ -118,10 +115,7 @@ private void setUpSkyframe( BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY); packageOptions.showLoadingProgress = true; packageOptions.globbingThreads = 7; - skyframeExecutor.injectExtraPrecomputedValues( - ImmutableList.of( - PrecomputedValue.injected( - RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, Optional.empty()))); + skyframeExecutor.injectExtraPrecomputedValues(AnalysisMock.get().getPrecomputedValues()); skyframeExecutor.preparePackageLoading( pkgLocator, packageOptions, diff --git a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java index 885791607ef39e..3e6388aa44f923 100644 --- a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java +++ b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java @@ -83,7 +83,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nullable; -import net.starlark.java.eval.StarlarkSemantics; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -110,7 +109,8 @@ private static Root mockRoot() { private MemoizingEvaluator evaluator; @Before - public void createEnvironment() { + public void createEnvironment() throws Exception { + setBuildLanguageOptions("--noenable_bzlmod"); AnalysisMock analysisMock = AnalysisMock.get(); AtomicReference pkgLocator = new AtomicReference<>( @@ -187,7 +187,7 @@ public void createEnvironment() { RecordingDifferencer differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); - PrecomputedValue.STARLARK_SEMANTICS.set(differencer, StarlarkSemantics.DEFAULT); + PrecomputedValue.STARLARK_SEMANTICS.set(differencer, getStarlarkSemantics()); RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE.set( differencer, Optional.empty()); } diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/ConfigCommandTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/ConfigCommandTest.java index 568e3cba9c0f03..ffa19c58c7ac9b 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/commands/ConfigCommandTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/ConfigCommandTest.java @@ -112,6 +112,9 @@ private void analyzeTarget(String... args) throws Exception { params.addAll(TestConstants.PRODUCT_SPECIFIC_FLAGS); params.add("//test:buildme"); params.add("--nobuild"); // Execution phase isn't necessary to collect configurations. + // TODO: Enable Bzlmod for this test + // https://github.com/bazelbuild/bazel/issues/19823 + params.add("--noenable_bzlmod"); Collections.addAll(params, args); dispatcher.exec(params, "my client", outErr); } @@ -128,6 +131,9 @@ private void analyzeTargetWithTransition(String... args) throws Exception { params.addAll(TestConstants.PRODUCT_SPECIFIC_FLAGS); params.add("//test:buildme_with_transition"); params.add("--nobuild"); // Execution phase isn't necessary to collect configurations. + // TODO: Enable Bzlmod for this test + // https://github.com/bazelbuild/bazel/issues/19823 + params.add("--noenable_bzlmod"); Collections.addAll(params, args); dispatcher.exec(params, "my client", outErr); } @@ -140,6 +146,9 @@ private void analyzeTargetWithTransition(String... args) throws Exception { private RecordingOutErr callConfigCommand(String... args) throws Exception { List params = Lists.newArrayList("config"); params.add("--output=json"); + // TODO: Enable Bzlmod for this test + // https://github.com/bazelbuild/bazel/issues/19823 + params.add("--noenable_bzlmod"); Collections.addAll(params, args); RecordingOutErr recordingOutErr = new RecordingOutErr(); dispatcher.exec(params, "my client", recordingOutErr); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD index 481f0d131c00ab..f7b3148cd9cae7 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD @@ -158,6 +158,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/analysis/producers", "//src/main/java/com/google/devtools/build/lib/bazel:main", "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:common", + "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:repo_rule_value", "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:resolution", "//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:resolution_impl", "//src/main/java/com/google/devtools/build/lib/bazel/repository", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java index 8d31467af0763f..42c96505b52f69 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; @@ -57,6 +58,7 @@ import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -167,6 +169,22 @@ public final void setUp() throws Exception { ImmutableMap::of, directories, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); + skyFunctions.put( + SkyFunctions.REPOSITORY_MAPPING, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return RepositoryMappingValue.VALUE_FOR_ROOT_MODULE_WITHOUT_REPOS; + } + }); + skyFunctions.put( + BzlmodRepoRuleValue.BZLMOD_REPO_RULE, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; + } + }); RecordingDifferencer differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java index 7b6818fc8ad9f0..863fe210061a0a 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java @@ -41,6 +41,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.events.NullEventHandler; @@ -232,6 +233,22 @@ private MemoizingEvaluator makeEvaluator(ExternalFileAction externalFileAction) ImmutableMap::of, directories, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)) + .put( + SkyFunctions.REPOSITORY_MAPPING, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return RepositoryMappingValue.VALUE_FOR_ROOT_MODULE_WITHOUT_REPOS; + } + }) + .put( + BzlmodRepoRuleValue.BZLMOD_REPO_RULE, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; + } + }) .build(), differencer); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); @@ -448,6 +465,7 @@ public void testAbsoluteSymlinkToExternal() throws Exception { .containsExactly( rootedPath("WORKSPACE"), rootedPath("WORKSPACE.bazel"), + rootedPath("WORKSPACE.bzlmod"), rootedPath("a"), rootedPath(""), rootedPath("/output_base"), diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java index cba2db73ba9a31..320b8e810f0073 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; @@ -186,6 +187,22 @@ private Map createFunctionMap() { skyFunctions.put( SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); + skyFunctions.put( + SkyFunctions.REPOSITORY_MAPPING, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return RepositoryMappingValue.VALUE_FOR_ROOT_MODULE_WITHOUT_REPOS; + } + }); + skyFunctions.put( + BzlmodRepoRuleValue.BZLMOD_REPO_RULE, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; + } + }); return skyFunctions; } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java index 5775395606de9e..33aefce7415202 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.NullEventHandler; @@ -49,6 +50,7 @@ import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -123,6 +125,22 @@ public final void setUp() throws Exception { new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); skyFunctions.put( FileSymlinkCycleUniquenessFunction.NAME, new FileSymlinkCycleUniquenessFunction()); + skyFunctions.put( + SkyFunctions.REPOSITORY_MAPPING, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return RepositoryMappingValue.VALUE_FOR_ROOT_MODULE_WITHOUT_REPOS; + } + }); + skyFunctions.put( + BzlmodRepoRuleValue.BZLMOD_REPO_RULE, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; + } + }); RecordingDifferencer differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java index 988a994cf77360..92eb8143771a9f 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java @@ -497,6 +497,7 @@ public void testGlobOrderStableWithNonSkyframeAndSkyframeComponents() throws Exc ImmutableMap.of(), QuiescingExecutorsImpl.forTesting(), tsgm); + getSkyframeExecutor().injectExtraPrecomputedValues(analysisMock.getPrecomputedValues()); getSkyframeExecutor().setActionEnv(ImmutableMap.of()); assertSrcs(validPackageWithoutErrors(skyKey), "foo", "//foo:a.config", "//foo:b.txt"); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java index e5ddd59b7bb9b9..a1bd711b494814 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; +import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.clock.BlazeClock; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; @@ -64,6 +65,7 @@ import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -179,6 +181,22 @@ public final void setUp() throws Exception { ImmutableMap::of, directories, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); + skyFunctions.put( + SkyFunctions.REPOSITORY_MAPPING, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return RepositoryMappingValue.VALUE_FOR_ROOT_MODULE_WITHOUT_REPOS; + } + }); + skyFunctions.put( + BzlmodRepoRuleValue.BZLMOD_REPO_RULE, + new SkyFunction() { + @Override + public SkyValue compute(SkyKey skyKey, Environment env) { + return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; + } + }); differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java index 37a256fd6ee90a..d5766006d4fe8c 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java @@ -15,6 +15,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.skyframe.WalkableGraphUtils.exists; +import static org.junit.Assert.fail; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -32,7 +33,6 @@ import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; import com.google.devtools.build.lib.pkgcache.PackageOptions; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.runtime.QuiescingExecutorsImpl; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.SkyframeExecutorTestHelper; @@ -47,7 +47,6 @@ import com.google.devtools.build.skyframe.WalkableGraph; import com.google.devtools.common.options.Options; import java.io.IOException; -import java.util.Optional; import java.util.UUID; import org.junit.Before; import org.junit.Test; @@ -70,6 +69,7 @@ private static SkyKey getKeyForLabel(Label label) { @Before public void setUp() throws Exception { + AnalysisMock analysisMock = AnalysisMock.getAnalysisMockWithoutBuiltinModules(); BlazeDirectories directories = new BlazeDirectories( new ServerDirectories( @@ -78,11 +78,11 @@ public void setUp() throws Exception { getScratch().dir("/user_root")), rootDirectory, /* defaultSystemJavabase= */ null, - AnalysisMock.get().getProductName()); - ConfiguredRuleClassProvider ruleClassProvider = AnalysisMock.get().createRuleClassProvider(); + analysisMock.getProductName()); + ConfiguredRuleClassProvider ruleClassProvider = analysisMock.createRuleClassProvider(); PackageFactory pkgFactory = - AnalysisMock.get() + analysisMock .getPackageFactoryBuilderForTesting(directories) .build(ruleClassProvider, fileSystem); skyframeExecutor = @@ -91,7 +91,7 @@ public void setUp() throws Exception { .setFileSystem(fileSystem) .setDirectories(directories) .setActionKeyContext(new ActionKeyContext()) - .setExtraSkyFunctions(AnalysisMock.get().getSkyFunctions(directories)) + .setExtraSkyFunctions(analysisMock.getSkyFunctions(directories)) .setSyscallCache(SyscallCache.NO_CACHE) .setIgnoredPackagePrefixesFunction( new IgnoredPackagePrefixesFunction( @@ -110,15 +110,7 @@ public void setUp() throws Exception { QuiescingExecutorsImpl.forTesting(), new TimestampGranularityMonitor(null)); skyframeExecutor.setActionEnv(ImmutableMap.of()); - skyframeExecutor.injectExtraPrecomputedValues( - ImmutableList.of( - PrecomputedValue.injected( - RepositoryDelegatorFunction.RESOLVED_FILE_INSTEAD_OF_WORKSPACE, Optional.empty()), - PrecomputedValue.injected( - RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, ImmutableMap.of()), - PrecomputedValue.injected( - RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING, - RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY))); + skyframeExecutor.injectExtraPrecomputedValues(analysisMock.getPrecomputedValues()); scratch.file(ADDITIONAL_IGNORED_PACKAGE_PREFIXES_FILE_PATH_STRING); } @@ -217,7 +209,9 @@ private WalkableGraph getGraphFromPatternsEvaluation(ImmutableList patte EvaluationResult evaluationResult = skyframeExecutor.getEvaluator().evaluate(singletonTargetPattern, evaluationContext); // The evaluation has no errors if success was expected. - assertThat(evaluationResult.hasError()).isFalse(); + if (evaluationResult.hasError()) { + fail(evaluationResult.getError().toString()); + } return Preconditions.checkNotNull(evaluationResult.getWalkableGraph()); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java index 3906f229ca7a29..de83190f92f321 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java @@ -21,10 +21,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.testing.EqualsTester; -import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; -import com.google.devtools.build.lib.bazel.bzlmod.NonRegistryOverride; import com.google.devtools.build.lib.bazel.bzlmod.Version; import com.google.devtools.build.lib.cmdline.RepositoryMapping; import com.google.devtools.build.lib.cmdline.RepositoryName; @@ -62,13 +60,7 @@ private EvaluationResult eval(SkyKey key) @Override protected AnalysisMock getAnalysisMock() { // Make sure we don't have built-in modules affecting the dependency graph. - return new AnalysisMock.Delegate(super.getAnalysisMock()) { - @Override - public ImmutableMap getBuiltinModules( - BlazeDirectories directories) { - return ImmutableMap.of(); - } - }; + return AnalysisMock.getAnalysisMockWithoutBuiltinModules(); } private static RepositoryMappingValue valueForWorkspace( @@ -151,7 +143,7 @@ public void testRepoNameMapping_asRootModule() throws Exception { RepositoryName.MAIN, "aaa", RepositoryName.MAIN, - TestConstants.WORKSPACE_NAME, + TestConstants.LEGACY_WORKSPACE_NAME, RepositoryName.MAIN, "com_foo_bar_b", RepositoryName.create("bbb~1.0")), @@ -180,7 +172,7 @@ public void testRepoNameMapping_asRootModule_withOwnRepoName() throws Exception RepositoryName.MAIN, "haha", RepositoryName.MAIN, - TestConstants.WORKSPACE_NAME, + TestConstants.LEGACY_WORKSPACE_NAME, RepositoryName.MAIN, "com_foo_bar_b", RepositoryName.create("bbb~1.0")), @@ -271,7 +263,7 @@ public void testRepoNameMapping_multipleVersionOverride_fork() throws Exception RepositoryName.MAIN, "aaa", RepositoryName.MAIN, - TestConstants.WORKSPACE_NAME, + TestConstants.LEGACY_WORKSPACE_NAME, RepositoryName.MAIN, "bbb1", RepositoryName.create("bbb~1.0"), diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java index da216efac8e67b..724fa731a25675 100644 --- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleClassFunctionsTest.java @@ -3919,7 +3919,7 @@ public void testLabelWithStrictVisibility() throws Exception { .isEqualTo("external/dep~4.5"); assertThat(eval(module, "Label('@@//foo:bar').workspace_root")).isEqualTo(""); - assertThat(eval(module, "str(Label('@//foo:bar'))")).isEqualTo("@//foo:bar"); + assertThat(eval(module, "str(Label('@@//foo:bar'))")).isEqualTo("@@//foo:bar"); assertThat( assertThrows( EvalException.class, () -> eval(module, "Label('@//foo:bar').workspace_name"))) diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java index fb719021fb773c..118086d06685e2 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java @@ -55,7 +55,12 @@ private TestConstants() { /** * Default workspace name. */ - public static final String WORKSPACE_NAME = "__main__"; + public static final String WORKSPACE_NAME = "_main"; + + /** + * Legacy default workspace name. + */ + public static final String LEGACY_WORKSPACE_NAME = "__main__"; /** * Name of a class with an INSTANCE field of type AnalysisMock to be used for analysis tests. diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh index a29a3ceff54c86..8417dc11836c36 100755 --- a/src/test/shell/integration/configured_query_test.sh +++ b/src/test/shell/integration/configured_query_test.sh @@ -60,6 +60,8 @@ fi add_to_bazelrc "build --package_path=%workspace%" +# TODO: enable Bzlmod for this Test +# https://github.com/bazelbuild/bazel/issues/19823 disable_bzlmod #### TESTS #############################################################