diff --git a/roles/packager_alias/files/owner-email-from-pagure.py b/roles/packager_alias/files/owner-email-from-pagure.py index b9b1a42b12..b79fe3d8c1 100644 --- a/roles/packager_alias/files/owner-email-from-pagure.py +++ b/roles/packager_alias/files/owner-email-from-pagure.py @@ -57,12 +57,45 @@ def get_pagure_projects(): pagure_projects_url = data['pagination']['next'] +def get_pagure_project_overrides(fullname_roject, default_email): + pagure_overrides_url = pagure_url + '_dg/bzoverrides/{}'.format(fullname_roject) + session = retry_session() + data = {} + cnt = 0 + while True: + try: + response = session.get(pagure_overrides_url) + data = response.json() + break + except Exception: + cnt += 1 + if cnt == 4: + raise + time.sleep(30) + return data.get("fedora_assignee", default_email), data.get("epel_assignee", default_email) + + +def override_to_emails(override): + users = [override] + if override.startswith('@'): + group = override[1:] + response = session.get(pagure_group_url.format(group=group)) + data = response.json() + users = data['members'] + return {'{0}@fedoraproject.org'.format(user) for user in users} + + session = retry_session() group_data = {} for project in get_pagure_projects(): users = set(project['access_users']['owner']) | \ set(project['access_users']['admin']) | \ set(project['access_users']['commit']) + + fedora_override, epel_override = get_pagure_project_overrides( + project['fullname'], + project['access_users']['owner'][0]) + groups = set() for group_kind in ('admin', 'commit'): for group in project['access_groups'][group_kind]: @@ -100,11 +133,17 @@ for project in get_pagure_projects(): # Handle case-insensitivity in postfix by unioning things. project_alias = project_alias.lower() + fedora_alias = '{0}-fedora'.format(project_alias) + epel_alias = '{0}-epel'.format(project_alias) + if project_alias in project_to_email: project_to_email[project_alias] = project_to_email[project_alias].union(emails) else: project_to_email[project_alias] = set(emails) + project_to_email[fedora_alias] = override_to_emails(fedora_override) + project_to_email[epel_alias] = override_to_emails(epel_override) -for project_alias, emails in project_to_email.items(): +for project_alias in project_to_email: + emails = list(project_to_email[project_alias]) print('{0}: {1}'.format(project_alias, ','.join(sorted(emails))))