@@ -218,50 +218,44 @@ func getReviewers(ctx context.Context, repo *repo_model.Repository, doerID, post
218
218
return nil , err
219
219
}
220
220
221
- var users []* user_model.User
222
- e := db .GetEngine (ctx )
221
+ cond := builder .And (builder.Neq {"`user`.id" : posterID })
223
222
224
223
if repo .IsPrivate || repo .Owner .Visibility == api .VisibleTypePrivate {
225
224
// This a private repository:
226
225
// Anyone who can read the repository is a requestable reviewer
227
- if err := e .
228
- SQL ("SELECT * FROM `user` WHERE id in (" +
229
- "SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? AND user_id != ?" + // private org repos
230
- ") ORDER BY name" ,
231
- repo .ID , perm .AccessModeRead ,
232
- posterID ).
233
- Find (& users ); err != nil {
234
- return nil , err
235
- }
226
+
227
+ cond = cond .And (builder .In ("`user`.id" ,
228
+ builder .Select ("user_id" ).From ("access" ).Where (
229
+ builder.Eq {"repo_id" : repo .ID }.
230
+ And (builder.Gte {"mode" : perm .AccessModeRead }),
231
+ ),
232
+ ))
236
233
237
234
if repo .Owner .Type == user_model .UserTypeIndividual && repo .Owner .ID != posterID {
238
235
// as private *user* repos don't generate an entry in the `access` table,
239
236
// the owner of a private repo needs to be explicitly added.
240
- users = append ( users , repo .Owner )
237
+ cond = cond . Or (builder. Eq { "`user`.id" : repo .Owner . ID } )
241
238
}
242
239
243
- return users , nil
244
- }
245
-
246
- // This is a "public" repository:
247
- // Any user that has read access, is a watcher or organization member can be requested to review
248
- if err := e .
249
- SQL ("SELECT * FROM `user` WHERE id IN ( " +
250
- "SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? " +
251
- "UNION " +
252
- "SELECT user_id FROM `watch` WHERE repo_id = ? AND mode IN (?, ?) " +
253
- "UNION " +
254
- "SELECT uid AS user_id FROM `org_user` WHERE org_id = ? " +
255
- ") AND id != ? ORDER BY name" ,
256
- repo .ID , perm .AccessModeRead ,
257
- repo .ID , repo_model .WatchModeNormal , repo_model .WatchModeAuto ,
258
- repo .OwnerID ,
259
- posterID ).
260
- Find (& users ); err != nil {
261
- return nil , err
262
- }
263
-
264
- return users , nil
240
+ } else {
241
+ // This is a "public" repository:
242
+ // Any user that has read access, is a watcher or organization member can be requested to review
243
+ cond = cond .And (builder .And (builder .In ("`user`.id" ,
244
+ builder .Select ("user_id" ).From ("access" ).
245
+ Where (builder.Eq {"repo_id" : repo .ID }.
246
+ And (builder.Gte {"mode" : perm .AccessModeRead })),
247
+ ).Or (builder .In ("`user`.id" ,
248
+ builder .Select ("user_id" ).From ("watch" ).
249
+ Where (builder.Eq {"repo_id" : repo .ID }.
250
+ And (builder .In ("mode" , repo_model .WatchModeNormal , repo_model .WatchModeAuto ))),
251
+ ).Or (builder .In ("`user`.id" ,
252
+ builder .Select ("uid" ).From ("org_user" ).
253
+ Where (builder.Eq {"org_id" : repo .OwnerID }),
254
+ )))))
255
+ }
256
+
257
+ users := make ([]* user_model.User , 0 , 8 )
258
+ return users , db .GetEngine (ctx ).Where (cond ).OrderBy ("name" ).Find (& users )
265
259
}
266
260
267
261
// GetReviewers get all users can be requested to review:
0 commit comments