From b40cd7e58b5dab835d8cd03ae893b15ac2da9d02 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 29 Nov 2018 10:32:50 +0800 Subject: [PATCH] identify new contributors in --list-prs --- easybuild/tools/github.py | 40 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/easybuild/tools/github.py b/easybuild/tools/github.py index 573a71d553..0a33e7ed50 100644 --- a/easybuild/tools/github.py +++ b/easybuild/tools/github.py @@ -995,6 +995,38 @@ def not_eligible(msg): return res +def fetch_contributors(per_page=GITHUB_MAX_PER_PAGE, github_user=None): + """ + Fetch contributors + """ + parameters = { + 'per_page': per_page, + 'page': 1, + } + + pr_target_account = build_option('pr_target_account') + pr_target_repo = build_option('pr_target_repo') + + def contributors_url(gh): + """Utility function to fetch data for PRs.""" + return gh.repos[pr_target_account][pr_target_repo].contributors + + contributors = [] + while True: + status, contributor_data = github_api_get_request(contributors_url, github_user=github_user, **parameters) + if status != HTTP_STATUS_OK: + raise EasyBuildError("Failed to get contributor data from %s/%s (parameters: %s, status: %d %s)", + pr_target_account, pr_target_repo, parameters, status, contributor_data) + if not contributor_data: + break + contributors.extend([contributor['login'] for contributor in contributor_data]) + parameters['page'] += 1 + + print_msg("Found %s contributors to %s/%s" % (len(contributors), pr_target_account, pr_target_repo)) + + return contributors + + def list_prs(params, per_page=GITHUB_MAX_PER_PAGE, github_user=None): """ List pull requests according to specified selection/order parameters @@ -1002,6 +1034,9 @@ def list_prs(params, per_page=GITHUB_MAX_PER_PAGE, github_user=None): :param params: 3-tuple with selection parameters for PRs (, , ), see https://developer.github.com/v3/pulls/#parameters """ + + contributors = fetch_contributors() + parameters = { 'state': params[0], 'sort': params[1], @@ -1024,7 +1059,10 @@ def pr_url(gh): lines = [] for pr in pr_data: - lines.append("PR #%s: %s" % (pr['number'], pr['title'])) + pr_txt = "PR #%s: %s" % (pr['number'], pr['title']) + if pr['user']['login'] not in contributors: + pr_txt += " [first contribution]" + lines.append(pr_txt) return '\n'.join(lines)