@@ -261,6 +261,33 @@ def process_rollup_summary(instance, *, row_dict: dict, is_boot_row: bool) -> No
261261 platforms_failing .add (test_platform )
262262
263263
264+ def _ensure_issue_in_table (
265+ * ,
266+ instance ,
267+ issue_id : str ,
268+ issue_version : int ,
269+ issue_comment : str | None ,
270+ issue_report_url : str | None ,
271+ is_boot_row : bool ,
272+ ) -> Issue :
273+ if is_boot_row :
274+ table : IssueDict = instance .boot_issues_dict
275+ else :
276+ table : IssueDict = instance .test_issues_dict
277+
278+ issue : Issue | None = table .get ((issue_id , issue_version ))
279+ if issue is None :
280+ issue = create_issue_typed (
281+ issue_id = issue_id ,
282+ issue_version = issue_version ,
283+ issue_comment = issue_comment ,
284+ issue_report_url = issue_report_url ,
285+ starting_count_status = None ,
286+ )
287+ table [(issue_id , issue_version )] = issue
288+ return issue
289+
290+
264291def process_rollup_issues (instance , * , row_dict : dict , is_boot_row : bool ) -> None :
265292 """Accumulate issue information from a rollup row."""
266293 issue_id = row_dict .get ("issue_id" )
@@ -282,30 +309,17 @@ def process_rollup_issues(instance, *, row_dict: dict, is_boot_row: bool) -> Non
282309 ]
283310
284311 if test_issue_id and test_issue_version is not None and can_insert_issue :
285- table : IssueDict = (
286- instance .boot_issues_dict if is_boot_row else instance .test_issues_dict
312+ current_issue = _ensure_issue_in_table (
313+ instance = instance ,
314+ issue_id = test_issue_id ,
315+ issue_version = test_issue_version ,
316+ issue_comment = issue_comment ,
317+ issue_report_url = issue_report_url ,
318+ is_boot_row = is_boot_row ,
287319 )
288- current_issue : Issue | None = table .get ((test_issue_id , test_issue_version ))
289- if current_issue :
290- for status , count in failure_counts :
291- for _ in range (count ):
292- current_issue .incidents_info .increment (status )
293- else :
294- first_status = next ((s for s , c in failure_counts if c > 0 ), None )
295- table [(test_issue_id , test_issue_version )] = create_issue_typed (
296- issue_id = test_issue_id ,
297- issue_version = test_issue_version ,
298- issue_comment = issue_comment ,
299- issue_report_url = issue_report_url ,
300- starting_count_status = first_status ,
301- )
302- for status , count in failure_counts :
303- remaining = count - 1 if status == first_status else count
304- for _ in range (max (0 , remaining )):
305- table [(test_issue_id , test_issue_version )].incidents_info .increment (
306- status
307- )
308320
321+ for status , count in failure_counts :
322+ current_issue .incidents_info .increment (status , count )
309323 elif row_dict .get ("issue_uncategorized" , False ):
310324 status_filter = _get_rollup_status_filter (instance , is_boot_row = is_boot_row )
311325 if not status_filter or "FAIL" in status_filter :
0 commit comments