From 6acad8cf56564f2c4306d85b3da601a392ca546a Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 23 Jul 2022 06:47:32 +0200 Subject: [PATCH] Add a way to opt out of repo code indexing, on a per-repo basis Add a repository setting to opt out of code indexing. When the indexer iterates over repositories, if it sees a repo with the setting disabled, it will remove that repository from the index, otherwise it continues. The new setting is on by default, and is exposed in the repository settings page, in the advanced settings box, right alongside the Projects and Packages enabling checkboxes. Addresses #17824, albeit in a different way. Signed-off-by: Gergely Nagy --- models/repo/repo.go | 1 + modules/indexer/code/indexer.go | 4 ++++ modules/repository/create.go | 1 + options/locale/locale_en-US.ini | 2 ++ routers/web/repo/setting.go | 13 +++++++++++++ services/forms/repo_form.go | 1 + templates/repo/settings/options.tmpl | 13 ++++++++++++- 7 files changed, 34 insertions(+), 1 deletion(-) diff --git a/models/repo/repo.go b/models/repo/repo.go index bb2a7468ff42a..1ca0fb6a48492 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -158,6 +158,7 @@ type Repository struct { CodeIndexerStatus *RepoIndexerStatus `xorm:"-"` StatsIndexerStatus *RepoIndexerStatus `xorm:"-"` IsFsckEnabled bool `xorm:"NOT NULL DEFAULT true"` + IsCodeIndexingEnabled bool `xorm:"NOT NULL DEFAULT true"` CloseIssuesViaCommitInAnyBranch bool `xorm:"NOT NULL DEFAULT false"` Topics []string `xorm:"TEXT JSON"` diff --git a/modules/indexer/code/indexer.go b/modules/indexer/code/indexer.go index 9845ade3dda47..f2c63c36aa4a7 100644 --- a/modules/indexer/code/indexer.go +++ b/modules/indexer/code/indexer.go @@ -93,6 +93,10 @@ func index(ctx context.Context, indexer Indexer, repoID int64) error { return err } + if !repo.IsCodeIndexingEnabled { + return indexer.Delete(repoID) + } + sha, err := getDefaultBranchSha(ctx, repo) if err != nil { return err diff --git a/modules/repository/create.go b/modules/repository/create.go index 9204d7e422fdb..7ee716437a091 100644 --- a/modules/repository/create.go +++ b/modules/repository/create.go @@ -61,6 +61,7 @@ func CreateRepository(doer, u *user_model.User, opts models.CreateRepoOptions) ( IsEmpty: !opts.AutoInit, TrustModel: opts.TrustModel, IsMirror: opts.IsMirror, + IsCodeIndexingEnabled: true, } var rollbackRepo *repo_model.Repository diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 566a7bd167671..78adbfe7f730b 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1792,6 +1792,8 @@ settings.site = Website settings.update_settings = Update Settings settings.branches.update_default_branch = Update Default Branch settings.advanced_settings = Advanced Settings +settings.code_search_indexing = Code Search +settings.code_search_indexing_desc = Enable code indexing for this repository settings.wiki_desc = Enable Repository Wiki settings.use_internal_wiki = Use Built-In Wiki settings.use_external_wiki = Use External Wiki diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go index 5ded0561c65b5..99a276508284c 100644 --- a/routers/web/repo/setting.go +++ b/routers/web/repo/setting.go @@ -382,6 +382,7 @@ func SettingsPost(ctx *context.Context) { case "advanced": var repoChanged bool + var codeIndexingChanged bool var units []repo_model.RepoUnit var deleteUnitTypes []unit_model.Type @@ -394,6 +395,11 @@ func SettingsPost(ctx *context.Context) { repoChanged = true } + if repo.IsCodeIndexingEnabled != form.EnableCodeIndexing { + repo.IsCodeIndexingEnabled = form.EnableCodeIndexing + codeIndexingChanged = true + } + if form.EnableWiki && form.EnableExternalWiki && !unit_model.TypeExternalWiki.UnitGlobalDisabled() { if !validation.IsValidExternalURL(form.ExternalWikiURL) { ctx.Flash.Error(ctx.Tr("repo.settings.external_wiki_url_error")) @@ -515,6 +521,13 @@ func SettingsPost(ctx *context.Context) { ctx.ServerError("UpdateRepository", err) return } + + if codeIndexingChanged { + // Whether we enabled or disabled indexing, trigger a repo indexer + // update. If we enabled, this will reindex the repo; if we disabled, it + // will delete the repo from the index. + code.UpdateRepoIndexer(ctx.Repo.Repository) + } } log.Trace("Repository advanced settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go index afecc205f31e8..fd05f3725c8fc 100644 --- a/services/forms/repo_form.go +++ b/services/forms/repo_form.go @@ -168,6 +168,7 @@ type RepoSettingForm struct { // Admin settings EnableHealthCheck bool + EnableCodeIndexing bool RequestReindexType string } diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index 98cf4f88c870f..3e63907b3770b 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -420,6 +420,16 @@ + {{if .CodeIndexerEnabled}} +
+ +
+ + +
+
+ {{end}} + {{if not .IsMirror}}
{{$pullRequestEnabled := .Repository.UnitEnabled $.UnitTypePullRequests}} @@ -600,10 +610,11 @@
+
{{.CsrfTokenHtml}} - {{if .CodeIndexerEnabled}} + {{if and .CodeIndexerEnabled .Repository.IsCodeIndexingEnabled}}

{{.locale.Tr "repo.settings.admin_code_indexer"}}