Skip to content

Commit c61b9c5

Browse files
GiteaBotlng2020
andauthored
Fix the approval count of PR when there is no protection branch rule (#27272) (#27343)
Backport #27272 by @lng2020 As title ![ksnip_20230926-115158](https://github.com/go-gitea/gitea/assets/70063547/a60be44a-06ad-421e-ba27-e4e0adfa5db7) Co-authored-by: Nanguan Lin <[email protected]>
1 parent e719bf8 commit c61b9c5

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

models/issues/review.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ type CreateReviewOptions struct {
231231
}
232232

233233
// IsOfficialReviewer check if at least one of the provided reviewers can make official reviews in issue (counts towards required approvals)
234-
func IsOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_model.User) (bool, error) {
234+
func IsOfficialReviewer(ctx context.Context, issue *Issue, reviewer *user_model.User) (bool, error) {
235235
pr, err := GetPullRequestByIssueID(ctx, issue.ID)
236236
if err != nil {
237237
return false, err
@@ -242,14 +242,21 @@ func IsOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_mo
242242
return false, err
243243
}
244244
if rule == nil {
245-
return false, nil
245+
// if no rule is found, then user with write access can make official reviews
246+
err := pr.LoadBaseRepo(ctx)
247+
if err != nil {
248+
return false, err
249+
}
250+
writeAccess, err := access_model.HasAccessUnit(ctx, reviewer, pr.BaseRepo, unit.TypeCode, perm.AccessModeWrite)
251+
if err != nil {
252+
return false, err
253+
}
254+
return writeAccess, nil
246255
}
247256

248-
for _, reviewer := range reviewers {
249-
official, err := git_model.IsUserOfficialReviewer(ctx, rule, reviewer)
250-
if official || err != nil {
251-
return official, err
252-
}
257+
official, err := git_model.IsUserOfficialReviewer(ctx, rule, reviewer)
258+
if official || err != nil {
259+
return official, err
253260
}
254261

255262
return false, nil
@@ -578,7 +585,9 @@ func AddReviewRequest(ctx context.Context, issue *Issue, reviewer, doer *user_mo
578585
return nil, nil
579586
}
580587

581-
official, err := IsOfficialReviewer(ctx, issue, reviewer, doer)
588+
// if the reviewer is an official reviewer,
589+
// remove the official flag in the all previous reviews
590+
official, err := IsOfficialReviewer(ctx, issue, reviewer)
582591
if err != nil {
583592
return nil, err
584593
} else if official {

0 commit comments

Comments
 (0)