in mozci/push.py [0:0]
def bustage_fixed_by(self) -> Optional[str]:
"""The revision of the commit which 'bustage fixes' this one or None.
We detect if a push was 'bustage fixed' with a simple heuristic:
- there is a close enough child push where the task/group passes;
- the child push where the task/group passes is associated to the same bug
as the push of interest.
Returns:
str or None: The commit revision which 'bustage fixes' this push (or None).
"""
if self.backedout:
return None
def fix_same_bugs(push1, push2):
return len(push1.bugs & push2.bugs) > 0
# Skip checking regressions if we can't find any possible candidate.
possible_bustage_fixes = set(
other
for other in self._iterate_children(MAX_DEPTH)
if self != other and fix_same_bugs(self, other)
)
if len(possible_bustage_fixes) == 0:
return None
def find(runnable_type: str) -> Optional[str]:
for other, candidate_regressions, _, _ in self._iterate_failures(
runnable_type, MAX_DEPTH
):
if other == self or other not in possible_bustage_fixes:
continue
other_summaries = getattr(other, f"{runnable_type}_summaries")
if any(
name in other_summaries
and other_summaries[name].status == Status.PASS
for name in candidate_regressions
):
return other.rev
possible_bustage_fixes.remove(other)
if len(possible_bustage_fixes) == 0:
break
return None
return find("label") or find("config_group")