@@ -291,6 +291,21 @@ class MinerEvaluation:
291291 # The top-level scalars above are round-level rollups of this map.
292292 repo_evaluations : Dict [str , RepoEvaluation ] = field (default_factory = dict )
293293
294+ def get_or_create_repo_evaluation (
295+ self , repo_name : str , repository_full_name : Optional [str ] = None
296+ ) -> RepoEvaluation :
297+ """Return the repo evaluation stored under ``repo_name``, creating one if absent.
298+
299+ ``repo_name`` is the map key (a lowercased repository_full_name). When a
300+ new entry is created, ``repository_full_name`` seeds it, defaulting to
301+ ``repo_name`` when not supplied.
302+ """
303+ repo_eval = self .repo_evaluations .get (repo_name )
304+ if repo_eval is None :
305+ repo_eval = RepoEvaluation (repository_full_name = repository_full_name or repo_name )
306+ self .repo_evaluations [repo_name ] = repo_eval
307+ return repo_eval
308+
294309 @property
295310 def total_prs (self ) -> int :
296311 return self .total_merged_prs + self .total_closed_prs + self .total_open_prs
@@ -578,10 +593,7 @@ def store(self, evaluation: 'MinerEvaluation') -> None:
578593 value = getattr (existing .evaluation , name )
579594 setattr (cached_eval , name , _copy_issue_discovery_value (name , value ))
580595 for repo_name , prior_repo in existing .evaluation .repo_evaluations .items ():
581- target = cached_eval .repo_evaluations .get (repo_name )
582- if target is None :
583- target = RepoEvaluation (repository_full_name = prior_repo .repository_full_name )
584- cached_eval .repo_evaluations [repo_name ] = target
596+ target = cached_eval .get_or_create_repo_evaluation (repo_name , prior_repo .repository_full_name )
585597 target .copy_issue_discovery_from (prior_repo )
586598
587599 self ._cache [evaluation .uid ] = CachedEvaluation (
@@ -621,10 +633,7 @@ def update_issue_discovery(self, evaluation: 'MinerEvaluation') -> None:
621633 setattr (existing .evaluation , name , _copy_issue_discovery_value (name , value ))
622634
623635 for repo_name , repo_eval in evaluation .repo_evaluations .items ():
624- target = existing .evaluation .repo_evaluations .get (repo_name )
625- if target is None :
626- target = RepoEvaluation (repository_full_name = repo_eval .repository_full_name )
627- existing .evaluation .repo_evaluations [repo_name ] = target
636+ target = existing .evaluation .get_or_create_repo_evaluation (repo_name , repo_eval .repository_full_name )
628637 target .copy_issue_discovery_from (repo_eval )
629638
630639 bt .logging .debug (f'Refreshed cached issue discovery for UID { evaluation .uid } ' )
0 commit comments