Merge "Improve check-review-status"

This commit is contained in:
Zuul 2020-12-14 22:11:48 +00:00 committed by Gerrit Code Review
commit 3aaa73e3c3
1 changed files with 23 additions and 17 deletions

View File

@ -141,29 +141,28 @@ def format_votes(votes):
) )
def get_votes_by_person(name, review): def get_votes_by_person(member, review):
for label in ['Code-Review', 'Rollcall-Vote']: for label in ['Code-Review', 'Rollcall-Vote']:
for vote in review['labels'].get(label, {}).get('all', []): for vote in review['labels'].get(label, {}).get('all', []):
voter = vote.get('name', '') if member['gerritid'] == vote['_account_id']:
if voter.startswith(name):
yield vote yield vote
def has_approved(name, review): def has_approved(member, review):
return any( return any(
vote.get('value', 0) == 1 vote.get('value', 0) == 1
for vote in get_votes_by_person(name, review) for vote in get_votes_by_person(member, review)
) )
def has_rejected(name, review): def has_rejected(member, review):
return any( return any(
vote.get('value', 0) == -1 vote.get('value', 0) == -1
for vote in get_votes_by_person(name, review) for vote in get_votes_by_person(member, review)
) )
def has_commented(name, review): def has_commented(member, review):
desired_revision = max( desired_revision = max(
r.get('_number', -1) r.get('_number', -1)
for r in review.get('revisions', {}).values() for r in review.get('revisions', {}).values()
@ -171,7 +170,7 @@ def has_commented(name, review):
for msg in review.get('messages', []): for msg in review.get('messages', []):
if msg.get('_revision_number', -1) != desired_revision: if msg.get('_revision_number', -1) != desired_revision:
continue continue
if msg.get('author', {}).get('name', '') == name: if msg.get('author', {}).get('_account_id', '') == member['gerritid']:
return True return True
@ -380,12 +379,13 @@ def get_one_status(change, delegates, tc_members):
]) ])
tc_member_votes = {} tc_member_votes = {}
for name in tc_members: for member in tc_members:
if has_approved(name, change): name = member['name']
if has_approved(member, change):
tc_member_votes[name] = '+' tc_member_votes[name] = '+'
elif has_rejected(name, change): elif has_rejected(member, change):
tc_member_votes[name] = '-' tc_member_votes[name] = '-'
elif has_commented(name, change): elif has_commented(member, change):
tc_member_votes[name] = 'C' tc_member_votes[name] = 'C'
else: else:
tc_member_votes[name] = ' ' tc_member_votes[name] = ' '
@ -432,10 +432,16 @@ def main():
level=args.log_level, level=args.log_level,
) )
tc_members = [ tc_members = members.parse_members_file('./reference/members.yaml')
m.get('name') # NOTE(mnaser): In order to consistently and properly track the votes,
for m in members.parse_members_file('./reference/members.yaml') # we need to lookup every users Gerrit account ID based
] # on their email.
for member in tc_members:
raw = requests.get(
'https://review.opendev.org/accounts/%s' % member['email'],
headers={'Accept': 'application/json'},
)
member['gerritid'] = decode_json(raw).get('_account_id')
gov = governance.Governance.from_local_repo() gov = governance.Governance.from_local_repo()
release_team = gov.get_team('Release Management') release_team = gov.get_team('Release Management')