From 7fc59f97c53a656076f727b29aa19dbbe51cd563 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Feb 18 2018 16:44:35 +0000 Subject: use pregenerated information about maintainers Signed-off-by: Igor Gnatenko --- diff --git a/find-package-maintainers b/find-package-maintainers index d16393e..ca7e660 100755 --- a/find-package-maintainers +++ b/find-package-maintainers @@ -3,40 +3,6 @@ import argparse import requests import sys -import multiprocessing - -VERBOSE = False - - -class PkgdbError(Exception): - pass - - -def vprint(*a, **k): - if VERBOSE: - print(*a, file=sys.stderr, **k) - - -def get_maintainers(pkg): - url = 'https://src.fedoraproject.org/api/0/rpms/{}'.format(pkg) - resp = requests.get(url) - data = resp.json() - - if 'access_users' not in data or 'access_groups' not in data: - raise PkgdbError('Could not find maintainers for {}. Not in Pagure?'.format(pkg)) - - access_users = data['access_users'] - access_groups = data['access_groups'] - - maintainer_acls = ('owner', 'admin', 'commit') - maintainers = [] - - for acl in maintainer_acls: - maintainers.extend(access_users.get(acl, [])) - maintainers.extend(access_groups.get(acl, [])) - - vprint('Fetched maintainers of {}: {}'.format(pkg, ', '.join(maintainers))) - return maintainers def options_parse(): p = argparse.ArgumentParser( @@ -50,47 +16,28 @@ def options_parse(): opts = p.parse_args() - if opts.verbose: - global VERBOSE - VERBOSE = True - return opts - def main(): - by_maintainer = {} - by_package = {} opts = options_parse() packages = [line.strip() for line in opts.infile] - with multiprocessing.Pool() as pool: - mapped = pool.map(get_maintainers, packages) - for package, mapping in zip(packages, mapped): - if isinstance(mapping, Exception): - print('ERR: {}: {}'.format(package, mapping), file=sys.stderr) - else: - by_package[package] = mapping + owners = requests.get('https://src.fedoraproject.org/extras/pagure_owner_alias.json').json() - if not by_package: - print('No valid packages given.') - return + by_package = {pkg: owners["rpms"][pkg] for pkg in packages} + by_maintainer = {} print('Maintainers by package:') - for package in sorted(by_package): - maintainers = by_package[package] - print('{:20} {}'.format(package, ' '.join(sorted(maintainers)))) + for pkg, maints in sorted(by_package.items()): + print('{:20} {}'.format(pkg, ' '.join(sorted(maints)))) - for maintainer in maintainers: - if maintainer not in by_maintainer: - by_maintainer[maintainer] = [] - by_maintainer[maintainer].append(package) + for maint in maints: + by_maintainer.setdefault(maint, []).append(pkg) print() print('Packages by maintainer:') - for maintainer in sorted(by_maintainer): - packages = by_maintainer[maintainer] - print('{:10} {}'.format(maintainer, ' '.join(sorted(packages)))) - + for maint, pkgs in sorted(by_maintainer.items()): + print('{:10} {}'.format(maint, ' '.join(pkgs))) if __name__ == '__main__': main()