osclib/core: maintainers_get(): rework to properly supports groups.

Previously, group members were only added if no maintainers were present
whereas group members should always be considered. Additionally, project
queries never included group members. Now groups are included in both.
This commit is contained in:
Jimmy Berry 2018-08-16 00:31:37 -05:00
parent 038bec6113
commit ffcee027c0

View File

@ -55,14 +55,22 @@ def owner_fallback(apiurl, project, package):
@memoize(session=True)
def maintainers_get(apiurl, project, package=None):
if package is None:
meta = ET.fromstringlist(show_project_meta(apiurl, project))
return [p.get('userid') for p in meta.findall('.//person') if p.get('role') == 'maintainer']
meta = ETL.fromstringlist(show_project_meta(apiurl, project))
maintainers = meta.xpath('//person[@role="maintainer"]/@userid')
groups = meta.xpath('//group[@role="maintainer"]/@groupid')
maintainers.extend(groups_members(apiurl, groups))
return maintainers
# Ugly reparse, but real xpath makes the rest much cleaner.
root = owner_fallback(apiurl, project, package)
maintainers = [p.get('name') for p in root.findall('.//person') if p.get('role') == 'maintainer']
if not maintainers:
for group in [p.get('name') for p in root.findall('.//group') if p.get('role') == 'maintainer']:
maintainers = maintainers + group_members(apiurl, group)
root = ETL.fromstringlist(ET.tostringlist(root))
maintainers = root.xpath('//person[@role="maintainer"]/@name')
groups = root.xpath('//group[@role="maintainer"]/@name')
maintainers.extend(groups_members(apiurl, groups))
return maintainers
@memoize(session=True)