Skip to content

Commit 1ebaa3c

Browse files
6543Stelios Malathouras
authored and
Stelios Malathouras
committed
use xorm builder for models.getReviewers() (go-gitea#19033)
* xorm builder * dedup code
1 parent 1ed9734 commit 1ebaa3c

File tree

1 file changed

+28
-34
lines changed

1 file changed

+28
-34
lines changed

models/repo.go

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -218,50 +218,44 @@ func getReviewers(ctx context.Context, repo *repo_model.Repository, doerID, post
218218
return nil, err
219219
}
220220

221-
var users []*user_model.User
222-
e := db.GetEngine(ctx)
221+
cond := builder.And(builder.Neq{"`user`.id": posterID})
223222

224223
if repo.IsPrivate || repo.Owner.Visibility == api.VisibleTypePrivate {
225224
// This a private repository:
226225
// 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+
))
236233

237234
if repo.Owner.Type == user_model.UserTypeIndividual && repo.Owner.ID != posterID {
238235
// as private *user* repos don't generate an entry in the `access` table,
239236
// 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})
241238
}
242239

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)
265259
}
266260

267261
// GetReviewers get all users can be requested to review:

0 commit comments

Comments
 (0)