Add `--incompatible_no_package_distribs` flag to disable `package(distribs=...)`.
This flag guards only package(distribs). The distribs() top level rule is still allowed.
RELNOTES: NONE
PiperOrigin-RevId: 561349658
Change-Id: I7e284792a576e725cabd0c4adee033ba0b471395
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageCallable.java b/src/main/java/com/google/devtools/build/lib/packages/PackageCallable.java
index 3fae8da..50280a0 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageCallable.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageCallable.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.packages;
+import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import java.util.Map;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkMethod;
@@ -49,8 +50,15 @@
}
PackageArgs.Builder pkgArgsBuilder = PackageArgs.builder();
+ boolean disallowDistribs =
+ thread.getSemantics().getBool(BuildLanguageOptions.INCOMPATIBLE_NO_PACKAGE_DISTRIBS);
for (Map.Entry<String, Object> kwarg : kwargs.entrySet()) {
String name = kwarg.getKey();
+ if (disallowDistribs && name.equals("distribs")) {
+ throw Starlark.errorf(
+ "'package(distribs=...)' is not allowed when --incompatible_no_package_distribs is"
+ + " set");
+ }
Object rawValue = kwarg.getValue();
processParam(name, rawValue, pkgBuilder, pkgArgsBuilder);
}
@@ -65,6 +73,7 @@
protected void processParam(
String name, Object rawValue, Package.Builder pkgBuilder, PackageArgs.Builder pkgArgsBuilder)
throws EvalException {
+
PackageArgs.processParam(
name,
rawValue,
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 3ce0c64..03cc609 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
@@ -517,6 +517,17 @@
help = "If set to true, disables the function `attr.license`.")
public boolean incompatibleNoAttrLicense;
+ // TODO(aiuto): Short lived flag to guard removal of package(distribs)
+ // The code base cleanup should be quick, then this can go to graveyard quickly.
+ @Option(
+ name = "incompatible_no_package_distribs",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ help = "If set to true, disables the `package(distribs=...)`.")
+ public boolean incompatibleNoPackageDistribs;
+
@Option(
name = "incompatible_no_implicit_file_export",
defaultValue = "false",
@@ -762,6 +773,7 @@
.setBool(INCOMPATIBLE_NEW_ACTIONS_API, incompatibleNewActionsApi)
.setBool(INCOMPATIBLE_NO_ATTR_LICENSE, incompatibleNoAttrLicense)
.setBool(INCOMPATIBLE_NO_IMPLICIT_FILE_EXPORT, incompatibleNoImplicitFileExport)
+ .setBool(INCOMPATIBLE_NO_PACKAGE_DISTRIBS, incompatibleNoPackageDistribs)
.setBool(INCOMPATIBLE_NO_RULE_OUTPUTS_PARAM, incompatibleNoRuleOutputsParam)
.setBool(INCOMPATIBLE_RUN_SHELL_COMMAND_STRING, incompatibleRunShellCommandString)
.setBool(INCOMPATIBLE_STRUCT_HAS_NO_METHODS, incompatibleStructHasNoMethods)
@@ -864,6 +876,7 @@
"+incompatible_java_common_parameters";
public static final String INCOMPATIBLE_NEW_ACTIONS_API = "+incompatible_new_actions_api";
public static final String INCOMPATIBLE_NO_ATTR_LICENSE = "+incompatible_no_attr_license";
+ public static final String INCOMPATIBLE_NO_PACKAGE_DISTRIBS = "-incompatible_no_package_distribs";
public static final String INCOMPATIBLE_NO_IMPLICIT_FILE_EXPORT =
"-incompatible_no_implicit_file_export";
public static final String INCOMPATIBLE_NO_RULE_OUTPUTS_PARAM =