Don't crash if no cycle reporter can handle a found cycle. We can display a (non-ideal) version and file a bug report.
PiperOrigin-RevId: 295789287
diff --git a/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java b/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
index 68ff579..0637dd6 100644
--- a/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
+++ b/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
@@ -15,6 +15,8 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
/**
@@ -83,8 +85,15 @@
return;
}
}
- throw new IllegalStateException(
- printArbitraryCycle(topLevelKey, cycleInfo, alreadyReported) + "\n" + cycleReporters);
+
+ // No proper cycle reporter could be found. Blaze bug! Not fatal, though.
+ String rawCycle = printArbitraryCycle(topLevelKey, cycleInfo, alreadyReported);
+ eventHandler.handle(
+ Event.error(
+ "Cycle detected but could not be properly displayed due to an internal problem. Please"
+ + " file an issue. Raw display: "
+ + rawCycle));
+ BugReport.sendBugReport(new IllegalStateException(rawCycle + "\n" + cycleReporters));
}
private static String printArbitraryCycle(