From 0ea070be02e21c2418e967e3398251c3abba73e8 Mon Sep 17 00:00:00 2001 From: aiuto Date: Thu, 1 Dec 2022 08:37:28 -0500 Subject: [PATCH] Backport recent package metadata and license check capabilities from Bazel 6.x. (#16892) More context: https://docs.google.com/document/d/1uyJjkKbE8kV8EinakaR9q-Un25zCukhoH_dRBkWHSKQ/edit# 1. Rename default_applicable_licenses to default_package_metadata. Leave default_applicable_licenses as an alias. Don't allow both to be set. Pick: https://github.com/bazelbuild/bazel/commit/ace99b575fe1e43f7591b75cf5d1c867175f9980 2. Improve the check for being a package metadata rule This allows the refactoring which will happen after default_applicable_licenses is renamed to default_package_metadata. The current behavior is intended to prevent `applicable_licenses` from being set on a `license` rule. The required behavior is that we don't set `applicable_licenses` on any of the metadata rules. Pick: https://github.com/bazelbuild/bazel/commit/bbc221f60bc8c9177470529d85c3e47a5d9aaf21 --- .../lib/analysis/LicensesProviderImpl.java | 2 +- .../lib/packages/DefaultPackageArguments.java | 63 ++++++++++++++----- .../devtools/build/lib/packages/Package.java | 22 +++---- .../devtools/build/lib/packages/Rule.java | 2 +- .../build/lib/packages/RuleClass.java | 59 +++++++++-------- 5 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProviderImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProviderImpl.java index 36320ed5b2a336..63b33b53ade1c6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProviderImpl.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProviderImpl.java @@ -68,7 +68,7 @@ public static LicensesProvider of(RuleContext ruleContext) { ListMultimap configuredMap = ruleContext.getConfiguredTargetMap(); - if (rule.getRuleClassObject().isBazelLicense()) { + if (rule.getRuleClassObject().isPackageMetadataRule()) { // Don't crawl a new-style license, it's effectively a leaf. // The representation of the new-style rule is unfortunately hardcoded here, // but this is code in the old-style licensing path that will ultimately be removed. diff --git a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java index 4ec2aef24bdd66..927fd463dea8bb 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java +++ b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.License.DistributionType; +import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code; import java.util.List; import java.util.Set; import net.starlark.java.eval.EvalException; @@ -30,15 +31,16 @@ private DefaultPackageArguments() {} /** Returns the default set of {@link PackageArgument}s. */ static ImmutableList> get() { return ImmutableList.of( - new DefaultDeprecation(), - new DefaultDistribs(), - new DefaultApplicableLicenses(), - new DefaultLicenses(), - new DefaultTestOnly(), - new DefaultVisibility(), - new Features(), - new DefaultCompatibleWith(), - new DefaultRestrictedTo()); + new DefaultDeprecation(), + new DefaultDistribs(), + new DefaultApplicableLicenses(), + new DefaultPackageMetadata(), + new DefaultLicenses(), + new DefaultTestOnly(), + new DefaultVisibility(), + new Features(), + new DefaultCompatibleWith(), + new DefaultRestrictedTo()); } private static class DefaultVisibility extends PackageArgument> { @@ -96,17 +98,48 @@ protected void process(Package.Builder pkgBuilder, Location location, * specified. */ private static class DefaultApplicableLicenses extends PackageArgument> { - private static final String DEFAULT_APPLICABLE_LICENSES_ATTRIBUTE = - "default_applicable_licenses"; - private DefaultApplicableLicenses() { - super(DEFAULT_APPLICABLE_LICENSES_ATTRIBUTE, BuildType.LABEL_LIST); + super("default_applicable_licenses", BuildType.LABEL_LIST); + } + + @Override + protected void process(Package.Builder pkgBuilder, Location location, List