@@ -66,6 +66,24 @@ func (err ErrNotValidReviewRequest) Unwrap() error {
66
66
return util .ErrInvalidArgument
67
67
}
68
68
69
+ // ErrReReviewRequestOnMergedPR represents an error when an user tries to request a re-review on a merged PR.
70
+ type ErrReReviewRequestOnMergedPR struct {
71
+ }
72
+
73
+ // IsErrReReviewRequestOnMergedPR checks if an error is an ErrRequestedReReviewOnMergedPR.
74
+ func IsErrReReviewRequestOnMergedPR (err error ) bool {
75
+ _ , ok := err .(ErrReReviewRequestOnMergedPR )
76
+ return ok
77
+ }
78
+
79
+ func (err ErrReReviewRequestOnMergedPR ) Error () string {
80
+ return "cannot request a re-review on a merged PR"
81
+ }
82
+
83
+ func (err ErrReReviewRequestOnMergedPR ) Unwrap () error {
84
+ return util .ErrPermissionDenied
85
+ }
86
+
69
87
// ReviewType defines the sort of feedback a review gives
70
88
type ReviewType int
71
89
@@ -618,9 +636,26 @@ func AddReviewRequest(ctx context.Context, issue *Issue, reviewer, doer *user_mo
618
636
return nil , err
619
637
}
620
638
621
- // skip it when reviewer hase been request to review
622
- if review != nil && review .Type == ReviewTypeRequest {
623
- return nil , committer .Commit () // still commit the transaction, or committer.Close() will rollback it, even if it's a reused transaction.
639
+ if review != nil {
640
+ // NOTE: in case of failure we still commit the transaction here, else committer.Close() will rollback it,
641
+ // even if it's a reused transaction.
642
+
643
+ // skip it when reviewer hase been request to review
644
+ if review .Type == ReviewTypeRequest {
645
+ return nil , committer .Commit ()
646
+ }
647
+
648
+ if err := issue .LoadPullRequest (ctx ); err != nil {
649
+ return nil , err
650
+ }
651
+
652
+ if issue .PullRequest .HasMerged {
653
+ var err error = ErrReReviewRequestOnMergedPR {}
654
+ if err2 := committer .Commit (); err2 != nil {
655
+ err = err2
656
+ }
657
+ return nil , err
658
+ }
624
659
}
625
660
626
661
// if the reviewer is an official reviewer,
0 commit comments