Skip to content

Commit 05bc233

Browse files
authored
Use the search API to find the pull request containing the specific commit hash. (#132)
1 parent 7371ffa commit 05bc233

File tree

2 files changed

+169
-285
lines changed

2 files changed

+169
-285
lines changed

miss_islington/status_change.py

+33-37
Original file line numberDiff line numberDiff line change
@@ -40,45 +40,41 @@ async def check_ci_status_and_approval(gh, sha, leave_comment=False):
4040
"pending" not in all_ci_status
4141
and "continuous-integration/travis-ci/pr" in all_ci_context
4242
):
43-
async for ref in gh.getiter("/repos/miss-islington/cpython/git/refs/heads/"):
44-
if "backport-" in ref["ref"] and ref["object"]["sha"] == sha:
45-
backport_branch_name = ref["ref"].split("/")[-1]
46-
async for pr_response in gh.getiter(
47-
f"/repos/python/cpython/pulls?state=open&head=miss-islington:{backport_branch_name}"
48-
):
49-
pr_number = pr_response["number"]
50-
normalized_pr_title = util.normalize_title(
51-
pr_response["title"], pr_response["body"]
43+
44+
prs_for_commit = await gh.getitem(f'/search/issues?q=type:pr+repo:python/cpython+sha:{sha}')
45+
if prs_for_commit["total_count"] > 0: # there should only be one
46+
pr_for_commit = prs_for_commit["items"][0]
47+
pr_number = pr_for_commit["number"]
48+
normalized_pr_title = util.normalize_title(
49+
pr_for_commit["title"], pr_for_commit["body"]
50+
)
51+
52+
title_match = TITLE_RE.match(normalized_pr_title)
53+
if title_match:
54+
if leave_comment:
55+
original_pr_number = title_match.group("pr")
56+
original_pr_url = (
57+
f"/repos/python/cpython/pulls/{original_pr_number}"
5258
)
59+
original_pr_result = await gh.getitem(original_pr_url)
60+
pr_author = original_pr_result["user"]["login"]
61+
committer = original_pr_result["merged_by"]["login"]
62+
63+
participants = util.get_participants(pr_author, committer)
64+
emoji = "✅" if result["state"] == "success" else "❌"
5365

54-
title_match = TITLE_RE.match(normalized_pr_title)
55-
if title_match:
56-
57-
if leave_comment:
58-
original_pr_number = title_match.group("pr")
59-
original_pr_url = (
60-
f"/repos/python/cpython/pulls/{original_pr_number}"
61-
)
62-
original_pr_result = await gh.getitem(original_pr_url)
63-
pr_author = original_pr_result["user"]["login"]
64-
committer = original_pr_result["merged_by"]["login"]
65-
66-
participants = util.get_participants(pr_author, committer)
67-
emoji = "✅" if result["state"] == "success" else "❌"
68-
69-
await util.leave_comment(
70-
gh,
71-
pr_number=pr_number,
72-
message=f"{participants}: Backport status check is done, and it's a {result['state']} {emoji} .",
73-
)
74-
75-
if result["state"] == "success":
76-
pr = await gh.getitem(
77-
f"/repos/python/cpython/pulls/{pr_number}"
78-
)
79-
if util.pr_is_awaiting_merge(pr["labels"]):
80-
await merge_pr(gh, pr_number, sha)
81-
break
66+
await util.leave_comment(
67+
gh,
68+
pr_number=pr_number,
69+
message=f"{participants}: Backport status check is done, and it's a {result['state']} {emoji} .",
70+
)
71+
72+
if result["state"] == "success":
73+
pr = await gh.getitem(
74+
f"/repos/python/cpython/pulls/{pr_number}"
75+
)
76+
if util.pr_is_awaiting_merge(pr["labels"]):
77+
await merge_pr(gh, pr_number, sha)
8278

8379

8480
async def merge_pr(gh, pr_number, sha):

0 commit comments

Comments
 (0)