@@ -53,6 +53,7 @@ class BEPAnalyzer:
5353 self .verbose = verbose
5454 self .failures = []
5555 self .failures_skipped = 0 # Track skipped failures due to limits
56+ self .seen_targets = set () # Track targets to avoid duplicates
5657 # Limits (bytes, counts)
5758 self .MAX_FILE_SIZE = cfg .MAX_FILE_SIZE_MB_DEFAULT * 1024 * 1024
5859 self .MAX_FAILURES = cfg .MAX_FAILURES_DEFAULT
@@ -64,6 +65,7 @@ class BEPAnalyzer:
6465 def extract_failures (self , bep_file_path : str ) -> List [Dict [str , Any ]]:
6566 """Extract failure information from a BEP protobuf file."""
6667 failures = []
68+ self .seen_targets .clear () # Reset for each extract
6769
6870 # Check file size before processing
6971 try :
@@ -98,10 +100,14 @@ class BEPAnalyzer:
98100 # Parse the message for failure events (returns a list or None)
99101 message_failures = self ._parse_build_event_for_failure (message_data )
100102 if message_failures :
101- failures .extend (message_failures )
102- if self .verbose :
103- for failure in message_failures :
104- logger .info ("Found failure: %s" , failure .get ('target' , 'Unknown' ))
103+ # Remove duplicates by target
104+ for failure in message_failures :
105+ target = failure .get ('target' , 'unknown' )
106+ if target not in self .seen_targets :
107+ self .seen_targets .add (target )
108+ failures .append (failure )
109+ if self .verbose :
110+ logger .info ("Found failure: %s" , target )
105111
106112 # Check if we hit the failure limit
107113 if len (failures ) >= self .MAX_FAILURES :
@@ -112,7 +118,12 @@ class BEPAnalyzer:
112118 break
113119 message_failures = self ._parse_build_event_for_failure (message_data )
114120 if message_failures :
115- self .failures_skipped += len (message_failures )
121+ # Count only new unique failures
122+ for failure in message_failures :
123+ target = failure .get ('target' , 'unknown' )
124+ if target not in self .seen_targets :
125+ self .seen_targets .add (target )
126+ self .failures_skipped += 1
116127
117128 except Exception as e :
118129 if self .verbose :
@@ -960,7 +971,7 @@ def main():
960971
961972 if args .verbose :
962973 logger .info ("Analyzing BEP file: %s" , args .bep_file )
963-
974+
964975 try :
965976 # Initialize analyzer with custom limits
966977 analyzer = BEPAnalyzer (verbose = args .verbose )
0 commit comments