@@ -64,6 +64,46 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
6464 return user_model .ErrBlockedUser
6565 }
6666
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+
67107 // user should be a collaborator or a member of the organization for base repo
68108 canCreate := issue .Poster .IsAdmin || pr .Flow == issues_model .PullRequestFlowAGit
69109 if ! canCreate {
@@ -175,7 +215,32 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
175215 return err
176216 }
177217
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 ) {
179244 reviewNotifiers , err = RequestCodeOwnersReview (ctx , issue , pr )
180245 if err != nil {
181246 return err
@@ -211,17 +276,7 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
211276 }
212277 notify_service .IssueChangeAssignee (ctx , issue .Poster , issue , assignee , false , assigneeCommentMap [assigneeID ])
213278 }
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+
225280 return nil
226281}
227282
0 commit comments