in java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java [805:850]
private boolean isApproved(
CodeOwnerResolverResult codeOwners,
CodeOwnerKind codeOwnerKind,
ImmutableSet<Account.Id> approverAccountIds,
@Nullable Account.Id implicitApprover,
AtomicReference<String> reason) {
if (implicitApprover != null) {
if (codeOwners.codeOwnersAccountIds().contains(implicitApprover)
|| codeOwners.ownedByAllUsers()) {
// If the uploader of the patch set owns the path, there is an implicit code owner
// approval from the patch set uploader so that the path is automatically approved.
reason.set(
String.format(
"implicitly approved by the patch set uploader %s who is a %s%s",
AccountTemplateUtil.getAccountTemplate(implicitApprover),
codeOwnerKind.getDisplayName(),
codeOwners.ownedByAllUsers()
? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
: ""));
return true;
}
}
if (!Collections.disjoint(approverAccountIds, codeOwners.codeOwnersAccountIds())
|| (codeOwners.ownedByAllUsers() && !approverAccountIds.isEmpty())) {
// At least one of the code owners approved the change.
Optional<Account.Id> approver =
codeOwners.ownedByAllUsers()
? approverAccountIds.stream().findAny()
: approverAccountIds.stream()
.filter(accountId -> codeOwners.codeOwnersAccountIds().contains(accountId))
.findAny();
checkState(approver.isPresent(), "no approver found");
reason.set(
String.format(
"approved by %s who is a %s%s",
AccountTemplateUtil.getAccountTemplate(approver.get()),
codeOwnerKind.getDisplayName(),
codeOwners.ownedByAllUsers()
? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
: ""));
return true;
}
return false;
}