Skip to content

Commit deb5878

Browse files
committed
Fix bug
1 parent 29da350 commit deb5878

File tree

10 files changed

+89
-80
lines changed

10 files changed

+89
-80
lines changed

models/db/list_options.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
package db
66

77
import (
8-
"context"
9-
108
"code.gitea.io/gitea/modules/setting"
119

1210
"xorm.io/xorm"
@@ -25,15 +23,6 @@ func GetPaginatedSession(p Paginator) *xorm.Session {
2523
return x.Limit(take, skip)
2624
}
2725

28-
// WithPaginator returns a Context from a context.Context and Paginator
29-
func WithPaginator(ctx context.Context, p Paginator) context.Context {
30-
skip, take := p.GetSkipTake()
31-
return &Context{
32-
Context: ctx,
33-
e: GetEngine(ctx).Limit(take, skip),
34-
}
35-
}
36-
3726
// SetSessionPagination sets pagination for a database session
3827
func SetSessionPagination(sess Engine, p Paginator) *xorm.Session {
3928
skip, take := p.GetSkipTake()

models/org_team.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -397,17 +397,17 @@ func UpdateTeam(t *organization.Team, authChanged, includeAllChanged bool) (err
397397
// DeleteTeam deletes given team.
398398
// It's caller's responsibility to assign organization ID.
399399
func DeleteTeam(t *organization.Team) error {
400-
if err := t.GetRepositories(&organization.SearchTeamOptions{}); err != nil {
401-
return err
402-
}
403-
404400
ctx, committer, err := db.TxContext()
405401
if err != nil {
406402
return err
407403
}
408404
defer committer.Close()
409405
sess := db.GetEngine(ctx)
410406

407+
if err := t.GetRepositoriesCtx(ctx); err != nil {
408+
return err
409+
}
410+
411411
if err := t.GetMembersCtx(ctx); err != nil {
412412
return err
413413
}
@@ -492,17 +492,17 @@ func AddTeamMember(team *organization.Team, userID int64) error {
492492
return err
493493
}
494494

495-
// Get team and its repositories.
496-
if err := team.GetRepositories(&organization.SearchTeamOptions{}); err != nil {
497-
return err
498-
}
499-
500495
ctx, committer, err := db.TxContext()
501496
if err != nil {
502497
return err
503498
}
504499
defer committer.Close()
505500

501+
// Get team and its repositories.
502+
if err := team.GetRepositoriesCtx(ctx); err != nil {
503+
return err
504+
}
505+
506506
sess := db.GetEngine(ctx)
507507

508508
if err := db.Insert(ctx, &organization.TeamUser{

models/organization/team.go

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,6 @@ type SearchTeamOptions struct {
9696
IncludeDesc bool
9797
}
9898

99-
// SearchMembersOptions holds the search options
100-
type SearchMembersOptions struct {
101-
db.ListOptions
102-
}
103-
10499
// SearchTeam search for teams. Caller is responsible to check permissions.
105100
func SearchTeam(opts *SearchTeamOptions) ([]*Team, int64, error) {
106101
if opts.Page <= 0 {
@@ -224,40 +219,24 @@ func (t *Team) IsMember(userID int64) bool {
224219
}
225220

226221
// GetRepositoriesCtx returns paginated repositories in team of organization.
227-
func (t *Team) GetRepositoriesCtx(ctx context.Context) error {
222+
func (t *Team) GetRepositoriesCtx(ctx context.Context) (err error) {
228223
if t.Repos != nil {
229224
return nil
230225
}
231-
return db.GetEngine(ctx).Join("INNER", "team_repo", "repository.id = team_repo.repo_id").
232-
Where("team_repo.team_id=?", t.ID).
233-
OrderBy("repository.name").
234-
Find(&t.Repos)
235-
}
236-
237-
// GetRepositories returns paginated repositories in team of organization.
238-
func (t *Team) GetRepositories(opts *SearchTeamOptions) error {
239-
if opts.Page == 0 {
240-
return t.GetRepositoriesCtx(db.DefaultContext)
241-
}
242-
243-
return t.GetRepositoriesCtx(db.WithPaginator(db.DefaultContext, opts))
226+
t.Repos, err = GetTeamRepositories(ctx, &SearchTeamRepoOptions{
227+
TeamID: t.ID,
228+
})
229+
return
244230
}
245231

246232
// GetMembersCtx returns paginated members in team of organization.
247233
func (t *Team) GetMembersCtx(ctx context.Context) (err error) {
248-
t.Members, err = GetTeamMembers(ctx, t.ID)
234+
t.Members, err = GetTeamMembers(ctx, &SearchMembersOptions{
235+
TeamID: t.ID,
236+
})
249237
return err
250238
}
251239

252-
// GetMembers returns paginated members in team of organization.
253-
func (t *Team) GetMembers(opts *SearchMembersOptions) (err error) {
254-
if opts.Page == 0 {
255-
return t.GetMembersCtx(db.DefaultContext)
256-
}
257-
258-
return t.GetMembersCtx(db.WithPaginator(db.DefaultContext, opts))
259-
}
260-
261240
// UnitEnabled returns if the team has the given unit type enabled
262241
func (t *Team) UnitEnabled(tp unit.Type) bool {
263242
return t.unitEnabled(db.DefaultContext, tp)

models/organization/team_repo.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"code.gitea.io/gitea/models/db"
1111
"code.gitea.io/gitea/models/perm"
12+
repo_model "code.gitea.io/gitea/models/repo"
1213
)
1314

1415
// TeamRepo represents an team-repository relation.
@@ -29,6 +30,26 @@ func HasTeamRepo(ctx context.Context, orgID, teamID, repoID int64) bool {
2930
return has
3031
}
3132

33+
type SearchTeamRepoOptions struct {
34+
db.ListOptions
35+
TeamID int64
36+
}
37+
38+
// GetRepositories returns paginated repositories in team of organization.
39+
func GetTeamRepositories(ctx context.Context, opts *SearchTeamRepoOptions) ([]*repo_model.Repository, error) {
40+
sess := db.GetEngine(ctx)
41+
if opts.TeamID > 0 {
42+
sess = sess.Join("INNER", "team_repo", "repository.id = team_repo.repo_id").
43+
Where("team_repo.team_id=?", opts.TeamID)
44+
}
45+
if opts.PageSize > 0 {
46+
sess.Limit(opts.PageSize, opts.Page*opts.PageSize)
47+
}
48+
var repos []*repo_model.Repository
49+
return repos, sess.OrderBy("repository.name").
50+
Find(&repos)
51+
}
52+
3253
// AddTeamRepo addes a repo for an organization's team
3354
func AddTeamRepo(ctx context.Context, orgID, teamID, repoID int64) error {
3455
_, err := db.GetEngine(ctx).Insert(&TeamRepo{

models/organization/team_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestTeam_GetRepositories(t *testing.T) {
4242

4343
test := func(teamID int64) {
4444
team := unittest.AssertExistsAndLoadBean(t, &Team{ID: teamID}).(*Team)
45-
assert.NoError(t, team.GetRepositories(&SearchTeamOptions{}))
45+
assert.NoError(t, team.GetRepositoriesCtx(db.DefaultContext))
4646
assert.Len(t, team.Repos, team.NumRepos)
4747
for _, repo := range team.Repos {
4848
unittest.AssertExistsAndLoadBean(t, &TeamRepo{TeamID: teamID, RepoID: repo.ID})
@@ -57,7 +57,7 @@ func TestTeam_GetMembers(t *testing.T) {
5757

5858
test := func(teamID int64) {
5959
team := unittest.AssertExistsAndLoadBean(t, &Team{ID: teamID}).(*Team)
60-
assert.NoError(t, team.GetMembers(&SearchMembersOptions{}))
60+
assert.NoError(t, team.GetMembersCtx(db.DefaultContext))
6161
assert.Len(t, team.Members, team.NumMembers)
6262
for _, member := range team.Members {
6363
unittest.AssertExistsAndLoadBean(t, &TeamUser{UID: member.ID, TeamID: teamID})
@@ -126,7 +126,9 @@ func TestGetTeamMembers(t *testing.T) {
126126

127127
test := func(teamID int64) {
128128
team := unittest.AssertExistsAndLoadBean(t, &Team{ID: teamID}).(*Team)
129-
members, err := GetTeamMembers(db.DefaultContext, teamID)
129+
members, err := GetTeamMembers(db.DefaultContext, &SearchMembersOptions{
130+
TeamID: teamID,
131+
})
130132
assert.NoError(t, err)
131133
assert.Len(t, members, team.NumMembers)
132134
for _, member := range members {

models/organization/team_user.go

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ package organization
66

77
import (
88
"context"
9-
"fmt"
10-
"sort"
119

1210
"code.gitea.io/gitea/models/db"
1311
user_model "code.gitea.io/gitea/models/user"
12+
"xorm.io/builder"
1413
)
1514

1615
// TeamUser represents an team-user relation.
@@ -39,23 +38,33 @@ func GetTeamUsersByTeamID(ctx context.Context, teamID int64) ([]*TeamUser, error
3938
Find(&teamUsers)
4039
}
4140

41+
// SearchMembersOptions holds the search options
42+
type SearchMembersOptions struct {
43+
db.ListOptions
44+
TeamID int64
45+
}
46+
47+
func (opts SearchMembersOptions) ToConds() builder.Cond {
48+
cond := builder.NewCond()
49+
if opts.TeamID > 0 {
50+
cond = cond.And(builder.Eq{"team_user.team_id": opts.TeamID})
51+
}
52+
return cond
53+
}
54+
4255
// GetTeamMembers returns all members in given team of organization.
43-
func GetTeamMembers(ctx context.Context, teamID int64) (_ []*user_model.User, err error) {
44-
teamUsers, err := GetTeamUsersByTeamID(ctx, teamID)
45-
if err != nil {
46-
return nil, fmt.Errorf("GetTeamUsersByTeamID: %v", err)
56+
func GetTeamMembers(ctx context.Context, opts *SearchMembersOptions) ([]*user_model.User, error) {
57+
var members []*user_model.User
58+
sess := db.GetEngine(ctx).
59+
Join("INNER", "team_user", "team_user.uid=user.id").
60+
Asc("full_name + name").
61+
Where(opts)
62+
if opts.PageSize > 0 && opts.Page > -1 {
63+
sess = sess.Limit(opts.PageSize, opts.Page*opts.PageSize)
4764
}
48-
members := make([]*user_model.User, len(teamUsers))
49-
for i, teamUser := range teamUsers {
50-
member, err := user_model.GetUserByIDCtx(ctx, teamUser.UID)
51-
if err != nil {
52-
return nil, fmt.Errorf("GetUserByIDCtx[id: %d]: %v", teamUser.UID, err)
53-
}
54-
members[i] = member
65+
if err := sess.Find(&members); err != nil {
66+
return nil, err
5567
}
56-
sort.Slice(members, func(i, j int) bool {
57-
return members[i].DisplayName() < members[j].DisplayName()
58-
})
5968
return members, nil
6069
}
6170

modules/repository/create_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestIncludesAllRepositoriesTeams(t *testing.T) {
2424

2525
testTeamRepositories := func(teamID int64, repoIds []int64) {
2626
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
27-
assert.NoError(t, team.GetRepositories(&organization.SearchTeamOptions{}), "%s: GetRepositories", team.Name)
27+
assert.NoError(t, team.GetRepositoriesCtx(db.DefaultContext), "%s: GetRepositories", team.Name)
2828
assert.Len(t, team.Repos, team.NumRepos, "%s: len repo", team.Name)
2929
assert.Len(t, team.Repos, len(repoIds), "%s: repo count", team.Name)
3030
for i, rid := range repoIds {

routers/api/v1/org/team.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,14 +378,17 @@ func GetTeamMembers(ctx *context.APIContext) {
378378
return
379379
}
380380

381-
if err := ctx.Org.Team.GetMembers(&organization.SearchMembersOptions{
381+
teamMembers, err := organization.GetTeamMembers(ctx, &organization.SearchMembersOptions{
382382
ListOptions: utils.GetListOptions(ctx),
383-
}); err != nil {
383+
TeamID: ctx.Org.Team.ID,
384+
})
385+
if err != nil {
384386
ctx.Error(http.StatusInternalServerError, "GetTeamMembers", err)
385387
return
386388
}
389+
387390
members := make([]*api.User, len(ctx.Org.Team.Members))
388-
for i, member := range ctx.Org.Team.Members {
391+
for i, member := range teamMembers {
389392
members[i] = convert.ToUser(member, ctx.Doer)
390393
}
391394

@@ -534,13 +537,16 @@ func GetTeamRepos(ctx *context.APIContext) {
534537
// "$ref": "#/responses/RepositoryList"
535538

536539
team := ctx.Org.Team
537-
if err := team.GetRepositories(&organization.SearchTeamOptions{
540+
teamRepos, err := organization.GetTeamRepositories(ctx, &organization.SearchTeamRepoOptions{
538541
ListOptions: utils.GetListOptions(ctx),
539-
}); err != nil {
542+
TeamID: team.ID,
543+
})
544+
if err != nil {
540545
ctx.Error(http.StatusInternalServerError, "GetTeamRepos", err)
546+
return
541547
}
542548
repos := make([]*api.Repository, len(team.Repos))
543-
for i, repo := range team.Repos {
549+
for i, repo := range teamRepos {
544550
access, err := models.AccessLevel(ctx.Doer, repo)
545551
if err != nil {
546552
ctx.Error(http.StatusInternalServerError, "GetTeamRepos", err)

routers/web/org/teams.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func Teams(ctx *context.Context) {
4444
ctx.Data["PageIsOrgTeams"] = true
4545

4646
for _, t := range ctx.Org.Teams {
47-
if err := t.GetMembers(&organization.SearchMembersOptions{}); err != nil {
47+
if err := t.GetMembersCtx(ctx); err != nil {
4848
ctx.ServerError("GetMembers", err)
4949
return
5050
}
@@ -308,7 +308,7 @@ func TeamMembers(ctx *context.Context) {
308308
ctx.Data["Title"] = ctx.Org.Team.Name
309309
ctx.Data["PageIsOrgTeams"] = true
310310
ctx.Data["PageIsOrgTeamMembers"] = true
311-
if err := ctx.Org.Team.GetMembers(&organization.SearchMembersOptions{}); err != nil {
311+
if err := ctx.Org.Team.GetMembersCtx(ctx); err != nil {
312312
ctx.ServerError("GetMembers", err)
313313
return
314314
}
@@ -321,7 +321,7 @@ func TeamRepositories(ctx *context.Context) {
321321
ctx.Data["Title"] = ctx.Org.Team.Name
322322
ctx.Data["PageIsOrgTeams"] = true
323323
ctx.Data["PageIsOrgTeamRepos"] = true
324-
if err := ctx.Org.Team.GetRepositories(&organization.SearchTeamOptions{}); err != nil {
324+
if err := ctx.Org.Team.GetRepositoriesCtx(ctx); err != nil {
325325
ctx.ServerError("GetRepositories", err)
326326
return
327327
}

services/issue/assignee.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,14 @@ func TeamReviewRequest(issue *models.Issue, doer *user_model.User, reviewer *org
243243
return
244244
}
245245

246-
if err = reviewer.GetMembers(&organization.SearchMembersOptions{}); err != nil {
246+
members, err := organization.GetTeamMembers(db.DefaultContext, &organization.SearchMembersOptions{
247+
TeamID: reviewer.ID,
248+
})
249+
if err != nil {
247250
return
248251
}
249252

250-
for _, member := range reviewer.Members {
253+
for _, member := range members {
251254
if member.ID == comment.Issue.PosterID {
252255
continue
253256
}

0 commit comments

Comments
 (0)