Skip to content

Commit 475f40d

Browse files
committed
improvements
1 parent ef7a98b commit 475f40d

File tree

5 files changed

+76
-13
lines changed

5 files changed

+76
-13
lines changed

modules/indexer/issues/util.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,14 @@ func getIssueIndexerData(ctx context.Context, issueID int64) (*internal.IndexerD
9797
return nil, false, err
9898
}
9999

100+
if err := issue.Repo.LoadOwner(ctx); err != nil {
101+
return nil, false, fmt.Errorf("issue.Repo.LoadOwner: %w", err)
102+
}
103+
100104
return &internal.IndexerData{
101105
ID: issue.ID,
102106
RepoID: issue.RepoID,
103-
IsPublic: !issue.Repo.IsPrivate,
107+
IsPublic: !issue.Repo.IsPrivate && issue.Repo.Owner.Visibility.IsPublic(),
104108
Title: issue.Title,
105109
Content: issue.Content,
106110
Comments: comments,

services/org/org.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ import (
88
"fmt"
99

1010
actions_model "code.gitea.io/gitea/models/actions"
11+
activities_model "code.gitea.io/gitea/models/activities"
1112
"code.gitea.io/gitea/models/db"
1213
org_model "code.gitea.io/gitea/models/organization"
1314
packages_model "code.gitea.io/gitea/models/packages"
15+
access_model "code.gitea.io/gitea/models/perm/access"
1416
repo_model "code.gitea.io/gitea/models/repo"
1517
secret_model "code.gitea.io/gitea/models/secret"
1618
user_model "code.gitea.io/gitea/models/user"
19+
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
1720
"code.gitea.io/gitea/modules/storage"
1821
"code.gitea.io/gitea/modules/structs"
1922
"code.gitea.io/gitea/modules/util"
@@ -104,13 +107,69 @@ func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge
104107
return nil
105108
}
106109

110+
func updateOrgRepoForVisibilityChanged(ctx context.Context, repo *repo_model.Repository, makePrivate bool) error {
111+
// Organization repository need to recalculate access table when visibility is changed.
112+
if err := access_model.RecalculateTeamAccesses(ctx, repo, 0); err != nil {
113+
return fmt.Errorf("recalculateTeamAccesses: %w", err)
114+
}
115+
116+
if makePrivate {
117+
if _, err := db.GetEngine(ctx).Where("repo_id = ?", repo.ID).Cols("is_private").Update(&activities_model.Action{
118+
IsPrivate: true,
119+
}); err != nil {
120+
return err
121+
}
122+
123+
if err := repo_model.ClearRepoStars(ctx, repo.ID); err != nil {
124+
return err
125+
}
126+
}
127+
128+
// Create/Remove git-daemon-export-ok for git-daemon...
129+
if err := repo_service.CheckDaemonExportOK(ctx, repo); err != nil {
130+
return err
131+
}
132+
133+
// If visibility is changed, we need to update the issue indexer.
134+
// Since the data in the issue indexer have field to indicate if the repo is public or not.
135+
// FIXME: it should check organization visibility instead of repository visibility only.
136+
issue_indexer.UpdateRepoIndexer(ctx, repo.ID)
137+
138+
forkRepos, err := repo_model.GetRepositoriesByForkID(ctx, repo.ID)
139+
if err != nil {
140+
return fmt.Errorf("getRepositoriesByForkID: %w", err)
141+
}
142+
for i := range forkRepos {
143+
if err := updateOrgRepoForVisibilityChanged(ctx, forkRepos[i], makePrivate); err != nil {
144+
return fmt.Errorf("updateRepoForVisibilityChanged[%d]: %w", forkRepos[i], err)
145+
}
146+
}
147+
return nil
148+
}
149+
107150
func ChangeOrganizationVisibility(ctx context.Context, org *org_model.Organization, visibility structs.VisibleType) error {
108151
if org.Visibility == visibility {
109152
return nil
110153
}
111154

112155
org.Visibility = visibility
156+
// FIXME: If it's a big forks network(forks and sub forks), the database transaction will be too long to fail.
113157
return db.WithTx(ctx, func(ctx context.Context) error {
114-
return user_model.UpdateUserColsWithNoAutotime(ctx, org.AsUser(), "visibility")
158+
if err := user_model.UpdateUserColsWithNoAutotime(ctx, org.AsUser(), "visibility"); err != nil {
159+
return err
160+
}
161+
162+
repos, _, err := repo_model.GetUserRepositories(ctx, repo_model.SearchRepoOptions{
163+
Actor: org.AsUser(), Private: true, ListOptions: db.ListOptionsAll,
164+
})
165+
if err != nil {
166+
return err
167+
}
168+
for _, repo := range repos {
169+
if err := updateOrgRepoForVisibilityChanged(ctx, repo, visibility == structs.VisibleTypePrivate); err != nil {
170+
return fmt.Errorf("updateOrgRepoForVisibilityChanged: %w", err)
171+
}
172+
}
173+
return nil
115174
})
116175
}

services/repository/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ func cleanupRepository(repoID int64) {
469469
}
470470

471471
func updateGitRepoAfterCreate(ctx context.Context, repo *repo_model.Repository) error {
472-
if err := checkDaemonExportOK(ctx, repo); err != nil {
472+
if err := CheckDaemonExportOK(ctx, repo); err != nil {
473473
return fmt.Errorf("checkDaemonExportOK: %w", err)
474474
}
475475

services/repository/repository.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func MakeRepoPublic(ctx context.Context, repo *repo_model.Repository) (err error
142142
}
143143

144144
// Create/Remove git-daemon-export-ok for git-daemon...
145-
if err := checkDaemonExportOK(ctx, repo); err != nil {
145+
if err := CheckDaemonExportOK(ctx, repo); err != nil {
146146
return err
147147
}
148148

@@ -197,7 +197,7 @@ func MakeRepoPrivate(ctx context.Context, repo *repo_model.Repository) (err erro
197197
}
198198

199199
// Create/Remove git-daemon-export-ok for git-daemon...
200-
if err := checkDaemonExportOK(ctx, repo); err != nil {
200+
if err := CheckDaemonExportOK(ctx, repo); err != nil {
201201
return err
202202
}
203203

@@ -243,8 +243,8 @@ func LinkedRepository(ctx context.Context, a *repo_model.Attachment) (*repo_mode
243243
return nil, -1, nil
244244
}
245245

246-
// checkDaemonExportOK creates/removes git-daemon-export-ok for git-daemon...
247-
func checkDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error {
246+
// CheckDaemonExportOK creates/removes git-daemon-export-ok for git-daemon...
247+
func CheckDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error {
248248
if err := repo.LoadOwner(ctx); err != nil {
249249
return err
250250
}
@@ -314,7 +314,7 @@ func updateRepository(ctx context.Context, repo *repo_model.Repository, visibili
314314
}
315315

316316
// Create/Remove git-daemon-export-ok for git-daemon...
317-
if err := checkDaemonExportOK(ctx, repo); err != nil {
317+
if err := CheckDaemonExportOK(ctx, repo); err != nil {
318318
return err
319319
}
320320

templates/org/settings/options_dangerzone.tmpl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,23 @@
4747
<form class="ui form form-fetch-action" action="{{.Link}}/visibility" method="post">
4848
{{.CsrfTokenHtml}}
4949

50-
<div class="field" id="visibility_box">
51-
<label for="visibility">{{ctx.Locale.Tr "org.settings.visibility"}}</label>
50+
<div class="field">
51+
<label>{{ctx.Locale.Tr "org.settings.visibility"}}</label>
5252
<div class="field">
5353
<div class="ui radio checkbox">
54-
<input class="enable-system-radio" name="visibility" type="radio" value="0" {{if eq .CurrentVisibility 0}}checked{{end}}>
54+
<input name="visibility" type="radio" value="0" {{if eq .CurrentVisibility 0}}checked{{end}}>
5555
<label>{{ctx.Locale.Tr "org.settings.visibility.public"}}</label>
5656
</div>
5757
</div>
5858
<div class="field">
5959
<div class="ui radio checkbox">
60-
<input class="enable-system-radio" name="visibility" type="radio" value="1" {{if eq .CurrentVisibility 1}}checked{{end}}>
60+
<input name="visibility" type="radio" value="1" {{if eq .CurrentVisibility 1}}checked{{end}}>
6161
<label>{{ctx.Locale.Tr "org.settings.visibility.limited"}}</label>
6262
</div>
6363
</div>
6464
<div class="field">
6565
<div class="ui radio checkbox">
66-
<input class="enable-system-radio" name="visibility" type="radio" value="2" {{if eq .CurrentVisibility 2}}checked{{end}}>
66+
<input name="visibility" type="radio" value="2" {{if eq .CurrentVisibility 2}}checked{{end}}>
6767
<label>{{ctx.Locale.Tr "org.settings.visibility.private"}}</label>
6868
</div>
6969
</div>

0 commit comments

Comments
 (0)