Skip to content

Commit 13b67e2

Browse files
committed
Make repo model depends on org model but not opposite
1 parent f888e45 commit 13b67e2

File tree

11 files changed

+86
-89
lines changed

11 files changed

+86
-89
lines changed

models/org_team.go

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func AddRepository(ctx context.Context, t *organization.Team, repo *repo_model.R
5656
// addAllRepositories adds all repositories to the team.
5757
// If the team already has some repositories they will be left unchanged.
5858
func addAllRepositories(ctx context.Context, t *organization.Team) error {
59-
orgRepos, err := organization.GetOrgRepositories(ctx, t.OrgID)
59+
orgRepos, err := repo_model.GetOrgRepositories(ctx, t.OrgID)
6060
if err != nil {
6161
return fmt.Errorf("get org repos: %w", err)
6262
}
@@ -93,25 +93,24 @@ func RemoveAllRepositories(ctx context.Context, t *organization.Team) (err error
9393
return nil
9494
}
9595

96-
ctx, committer, err := db.TxContext(ctx)
96+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
97+
TeamID: t.ID,
98+
})
9799
if err != nil {
98-
return err
99-
}
100-
defer committer.Close()
101-
102-
if err = removeAllRepositories(ctx, t); err != nil {
103-
return err
100+
return fmt.Errorf("GetTeamRepositories: %w", err)
104101
}
105102

106-
return committer.Commit()
103+
return db.WithTx(ctx, func(ctx context.Context) error {
104+
return removeAllRepositories(ctx, t, repos)
105+
})
107106
}
108107

109108
// removeAllRepositories removes all repositories from team and recalculates access
110109
// Note: Shall not be called if team includes all repositories
111-
func removeAllRepositories(ctx context.Context, t *organization.Team) (err error) {
110+
func removeAllRepositories(ctx context.Context, t *organization.Team, repos []*repo_model.Repository) (err error) {
112111
e := db.GetEngine(ctx)
113112
// Delete all accesses.
114-
for _, repo := range t.Repos {
113+
for _, repo := range repos {
115114
if err := access_model.RecalculateTeamAccesses(ctx, repo, t.ID); err != nil {
116115
return err
117116
}
@@ -269,11 +268,14 @@ func UpdateTeam(ctx context.Context, t *organization.Team, authChanged, includeA
269268

270269
// Update access for team members if needed.
271270
if authChanged {
272-
if err = t.LoadRepositories(ctx); err != nil {
271+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
272+
TeamID: t.ID,
273+
})
274+
if err != nil {
273275
return fmt.Errorf("LoadRepositories: %w", err)
274276
}
275277

276-
for _, repo := range t.Repos {
278+
for _, repo := range repos {
277279
if err = access_model.RecalculateTeamAccesses(ctx, repo, 0); err != nil {
278280
return fmt.Errorf("recalculateTeamAccesses: %w", err)
279281
}
@@ -300,10 +302,6 @@ func DeleteTeam(ctx context.Context, t *organization.Team) error {
300302
}
301303
defer committer.Close()
302304

303-
if err := t.LoadRepositories(ctx); err != nil {
304-
return err
305-
}
306-
307305
if err := t.LoadMembers(ctx); err != nil {
308306
return err
309307
}
@@ -325,7 +323,13 @@ func DeleteTeam(ctx context.Context, t *organization.Team) error {
325323
}
326324

327325
if !t.IncludesAllRepositories {
328-
if err := removeAllRepositories(ctx, t); err != nil {
326+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
327+
TeamID: t.ID,
328+
})
329+
if err != nil {
330+
return fmt.Errorf("GetTeamRepositories: %w", err)
331+
}
332+
if err := removeAllRepositories(ctx, t, repos); err != nil {
329333
return err
330334
}
331335
}
@@ -431,7 +435,10 @@ func AddTeamMember(ctx context.Context, team *organization.Team, user *user_mode
431435
// FIXME: Update watch repos batchly
432436
if setting.Service.AutoWatchNewRepos {
433437
// Get team and its repositories.
434-
if err := team.LoadRepositories(ctx); err != nil {
438+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
439+
TeamID: team.ID,
440+
})
441+
if err != nil {
435442
log.Error("team.LoadRepositories failed: %v", err)
436443
}
437444

@@ -442,7 +449,7 @@ func AddTeamMember(ctx context.Context, team *organization.Team, user *user_mode
442449
log.Error("watch repo failed: %v", err)
443450
}
444451
}
445-
}(team.Repos)
452+
}(repos)
446453
}
447454

448455
return nil
@@ -462,7 +469,10 @@ func removeTeamMember(ctx context.Context, team *organization.Team, user *user_m
462469

463470
team.NumMembers--
464471

465-
if err := team.LoadRepositories(ctx); err != nil {
472+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
473+
TeamID: team.ID,
474+
})
475+
if err != nil {
466476
return err
467477
}
468478

@@ -480,7 +490,7 @@ func removeTeamMember(ctx context.Context, team *organization.Team, user *user_m
480490
}
481491

482492
// Delete access to team repositories.
483-
for _, repo := range team.Repos {
493+
for _, repo := range repos {
484494
if err := access_model.RecalculateUserAccess(ctx, repo, user.ID); err != nil {
485495
return err
486496
}

models/organization/org_repo.go

Lines changed: 0 additions & 17 deletions
This file was deleted.

models/organization/team.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"code.gitea.io/gitea/models/db"
1313
"code.gitea.io/gitea/models/perm"
14-
repo_model "code.gitea.io/gitea/models/repo"
1514
"code.gitea.io/gitea/models/unit"
1615
user_model "code.gitea.io/gitea/models/user"
1716
"code.gitea.io/gitea/modules/log"
@@ -78,9 +77,8 @@ type Team struct {
7877
LowerName string
7978
Name string
8079
Description string
81-
AccessMode perm.AccessMode `xorm:"'authorize'"`
82-
Repos []*repo_model.Repository `xorm:"-"`
83-
Members []*user_model.User `xorm:"-"`
80+
AccessMode perm.AccessMode `xorm:"'authorize'"`
81+
Members []*user_model.User `xorm:"-"`
8482
NumRepos int
8583
NumMembers int
8684
Units []*TeamUnit `xorm:"-"`
@@ -155,17 +153,6 @@ func (t *Team) IsMember(ctx context.Context, userID int64) bool {
155153
return isMember
156154
}
157155

158-
// LoadRepositories returns paginated repositories in team of organization.
159-
func (t *Team) LoadRepositories(ctx context.Context) (err error) {
160-
if t.Repos != nil {
161-
return nil
162-
}
163-
t.Repos, err = GetTeamRepositories(ctx, &SearchTeamRepoOptions{
164-
TeamID: t.ID,
165-
})
166-
return err
167-
}
168-
169156
// LoadMembers returns paginated members in team of organization.
170157
func (t *Team) LoadMembers(ctx context.Context) (err error) {
171158
t.Members, err = GetTeamMembers(ctx, &SearchMembersOptions{

models/organization/team_list.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ 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"
1312
"code.gitea.io/gitea/models/unit"
1413

1514
"xorm.io/builder"
@@ -98,11 +97,11 @@ func SearchTeam(ctx context.Context, opts *SearchTeamOptions) (TeamList, int64,
9897
}
9998

10099
// GetRepoTeams gets the list of teams that has access to the repository
101-
func GetRepoTeams(ctx context.Context, repo *repo_model.Repository) (teams TeamList, err error) {
100+
func GetRepoTeams(ctx context.Context, orgID, repoID int64) (teams TeamList, err error) {
102101
return teams, db.GetEngine(ctx).
103102
Join("INNER", "team_repo", "team_repo.team_id = team.id").
104-
Where("team.org_id = ?", repo.OwnerID).
105-
And("team_repo.repo_id=?", repo.ID).
103+
Where("team.org_id = ?", orgID).
104+
And("team_repo.repo_id=?", repoID).
106105
OrderBy("CASE WHEN name LIKE '" + OwnerTeamName + "' THEN '' ELSE name END").
107106
Find(&teams)
108107
}

models/organization/team_repo.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ import (
88

99
"code.gitea.io/gitea/models/db"
1010
"code.gitea.io/gitea/models/perm"
11-
repo_model "code.gitea.io/gitea/models/repo"
12-
13-
"xorm.io/builder"
1411
)
1512

1613
// TeamRepo represents an team-repository relation.
@@ -31,29 +28,6 @@ func HasTeamRepo(ctx context.Context, orgID, teamID, repoID int64) bool {
3128
return has
3229
}
3330

34-
type SearchTeamRepoOptions struct {
35-
db.ListOptions
36-
TeamID int64
37-
}
38-
39-
// GetRepositories returns paginated repositories in team of organization.
40-
func GetTeamRepositories(ctx context.Context, opts *SearchTeamRepoOptions) (repo_model.RepositoryList, error) {
41-
sess := db.GetEngine(ctx)
42-
if opts.TeamID > 0 {
43-
sess = sess.In("id",
44-
builder.Select("repo_id").
45-
From("team_repo").
46-
Where(builder.Eq{"team_id": opts.TeamID}),
47-
)
48-
}
49-
if opts.PageSize > 0 {
50-
sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
51-
}
52-
var repos []*repo_model.Repository
53-
return repos, sess.OrderBy("repository.name").
54-
Find(&repos)
55-
}
56-
5731
// AddTeamRepo adds a repo for an organization's team
5832
func AddTeamRepo(ctx context.Context, orgID, teamID, repoID int64) error {
5933
_, err := db.GetEngine(ctx).Insert(&TeamRepo{

models/repo/org_repo.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2022 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package repo
5+
6+
import (
7+
"context"
8+
9+
"code.gitea.io/gitea/models/db"
10+
"xorm.io/builder"
11+
)
12+
13+
// GetOrgRepositories get repos belonging to the given organization
14+
func GetOrgRepositories(ctx context.Context, orgID int64) (RepositoryList, error) {
15+
var orgRepos []*Repository
16+
return orgRepos, db.GetEngine(ctx).Where("owner_id = ?", orgID).Find(&orgRepos)
17+
}
18+
19+
type SearchTeamRepoOptions struct {
20+
db.ListOptions
21+
TeamID int64
22+
}
23+
24+
// GetRepositories returns paginated repositories in team of organization.
25+
func GetTeamRepositories(ctx context.Context, opts *SearchTeamRepoOptions) (RepositoryList, error) {
26+
sess := db.GetEngine(ctx)
27+
if opts.TeamID > 0 {
28+
sess = sess.In("id",
29+
builder.Select("repo_id").
30+
From("team_repo").
31+
Where(builder.Eq{"team_id": opts.TeamID}),
32+
)
33+
}
34+
if opts.PageSize > 0 {
35+
sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
36+
}
37+
var repos []*Repository
38+
return repos, sess.OrderBy("repository.name").
39+
Find(&repos)
40+
}

routers/api/v1/org/team.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ func GetTeamRepos(ctx *context.APIContext) {
573573
// "$ref": "#/responses/notFound"
574574

575575
team := ctx.Org.Team
576-
teamRepos, err := organization.GetTeamRepositories(ctx, &organization.SearchTeamRepoOptions{
576+
teamRepos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
577577
ListOptions: utils.GetListOptions(ctx),
578578
TeamID: team.ID,
579579
})

routers/api/v1/repo/teams.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func ListTeams(ctx *context.APIContext) {
4343
return
4444
}
4545

46-
teams, err := organization.GetRepoTeams(ctx, ctx.Repo.Repository)
46+
teams, err := organization.GetRepoTeams(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
4747
if err != nil {
4848
ctx.InternalServerError(err)
4949
return

routers/web/org/teams.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,11 +411,15 @@ func TeamRepositories(ctx *context.Context) {
411411
return
412412
}
413413

414-
if err := ctx.Org.Team.LoadRepositories(ctx); err != nil {
414+
repos, err := repo_model.GetTeamRepositories(ctx, &repo_model.SearchTeamRepoOptions{
415+
TeamID: ctx.Org.Team.ID,
416+
})
417+
if err != nil {
415418
ctx.ServerError("GetRepositories", err)
416419
return
417420
}
418421
ctx.Data["Units"] = unit_model.Units
422+
ctx.Data["TeamRepos"] = repos
419423
ctx.HTML(http.StatusOK, tplTeamRepositories)
420424
}
421425

routers/web/repo/setting/collaboration.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func Collaboration(ctx *context.Context) {
3333
}
3434
ctx.Data["Collaborators"] = users
3535

36-
teams, err := organization.GetRepoTeams(ctx, ctx.Repo.Repository)
36+
teams, err := organization.GetRepoTeams(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
3737
if err != nil {
3838
ctx.ServerError("GetRepoTeams", err)
3939
return

0 commit comments

Comments
 (0)