in bugbot/rules/regression_without_regressed_by.py [0:0]
def filter_bugs(self, bugs):
all_deps = set()
deps_to_max_allowed_date = {}
for bugid, info in bugs.items():
bugid = int(bugid)
# we just keep bugs from dependencies created before bugid
# since the others cannot be a regresser !
info["deps"] = deps = set(x for x in info["deps"] if x < bugid)
if deps:
all_deps |= deps
for dep in deps:
deps_to_max_allowed_date[dep] = info["creation"]
def bug_handler(bug, data):
if "meta" in bug["keywords"] or not bug["cf_last_resolved"]:
data.add(bug["id"])
def history_handler(bug, data):
bugid = bug["id"]
treated.add(bugid)
resolved_before = False
for h in bug["history"]:
if resolved_before:
break
for change in h["changes"]:
if change["field_name"] == "cf_last_resolved" and change["added"]:
date = dateutil.parser.parse(change["added"])
if date < deps_to_max_allowed_date[bugid]:
resolved_before = True
break
if not resolved_before:
data.add(bugid)
invalids = set()
treated = set()
Bugzilla(
bugids=list(all_deps),
include_fields=["id", "keywords", "cf_last_resolved"],
bughandler=bug_handler,
bugdata=invalids,
historyhandler=history_handler,
historydata=invalids,
).get_data().wait()
# Some bugs aren't accessible so they won't appear in treated (all_deps - treated)
# Since we don't have any info about them, then we consider them as invalid
invalids |= all_deps - treated
for bugid, info in bugs.items():
info["deps"] -= invalids
bugs = {bugid: info for bugid, info in bugs.items() if info["deps"]}
return bugs