in sync/landing.py [0:0]
def unlanded_wpt_commits_by_pr(git_gecko: Repo,
git_wpt: Repo,
prev_wpt_head: str,
wpt_head: str = "origin/master",
) -> list[tuple[int | None, list[WptCommit]]]:
revish = f"{prev_wpt_head}..{wpt_head}"
commits_by_pr: list[tuple[int | None, list[WptCommit]]] = []
index_by_pr: dict[int | None, int] = {}
for commit in git_wpt.iter_commits(revish,
reverse=True,
first_parent=True):
wpt_commit = sync_commit.WptCommit(git_wpt, commit.hexsha)
pr = wpt_commit.pr()
extra_commits = []
if pr not in index_by_pr:
pr_data: tuple[int | None, list[WptCommit]] = (pr, [])
# If we have a merge commit, also get the commits merged in
if len(commit.parents) > 1:
merged_revish = f"{commit.parents[0].hexsha}..{commit.hexsha}"
for merged_commit in git_wpt.iter_commits(merged_revish,
reverse=True):
if merged_commit.hexsha != commit.hexsha:
wpt_commit = sync_commit.WptCommit(git_wpt, merged_commit.hexsha)
if wpt_commit.pr() == pr:
extra_commits.append(wpt_commit)
else:
idx = index_by_pr[pr]
pr_data = commits_by_pr.pop(idx)
assert pr_data[0] == pr
index_by_pr = {key: (value if value < idx else value - 1)
for key, value in index_by_pr.items()}
for c in extra_commits + [wpt_commit]:
pr_data[1].append(c)
commits_by_pr.append(pr_data)
index_by_pr[pr] = len(commits_by_pr) - 1
return commits_by_pr