@@ -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
if ! issue .Poster .IsAdmin {
69
109
canCreate , err := repo_model .IsOwnerMemberCollaborator (ctx , repo , issue .Poster .ID )
@@ -174,7 +214,32 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
174
214
return err
175
215
}
176
216
177
- if ! pr .IsWorkInProgress (ctx ) {
217
+ // if there are reviewers or review teams, we don't need to request code owners review
218
+ if len (opts .Reviewers )+ len (opts .TeamReviewers ) > 0 {
219
+ for _ , reviewer := range opts .Reviewers {
220
+ comment , err := issues_model .AddReviewRequest (ctx , pr .Issue , reviewer , issue .Poster )
221
+ if err != nil {
222
+ return err
223
+ }
224
+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
225
+ Comment : comment ,
226
+ Reviewer : reviewer ,
227
+ IsAdd : true ,
228
+ })
229
+ }
230
+
231
+ for _ , teamReviewer := range opts .TeamReviewers {
232
+ comment , err := issues_model .AddTeamReviewRequest (ctx , pr .Issue , teamReviewer , issue .Poster )
233
+ if err != nil {
234
+ return err
235
+ }
236
+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
237
+ Comment : comment ,
238
+ ReviewTeam : teamReviewer ,
239
+ IsAdd : true ,
240
+ })
241
+ }
242
+ } else if ! pr .IsWorkInProgress (ctx ) {
178
243
reviewNotifiers , err = RequestCodeOwnersReview (ctx , issue , pr )
179
244
if err != nil {
180
245
return err
@@ -210,17 +275,7 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
210
275
}
211
276
notify_service .IssueChangeAssignee (ctx , issue .Poster , issue , assignee , false , assigneeCommentMap [assigneeID ])
212
277
}
213
- permDoer , err := access_model .GetUserRepoPermission (ctx , repo , issue .Poster )
214
- for _ , reviewer := range opts .Reviewers {
215
- if _ , err = ReviewRequest (ctx , pr , issue .Poster , & permDoer , reviewer , true ); err != nil {
216
- return err
217
- }
218
- }
219
- for _ , teamReviewer := range opts .TeamReviewers {
220
- if _ , err = TeamReviewRequest (ctx , pr , issue .Poster , teamReviewer , true ); err != nil {
221
- return err
222
- }
223
- }
278
+
224
279
return nil
225
280
}
226
281
0 commit comments