@@ -219,12 +219,12 @@ type CreateReviewOptions struct {
219
219
Stale bool
220
220
}
221
221
222
- // IsOfficialReviewer check if reviewer can make official reviews in issue (counts towards required approvals)
223
- func IsOfficialReviewer (issue * Issue , reviewer * User ) (bool , error ) {
224
- return isOfficialReviewer (x , issue , reviewer )
222
+ // IsOfficialReviewer check if at least one of the provided reviewers can make official reviews in issue (counts towards required approvals)
223
+ func IsOfficialReviewer (issue * Issue , reviewers ... * User ) (bool , error ) {
224
+ return isOfficialReviewer (x , issue , reviewers ... )
225
225
}
226
226
227
- func isOfficialReviewer (e Engine , issue * Issue , reviewer * User ) (bool , error ) {
227
+ func isOfficialReviewer (e Engine , issue * Issue , reviewers ... * User ) (bool , error ) {
228
228
pr , err := getPullRequestByIssueID (e , issue .ID )
229
229
if err != nil {
230
230
return false , err
@@ -236,7 +236,14 @@ func isOfficialReviewer(e Engine, issue *Issue, reviewer *User) (bool, error) {
236
236
return false , nil
237
237
}
238
238
239
- return pr .ProtectedBranch .isUserOfficialReviewer (e , reviewer )
239
+ for _ , reviewer := range reviewers {
240
+ official , err := pr .ProtectedBranch .isUserOfficialReviewer (e , reviewer )
241
+ if official || err != nil {
242
+ return official , err
243
+ }
244
+ }
245
+
246
+ return false , nil
240
247
}
241
248
242
249
// IsOfficialReviewerTeam check if reviewer in this team can make official reviews in issue (counts towards required approvals)
@@ -426,22 +433,20 @@ func SubmitReview(doer *User, issue *Issue, reviewType ReviewType, content, comm
426
433
// try to remove team review request if need
427
434
if issue .Repo .Owner .IsOrganization () && (reviewType == ReviewTypeApprove || reviewType == ReviewTypeReject ) {
428
435
teamReviewRequests := make ([]* Review , 0 , 10 )
429
- if err = sess .SQL ("SELECT * FROM review WHERE reviewer_team_id > 0 AND type = ?" , ReviewTypeRequest ).Find (& teamReviewRequests ); err != nil {
436
+ if err : = sess .SQL ("SELECT * FROM review WHERE reviewer_team_id > 0 AND type = ?" , ReviewTypeRequest ).Find (& teamReviewRequests ); err != nil {
430
437
return nil , nil , err
431
438
}
432
439
433
- if len (teamReviewRequests ) > 0 {
434
- for _ , teamReviewRequest := range teamReviewRequests {
435
- ok := false
436
- if ok , err = isTeamMember (sess , issue .Repo .OwnerID , teamReviewRequest .ReviewerTeamID , doer .ID ); err != nil {
437
- return nil , nil , err
438
- }
439
-
440
- if ok {
441
- if _ , err := sess .Delete (teamReviewRequest ); err != nil {
442
- return nil , nil , err
443
- }
444
- }
440
+ for _ , teamReviewRequest := range teamReviewRequests {
441
+ ok , err := isTeamMember (sess , issue .Repo .OwnerID , teamReviewRequest .ReviewerTeamID , doer .ID )
442
+ if err != nil {
443
+ return nil , nil , err
444
+ } else if ! ok {
445
+ continue
446
+ }
447
+
448
+ if _ , err := sess .Delete (teamReviewRequest ); err != nil {
449
+ return nil , nil , err
445
450
}
446
451
}
447
452
}
@@ -456,6 +461,9 @@ func GetReviewersByIssueID(issueID int64) ([]*Review, error) {
456
461
457
462
sess := x .NewSession ()
458
463
defer sess .Close ()
464
+ if err := sess .Begin (); err != nil {
465
+ return nil , err
466
+ }
459
467
460
468
// Get latest review of each reviwer, sorted in order they were made
461
469
if err := sess .SQL ("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = 0 AND type in (?, ?, ?) AND original_author_id = 0 GROUP BY issue_id, reviewer_id) ORDER BY review.updated_unix ASC" ,
@@ -479,20 +487,20 @@ func GetReviewersByIssueID(issueID int64) ([]*Review, error) {
479
487
}
480
488
481
489
// GetReviewerByIssueIDAndUserID get the latest review of reviewer for a pull request
482
- func GetReviewerByIssueIDAndUserID (issueID , userID int64 ) (review * Review , err error ) {
483
- return getReviewerByIssueIDAndUserID (x , issueID , userID )
490
+ func GetReviewerByIssueIDAndUserID (issueID , userID int64 ) (* Review , error ) {
491
+ return getReviewByIssueIDAndUserID (x , issueID , userID )
484
492
}
485
493
486
- func getReviewerByIssueIDAndUserID (e Engine , issueID , userID int64 ) (review * Review , err error ) {
487
- review = new ( Review )
494
+ func getReviewByIssueIDAndUserID (e Engine , issueID , userID int64 ) (* Review , error ) {
495
+ var review * Review
488
496
489
497
if _ , err := e .SQL ("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_id = ? AND original_author_id = 0 AND type in (?, ?, ?))" ,
490
498
issueID , userID , ReviewTypeApprove , ReviewTypeReject , ReviewTypeRequest ).
491
499
Get (review ); err != nil {
492
500
return nil , err
493
501
}
494
502
495
- return
503
+ return review , nil
496
504
}
497
505
498
506
// GetTeamReviewerByIssueIDAndTeamID get the latest review requst of reviewer team for a pull request
@@ -581,7 +589,7 @@ func AddReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
581
589
return nil , err
582
590
}
583
591
584
- review , err := getReviewerByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
592
+ review , err := getReviewByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
585
593
if err != nil {
586
594
return nil , err
587
595
}
@@ -591,18 +599,10 @@ func AddReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
591
599
return nil , nil
592
600
}
593
601
594
- var official bool
595
- if official , err = isOfficialReviewer ( sess , issue , reviewer ); err != nil {
602
+ official , err := isOfficialReviewer ( sess , issue , reviewer , doer )
603
+ if err != nil {
596
604
return nil , err
597
- }
598
-
599
- if ! official {
600
- if official , err = isOfficialReviewer (sess , issue , doer ); err != nil {
601
- return nil , err
602
- }
603
- }
604
-
605
- if official {
605
+ } else if official {
606
606
if _ , err := sess .Exec ("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?" , false , issue .ID , reviewer .ID ); err != nil {
607
607
return nil , err
608
608
}
@@ -618,15 +618,15 @@ func AddReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
618
618
return nil , err
619
619
}
620
620
621
- var comment * Comment
622
- if comment , err = createComment (sess , & CreateCommentOptions {
621
+ comment , err := createComment (sess , & CreateCommentOptions {
623
622
Type : CommentTypeReviewRequest ,
624
623
Doer : doer ,
625
624
Repo : issue .Repo ,
626
625
Issue : issue ,
627
626
RemovedAssignee : false , // Use RemovedAssignee as !isRequest
628
627
AssigneeID : reviewer .ID , // Use AssigneeID as reviewer ID
629
- }); err != nil {
628
+ })
629
+ if err != nil {
630
630
return nil , err
631
631
}
632
632
@@ -641,7 +641,7 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
641
641
return nil , err
642
642
}
643
643
644
- review , err := getReviewerByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
644
+ review , err := getReviewByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
645
645
if err != nil {
646
646
return nil , err
647
647
}
@@ -654,16 +654,12 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
654
654
return nil , err
655
655
}
656
656
657
- var official bool
658
- if official , err = isOfficialReviewer ( sess , issue , reviewer ); err != nil {
657
+ official , err := isOfficialReviewer ( sess , issue , reviewer )
658
+ if err != nil {
659
659
return nil , err
660
- }
661
-
662
- if official {
663
- // recalculate which is the latest official review from that user
664
- var review * Review
665
-
666
- review , err = getReviewerByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
660
+ } else if official {
661
+ // recalculate the latest official review for reviewer
662
+ review , err := getReviewByIssueIDAndUserID (sess , issue .ID , reviewer .ID )
667
663
if err != nil {
668
664
return nil , err
669
665
}
@@ -675,16 +671,14 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *User) (*Comment, error) {
675
671
}
676
672
}
677
673
678
- var comment * Comment
679
- comment , err = createComment (sess , & CreateCommentOptions {
674
+ comment , err := createComment (sess , & CreateCommentOptions {
680
675
Type : CommentTypeReviewRequest ,
681
676
Doer : doer ,
682
677
Repo : issue .Repo ,
683
678
Issue : issue ,
684
679
RemovedAssignee : true , // Use RemovedAssignee as !isRequest
685
680
AssigneeID : reviewer .ID , // Use AssigneeID as reviewer ID
686
681
})
687
-
688
682
if err != nil {
689
683
return nil , err
690
684
}
@@ -710,12 +704,10 @@ func AddTeamReviewRequest(issue *Issue, reviewer *Team, doer *User) (*Comment, e
710
704
return nil , nil
711
705
}
712
706
713
- var official bool
714
- if official , err = isOfficialReviewerTeam ( sess , issue , reviewer ); err != nil {
707
+ official , err := isOfficialReviewerTeam ( sess , issue , reviewer )
708
+ if err != nil {
715
709
return nil , fmt .Errorf ("isOfficialReviewerTeam(): %v" , err )
716
- }
717
-
718
- if ! official {
710
+ } else if ! official {
719
711
if official , err = isOfficialReviewer (sess , issue , doer ); err != nil {
720
712
return nil , fmt .Errorf ("isOfficialReviewer(): %v" , err )
721
713
}
@@ -732,20 +724,20 @@ func AddTeamReviewRequest(issue *Issue, reviewer *Team, doer *User) (*Comment, e
732
724
}
733
725
734
726
if official {
735
- if _ , err := sess .Exec ("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_team_id = ?" , false , issue .ID , reviewer .ID ); err != nil {
727
+ if _ , err := sess .Exec ("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_team_id= ?" , false , issue .ID , reviewer .ID ); err != nil {
736
728
return nil , err
737
729
}
738
730
}
739
731
740
- var comment * Comment
741
- if comment , err = createComment (sess , & CreateCommentOptions {
732
+ comment , err := createComment (sess , & CreateCommentOptions {
742
733
Type : CommentTypeReviewRequest ,
743
734
Doer : doer ,
744
735
Repo : issue .Repo ,
745
736
Issue : issue ,
746
737
RemovedAssignee : false , // Use RemovedAssignee as !isRequest
747
738
AssigneeTeamID : reviewer .ID , // Use AssigneeTeamID as reviewer team ID
748
- }); err != nil {
739
+ })
740
+ if err != nil {
749
741
return nil , fmt .Errorf ("createComment(): %v" , err )
750
742
}
751
743
@@ -773,16 +765,14 @@ func RemoveTeamReviewRequest(issue *Issue, reviewer *Team, doer *User) (*Comment
773
765
return nil , err
774
766
}
775
767
776
- var official bool
777
- if official , err = isOfficialReviewerTeam ( sess , issue , reviewer ); err != nil {
768
+ official , err := isOfficialReviewerTeam ( sess , issue , reviewer )
769
+ if err != nil {
778
770
return nil , fmt .Errorf ("isOfficialReviewerTeam(): %v" , err )
779
771
}
780
772
781
773
if official {
782
774
// recalculate which is the latest official review from that team
783
- var review * Review
784
-
785
- review , err = getReviewerByIssueIDAndUserID (sess , issue .ID , - reviewer .ID )
775
+ review , err := getReviewByIssueIDAndUserID (sess , issue .ID , - reviewer .ID )
786
776
if err != nil {
787
777
return nil , err
788
778
}
@@ -798,15 +788,15 @@ func RemoveTeamReviewRequest(issue *Issue, reviewer *Team, doer *User) (*Comment
798
788
return nil , sess .Commit ()
799
789
}
800
790
801
- var comment * Comment
802
- if comment , err = createComment (sess , & CreateCommentOptions {
791
+ comment , err := createComment (sess , & CreateCommentOptions {
803
792
Type : CommentTypeReviewRequest ,
804
793
Doer : doer ,
805
794
Repo : issue .Repo ,
806
795
Issue : issue ,
807
796
RemovedAssignee : true , // Use RemovedAssignee as !isRequest
808
797
AssigneeTeamID : reviewer .ID , // Use AssigneeTeamID as reviewer team ID
809
- }); err != nil {
798
+ })
799
+ if err != nil {
810
800
return nil , fmt .Errorf ("createComment(): %v" , err )
811
801
}
812
802
0 commit comments