Track upstream merge failures

zuul_enqueue is a crude tool for rechecking turbo-hipster when
it goes haywire. There is no point rechecking patches that have
failed to merge.

Change-Id: Ib78736e5648131771b2872c30892b6beda6efc46
This commit is contained in:
Joshua Hesketh 2015-06-12 21:33:57 +10:00
parent f265245cce
commit 6730ed449f

View File

@ -9,6 +9,8 @@ import traceback
# Set the user to watch # Set the user to watch
user = 'turbo-hipster' user = 'turbo-hipster'
author_name = 'DB Datasets CI' author_name = 'DB Datasets CI'
upstream_user = 'jenkins'
upstream_author_name = "Jenkins"
# Grab a list of missing or negative reviews for a user: # Grab a list of missing or negative reviews for a user:
url = ("https://review.openstack.org/changes/?q=status:open " url = ("https://review.openstack.org/changes/?q=status:open "
@ -21,6 +23,7 @@ r = requests.get(url)
no_votes = [] no_votes = []
negative_votes = [] negative_votes = []
merge_failures = [] merge_failures = []
upstream_merge_failures = []
unknown = [] unknown = []
for change in json.loads(r.text[5:]): for change in json.loads(r.text[5:]):
@ -28,41 +31,56 @@ for change in json.loads(r.text[5:]):
patchset = change['revisions'][change['current_revision']]['_number'] patchset = change['revisions'][change['current_revision']]['_number']
change_id = str(change['_number']) + ',' + str(patchset) change_id = str(change['_number']) + ',' + str(patchset)
last_message = None last_message = None
last_upstream_message = None
for message in sorted(change['messages'], for message in sorted(change['messages'],
key=lambda k: (k['_revision_number'], key=lambda k: (k['_revision_number'],
k['date']), reverse=True): k['date']), reverse=True):
if message['_revision_number'] < patchset: if message['_revision_number'] < patchset:
# Finished looking at all the messages on this patchset # Finished looking at all the messages on this patchset
break break
if message['author']['name'] == author_name: if not last_message and message['author']['name'] == author_name:
last_message = message['message'] last_message = message['message']
break if (not last_upstream_message and
message['author']['name'] == upstream_author_name):
last_upstream_message = message['message']
if not last_message: if (last_upstream_message and
'Merge Failed.' in last_upstream_message.split('\n')[2]):
upstream_merge_failures.append({
'change_id': change_id,
'updated': change['updated'],
'change': change,
'last_upstream_message': last_upstream_message,
})
elif not last_message:
# turbo-hister hasn't commented on this patchset # turbo-hister hasn't commented on this patchset
no_votes.append({ no_votes.append({
'change_id': change_id, 'change_id': change_id,
'updated': change['updated'], 'updated': change['updated'],
'change': change 'change': change,
'last_upstream_message': last_upstream_message,
}) })
elif ('This change was unable to be automatically merged with the ' elif ('This change was unable to be automatically merged with the '
'current state of the repository.' in last_message): 'current state of the repository.' in last_message):
merge_failures.append({ merge_failures.append({
'change_id': change_id, 'change_id': change_id,
'updated': change['updated'], 'updated': change['updated'],
'change': change 'change': change,
'last_upstream_message': last_upstream_message,
}) })
elif 'Database migration testing failed' in last_message: elif 'Database migration testing failed' in last_message:
negative_votes.append({ negative_votes.append({
'change_id': change_id, 'change_id': change_id,
'updated': change['updated'], 'updated': change['updated'],
'change': change 'change': change,
'last_upstream_message': last_upstream_message,
}) })
else: else:
unknown.append({ unknown.append({
'change_id': change_id, 'change_id': change_id,
'updated': change['updated'], 'updated': change['updated'],
'change': change 'change': change,
'last_upstream_message': last_upstream_message,
}) })
except Exception: except Exception:
@ -86,3 +104,6 @@ print ("=" * 20 + (" Changes with merge failure (%d) " % len(merge_failures)) +
print_enqueues(merge_failures) print_enqueues(merge_failures)
print "=" * 20 + (" Others in this query (%d) " % len(unknown)) + "=" * 20 print "=" * 20 + (" Others in this query (%d) " % len(unknown)) + "=" * 20
print_enqueues(unknown) print_enqueues(unknown)
print "=" * 20 + (" Changes with merge failures upstream (%d) "
% len(upstream_merge_failures)) + "=" * 20
print_enqueues(upstream_merge_failures)