in bugbot/rules/regression_without_regressed_by.py [0:0]
def set_autofix(self, bugs):
def history_handler(bug, data):
bugid = str(bug["id"])
deps = data[bugid]["deps"]
stats = {}
for h in bug["history"]:
for change in h["changes"]:
if (
change["field_name"] in {"blocks", "depends_on"}
and change["added"] in deps
):
who = h["who"]
stats[who] = stats.get(who, 0) + 1
data[bugid]["winner"] = (
max(stats.items(), key=lambda p: p[1])[0] if stats else None
)
no_assignee = [bugid for bugid, info in bugs.items() if not info["assignee"]]
Bugzilla(
bugids=no_assignee, historyhandler=history_handler, historydata=bugs
).get_data().wait()
no_nick = {}
for bugid, info in bugs.items():
if info["assignee"]:
winner = {
"mail": info["assignee"]["email"],
"nickname": info["assignee"]["nick"],
}
self.add_auto_ni(bugid, winner)
elif info["winner"]:
winner = info["winner"]
if winner not in no_nick:
no_nick[winner] = []
no_nick[winner].append(bugid)
else:
winner = {
"mail": info["creator"]["email"],
"nickname": info["creator"]["nick"],
}
self.add_auto_ni(bugid, winner)
if no_nick:
def user_handler(user, data):
data[user["name"]] = user["nick"]
data = {}
BugzillaUser(
user_names=list(no_nick.keys()),
include_fields=["name", "nick"],
user_handler=user_handler,
user_data=data,
).wait()
for bzmail, bugids in no_nick.items():
nick = data[bzmail]
for bugid in bugids:
self.add_auto_ni(bugid, {"mail": bzmail, "nickname": nick})