mirror of
https://gitlab.wikimedia.org/ladsgroup/Phabricator-maintenance-bot
synced 2024-11-25 13:32:38 +01:00
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
|
import re
|
||
|
import time
|
||
|
from collections import defaultdict
|
||
|
|
||
|
from lib import Client
|
||
|
|
||
|
|
||
|
class Checker():
|
||
|
def __init__(self, gerrit_bot_phid, project_patch_for_review_phid, client):
|
||
|
self.gerrit_bot_phid = gerrit_bot_phid
|
||
|
self.project_patch_for_review_phid = project_patch_for_review_phid
|
||
|
self.client = client
|
||
|
|
||
|
def check(self, t_id):
|
||
|
phid = self.client.lookupPhid(t_id)
|
||
|
return self.phid_check(phid)
|
||
|
|
||
|
def phid_check(self, phid):
|
||
|
gerrit_bot_actions = []
|
||
|
for transaction in self.client.getTransactions(phid):
|
||
|
if 'https://github.com/' in str(transaction):
|
||
|
return False
|
||
|
if transaction['authorPHID'] == self.gerrit_bot_phid:
|
||
|
gerrit_bot_actions.append(transaction)
|
||
|
else:
|
||
|
if transaction['type'] == 'projects':
|
||
|
check = self.project_patch_for_review_phid in str(
|
||
|
transaction['fields'])
|
||
|
add_check = "'add'" in str(transaction['fields'])
|
||
|
if check and add_check:
|
||
|
return False
|
||
|
|
||
|
gerrit_patch_status = defaultdict(list)
|
||
|
for case in gerrit_bot_actions:
|
||
|
if case['type'] != 'comment':
|
||
|
continue
|
||
|
|
||
|
if len(case['comments']) != 1:
|
||
|
return False
|
||
|
raw_comment = case['comments'][0]['content']['raw']
|
||
|
gerrit_patch_id = re.findall(
|
||
|
r'https\:\/\/gerrit\.wikimedia\.org\/r\/(\d+)', raw_comment)[0]
|
||
|
merged = re.findall(
|
||
|
r'Change \d+ (?:\*\*merged\*\*|abandoned) by ',
|
||
|
raw_comment)
|
||
|
|
||
|
gerrit_patch_status[gerrit_patch_id].append(not(bool(merged)))
|
||
|
|
||
|
for patch in gerrit_patch_status:
|
||
|
if gerrit_patch_status[patch] != [False, True]:
|
||
|
return False
|
||
|
return True
|
||
|
|
||
|
|
||
|
client = Client.newFromCreds()
|
||
|
|
||
|
project_patch_for_review_phid = 'PHID-PROJ-onnxucoedheq3jevknyr'
|
||
|
checker = Checker(
|
||
|
'PHID-USER-idceizaw6elwiwm5xshb',
|
||
|
project_patch_for_review_phid,
|
||
|
client)
|
||
|
gen = client.getTasksWithProject(project_patch_for_review_phid)
|
||
|
for phid in gen:
|
||
|
if checker.phid_check(phid):
|
||
|
print(client.taskDetails(phid)['id'])
|
||
|
try:
|
||
|
client.removeProjectByPhid(project_patch_for_review_phid, phid)
|
||
|
except BaseException:
|
||
|
continue
|
||
|
time.sleep(10)
|