diff --git a/site/en/external/migration.md b/site/en/external/migration.md index d860e1f894cd97..2f502e51e36f01 100644 --- a/site/en/external/migration.md +++ b/site/en/external/migration.md @@ -824,7 +824,7 @@ You can set the `dev_dependency` attribute to true for [`use_extension`](/rules/lib/globals/module#use_extension) directives so that they don't propagate to dependent projects. As the root module, you can use the [`--ignore_dev_dependency`][ignore_dev_dep_flag] flag to verify if your targets -still build without dev dependencies. +still build without dev dependencies and overrides. [ignore_dev_dep_flag]: /reference/command-line-reference#flag--ignore_dev_dependency diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java index 203d10483e40ef..cdfeb6622bc7ee 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java @@ -50,7 +50,7 @@ public class ModuleThreadContext { @Nullable private final ImmutableMap includeLabelToCompiledModuleFile; private final Map deps = new LinkedHashMap<>(); private final List extensionUsageBuilders = new ArrayList<>(); - private final Map overrides = new HashMap<>(); + private final Map overrides = new LinkedHashMap<>(); private final Map repoNameUsages = new HashMap<>(); public static ModuleThreadContext fromOrFail(StarlarkThread thread, String what) @@ -231,6 +231,9 @@ public PathFragment getCurrentModuleFilePath() { } public void addOverride(String moduleName, ModuleOverride override) throws EvalException { + if (shouldIgnoreDevDeps()) { + return; + } ModuleOverride existingOverride = overrides.putIfAbsent(moduleName, override); if (existingOverride != null) { throw Starlark.errorf("multiple overrides for dep %s found", moduleName); 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 4d2749e8c6bf6c..8fe7c00203689d 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 @@ -335,6 +335,25 @@ public void testRootModule_overrideBuiltinModule() throws Exception { assertThat(bazelToolsOverride).isEqualTo(LocalPathOverride.create("./bazel_tools_new")); } + @Test + public void testRootModule_overridesIgnoredWithIgnoreDevDependency() throws Exception { + scratch.overwriteFile( + rootDirectory.getRelative("MODULE.bazel").getPathString(), + "bazel_dep(name='aaa')", + "single_version_override(module_name='ddd',version='18')", + "local_path_override(module_name='eee',path='somewhere/else')", + "multiple_version_override(module_name='fff',versions=['1.0','2.0'])", + "archive_override(module_name='ggg',urls=['https://hello.com/world.zip'])"); + FakeRegistry registry = registryFactory.newFakeRegistry("/foo"); + ModuleFileFunction.REGISTRIES.set(differencer, ImmutableSet.of(registry.getUrl())); + ModuleFileFunction.IGNORE_DEV_DEPS.set(differencer, true); + + EvaluationResult result = + evaluator.evaluate( + ImmutableList.of(ModuleFileValue.KEY_FOR_ROOT_MODULE), evaluationContext); + assertThat(result.get(ModuleFileValue.KEY_FOR_ROOT_MODULE).getOverrides()).isEmpty(); + } + @Test public void testRootModule_include_good() throws Exception { scratch.overwriteFile(