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 =