Improve constraints error messaging:
- Show what the declared constraints actually are
- Fix a bug where the "culprit target" for a select-caused failure is missed because the offending target removes environment "B fulfills A" instead of "A" directly.
- For select-caused failures, provide more details on what failed and how to diagnose
- Added ConstraintsTest back to CI (I guess it fell out?)
- Remove duplicates from environment lists (["a", "b", "a"] -> ["a", "b"])
I also considered adding constraints info output to cquery. But I opted for this approach because in the common case where constraint enforcement fails analysis, cquery wouldn't finish.
PiperOrigin-RevId: 351389208
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index cac212e4..f5df8ce 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -43,6 +43,7 @@
import com.google.devtools.build.lib.analysis.config.ConfigurationResolver.TopLevelTargetsAndConfigsResult;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.constraints.PlatformRestrictionsResult;
+import com.google.devtools.build.lib.analysis.constraints.RuleContextConstraintSemantics;
import com.google.devtools.build.lib.analysis.constraints.TopLevelConstraintSemantics;
import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory;
import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
@@ -434,6 +435,7 @@
TopLevelConstraintSemantics topLevelConstraintSemantics =
new TopLevelConstraintSemantics(
+ (RuleContextConstraintSemantics) ruleClassProvider.getConstraintSemantics(),
skyframeExecutor.getPackageManager(),
input -> skyframeExecutor.getConfiguration(eventHandler, input),
eventHandler);