Skip to content

Commit 6ca746a

Browse files
Only clear and set official reviews when it is an approve or reject.
1 parent 5aa2e18 commit 6ca746a

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

models/review.go

+25-15
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ type CreateReviewOptions struct {
164164
Type ReviewType
165165
Issue *Issue
166166
Reviewer *User
167+
Official bool
167168
}
168169

169170
// IsOfficialReviewer check if reviewer can make official reviews in issue (counts towards required approvals)
@@ -187,19 +188,14 @@ func isOfficialReviewer(e Engine, issue *Issue, reviewer *User) (bool, error) {
187188
}
188189

189190
func createReview(e Engine, opts CreateReviewOptions) (*Review, error) {
190-
official, err := isOfficialReviewer(e, opts.Issue, opts.Reviewer)
191-
if err != nil {
192-
return nil, err
193-
}
194-
195191
review := &Review{
196192
Type: opts.Type,
197193
Issue: opts.Issue,
198194
IssueID: opts.Issue.ID,
199195
Reviewer: opts.Reviewer,
200196
ReviewerID: opts.Reviewer.ID,
201197
Content: opts.Content,
202-
Official: official,
198+
Official: opts.Official,
203199
}
204200
if _, err := e.Insert(review); err != nil {
205201
return nil, err
@@ -265,10 +261,7 @@ func SubmitReview(doer *User, issue *Issue, reviewType ReviewType, content strin
265261
return nil, nil, err
266262
}
267263

268-
// Only reviewers latest review shall count as "official", so existing reviews needs to be cleared
269-
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
270-
return nil, nil, err
271-
}
264+
var official = false
272265

273266
review, err := getCurrentReview(sess, doer, issue)
274267
if err != nil {
@@ -280,12 +273,24 @@ func SubmitReview(doer *User, issue *Issue, reviewType ReviewType, content strin
280273
return nil, nil, ContentEmptyErr{}
281274
}
282275

276+
if reviewType == ReviewTypeApprove || reviewType == ReviewTypeReject {
277+
// Only reviewers latest review of type approve and reject shall count as "official", so existing reviews needs to be cleared
278+
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
279+
return nil, nil, err
280+
}
281+
official, err = isOfficialReviewer(sess, issue, doer)
282+
if err != nil {
283+
return nil, nil, err
284+
}
285+
}
286+
283287
// No current review. Create a new one!
284288
review, err = createReview(sess, CreateReviewOptions{
285289
Type: reviewType,
286290
Issue: issue,
287291
Reviewer: doer,
288292
Content: content,
293+
Official: official,
289294
})
290295
if err != nil {
291296
return nil, nil, err
@@ -298,13 +303,18 @@ func SubmitReview(doer *User, issue *Issue, reviewType ReviewType, content strin
298303
return nil, nil, ContentEmptyErr{}
299304
}
300305

301-
// Official status of review updated at every submit in case settings changed
302-
official, err := isOfficialReviewer(sess, issue, doer)
303-
if err != nil {
304-
return nil, nil, err
306+
if reviewType == ReviewTypeApprove || reviewType == ReviewTypeReject {
307+
// Only reviewers latest review of type approve and reject shall count as "official", so existing reviews needs to be cleared
308+
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
309+
return nil, nil, err
310+
}
311+
official, err = isOfficialReviewer(sess, issue, doer)
312+
if err != nil {
313+
return nil, nil, err
314+
}
305315
}
306-
review.Official = official
307316

317+
review.Official = official
308318
review.Issue = issue
309319
review.Content = content
310320
review.Type = reviewType

services/pull/review.go

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func CreateCodeComment(doer *models.User, issue *models.Issue, line int64, conte
7272
Type: models.ReviewTypePending,
7373
Reviewer: doer,
7474
Issue: issue,
75+
Official: false,
7576
})
7677
if err != nil {
7778
return nil, err

0 commit comments

Comments
 (0)