@@ -64,6 +64,46 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
64
64
return user_model .ErrBlockedUser
65
65
}
66
66
67
+ // check if reviewers are valid
68
+ if len (opts .Reviewers ) > 0 {
69
+ allowedUsers , err := GetReviewers (ctx , repo , pr .Issue .PosterID , pr .Issue .PosterID )
70
+ if err != nil {
71
+ return err
72
+ }
73
+ for _ , reviewer := range opts .Reviewers {
74
+ var found bool
75
+ for _ , allowedUser := range allowedUsers {
76
+ if allowedUser .ID == reviewer .ID {
77
+ found = true
78
+ break
79
+ }
80
+ }
81
+ if ! found {
82
+ return issues_model.ErrNotValidReviewRequest {UserID : reviewer .ID }
83
+ }
84
+ }
85
+ }
86
+
87
+ // check if team reviewers are valid
88
+ if len (opts .TeamReviewers ) > 0 {
89
+ allowedTeams , err := GetReviewerTeams (ctx , repo )
90
+ if err != nil {
91
+ return err
92
+ }
93
+ for _ , teamReviewer := range opts .TeamReviewers {
94
+ var found bool
95
+ for _ , allowedTeam := range allowedTeams {
96
+ if allowedTeam .ID == teamReviewer .ID {
97
+ found = true
98
+ break
99
+ }
100
+ }
101
+ if ! found {
102
+ return issues_model.ErrNotValidReviewRequest {TeamID : teamReviewer .ID }
103
+ }
104
+ }
105
+ }
106
+
67
107
// user should be a collaborator or a member of the organization for base repo
68
108
canCreate := issue .Poster .IsAdmin || pr .Flow == issues_model .PullRequestFlowAGit
69
109
if ! canCreate {
@@ -175,7 +215,32 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
175
215
return err
176
216
}
177
217
178
- if ! pr .IsWorkInProgress (ctx ) {
218
+ // if there are reviewers or review teams, we don't need to request code owners review
219
+ if len (opts .Reviewers )+ len (opts .TeamReviewers ) > 0 {
220
+ for _ , reviewer := range opts .Reviewers {
221
+ comment , err := issues_model .AddReviewRequest (ctx , pr .Issue , reviewer , issue .Poster )
222
+ if err != nil {
223
+ return err
224
+ }
225
+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
226
+ Comment : comment ,
227
+ Reviewer : reviewer ,
228
+ IsAdd : true ,
229
+ })
230
+ }
231
+
232
+ for _ , teamReviewer := range opts .TeamReviewers {
233
+ comment , err := issues_model .AddTeamReviewRequest (ctx , pr .Issue , teamReviewer , issue .Poster )
234
+ if err != nil {
235
+ return err
236
+ }
237
+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
238
+ Comment : comment ,
239
+ ReviewTeam : teamReviewer ,
240
+ IsAdd : true ,
241
+ })
242
+ }
243
+ } else if ! pr .IsWorkInProgress (ctx ) {
179
244
reviewNotifiers , err = RequestCodeOwnersReview (ctx , issue , pr )
180
245
if err != nil {
181
246
return err
@@ -211,17 +276,7 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
211
276
}
212
277
notify_service .IssueChangeAssignee (ctx , issue .Poster , issue , assignee , false , assigneeCommentMap [assigneeID ])
213
278
}
214
- permDoer , err := access_model .GetUserRepoPermission (ctx , repo , issue .Poster )
215
- for _ , reviewer := range opts .Reviewers {
216
- if _ , err = ReviewRequest (ctx , pr , issue .Poster , & permDoer , reviewer , true ); err != nil {
217
- return err
218
- }
219
- }
220
- for _ , teamReviewer := range opts .TeamReviewers {
221
- if _ , err = TeamReviewRequest (ctx , pr , issue .Poster , teamReviewer , true ); err != nil {
222
- return err
223
- }
224
- }
279
+
225
280
return nil
226
281
}
227
282
0 commit comments