Conflate missing commit reference notifications

Instead of creating a separate (potentially lengthy) Danger notification
for every missing commit reference in a backport, produce a single
notification with a list of all unreferenced commit hashes.  This makes
Danger output more concise while retaining all the relevant feedback for
the developer.

(cherry picked from commit 086780dcf0)
This commit is contained in:
Michał Kępień 2026-05-21 11:13:30 +02:00
parent 3265127e6d
commit ab2aa2f4cc
No known key found for this signature in database

View file

@ -281,25 +281,28 @@ if is_backport:
else: # check for commit IDs once original MR is merged
original_mr_commits = list(original_mr.commits(all=True))
backport_mr_commits = list(mr.commits(all=True))
for orig_commit in original_mr_commits:
for backport_commit in backport_mr_commits:
if orig_commit.id in backport_commit.message:
break
missing_commits = []
for orig_id in (o.id for o in original_mr_commits):
if not any(b for b in backport_mr_commits if orig_id in b.message):
missing_commits.append(orig_id)
if missing_commits:
msg = (
f"The following commits from original MR !{original_mr_id} "
"are not referenced in any of the backport commits:"
)
msg += "<ul>"
msg += "".join(f"<li>{orig_id}</li>" for orig_id in missing_commits)
msg += "</ul>"
if not is_full_backport:
message(msg)
else:
msg = (
f"Commit {orig_commit.id} from original MR !{original_mr_id} "
"is not referenced in any of the backport commits."
msg += (
"Please use `-x` when cherry-picking to include "
"the full original commit ID. Alternatively, use the "
"`Backport::Partial` label if not all original "
"commits are meant to be backported."
)
if not is_full_backport:
message(msg)
else:
msg += (
" Please use `-x` when cherry-picking to include "
"the full original commit ID. Alternately, use the "
"`Backport::Partial` label if not all original "
"commits are meant to be backported."
)
fail(msg)
fail(msg)
else:
if not version_labels:
fail(