Skip to content

Commit 4def566

Browse files
committed
Add Reindex buttons to repository settings page
This PR adds reindexing request buttons to the repository settings page. Fix #3796 Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent 1ff944f commit 4def566

File tree

4 files changed

+95
-1
lines changed

4 files changed

+95
-1
lines changed

options/locale/locale_en-US.ini

+6
Original file line numberDiff line numberDiff line change
@@ -1706,6 +1706,12 @@ settings.pulls.default_delete_branch_after_merge = Delete pull request branch af
17061706
settings.projects_desc = Enable Repository Projects
17071707
settings.admin_settings = Administrator Settings
17081708
settings.admin_enable_health_check = Enable Repository Health Checks (git fsck)
1709+
settings.admin_code_indexer = Code Indexer
1710+
settings.admin_stats_indexer = Code Statistics Indexer
1711+
settings.admin_indexer_commit_sha = Last Indexed SHA
1712+
settings.admin_indexer_unindexed = Unindexed
1713+
settings.reindex_button = Add to Reindex Queue
1714+
settings.reindex_requested=Reindex Requested
17091715
settings.admin_enable_close_issues_via_commit_in_any_branch = Close an issue via a commit made in a non default branch
17101716
settings.danger_zone = Danger Zone
17111717
settings.new_owner_has_same_repo = The new owner already has a repository with same name. Please choose another name.

routers/web/repo/setting.go

+48
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"code.gitea.io/gitea/modules/base"
2020
"code.gitea.io/gitea/modules/context"
2121
"code.gitea.io/gitea/modules/git"
22+
"code.gitea.io/gitea/modules/indexer/code"
23+
"code.gitea.io/gitea/modules/indexer/stats"
2224
"code.gitea.io/gitea/modules/lfs"
2325
"code.gitea.io/gitea/modules/log"
2426
"code.gitea.io/gitea/modules/migrations"
@@ -61,6 +63,24 @@ func Settings(ctx *context.Context) {
6163
signing, _ := models.SigningKey(ctx.Repo.Repository.RepoPath())
6264
ctx.Data["SigningKeyAvailable"] = len(signing) > 0
6365
ctx.Data["SigningSettings"] = setting.Repository.Signing
66+
ctx.Data["CodeIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
67+
68+
if ctx.Repo.IsAdmin() {
69+
if setting.Indexer.RepoIndexerEnabled {
70+
status, err := ctx.Repo.Repository.GetIndexerStatus(models.RepoIndexerTypeCode)
71+
if err != nil {
72+
ctx.ServerError("repo.indexer_status", err)
73+
return
74+
}
75+
ctx.Data["CodeIndexerStatus"] = status
76+
}
77+
status, err := ctx.Repo.Repository.GetIndexerStatus(models.RepoIndexerTypeStats)
78+
if err != nil {
79+
ctx.ServerError("repo.indexer_status", err)
80+
return
81+
}
82+
ctx.Data["StatsIndexerStatus"] = status
83+
}
6484

6585
ctx.HTML(http.StatusOK, tplSettingsOptions)
6686
}
@@ -504,6 +524,34 @@ func SettingsPost(ctx *context.Context) {
504524
ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
505525
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
506526

527+
case "admin_index":
528+
if !ctx.User.IsAdmin {
529+
ctx.Error(http.StatusForbidden)
530+
return
531+
}
532+
533+
switch form.Index {
534+
case "stats":
535+
if err := stats.UpdateRepoIndexer(ctx.Repo.Repository); err != nil {
536+
ctx.ServerError("UpdateStatsRepondexer", err)
537+
return
538+
}
539+
case "code":
540+
if !setting.Indexer.RepoIndexerEnabled {
541+
ctx.Error(http.StatusForbidden)
542+
return
543+
}
544+
code.UpdateRepoIndexer(ctx.Repo.Repository)
545+
default:
546+
ctx.NotFound("", nil)
547+
return
548+
}
549+
550+
log.Trace("Repository reindex for %s requested: %s/%s", form.Index, ctx.Repo.Owner.Name, repo.Name)
551+
552+
ctx.Flash.Success(ctx.Tr("repo.settings.reindex_requested"))
553+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
554+
507555
case "convert":
508556
if !ctx.Repo.IsOwner() {
509557
ctx.Error(http.StatusNotFound)

services/forms/repo_form.go

+1
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ type RepoSettingForm struct {
162162

163163
// Admin settings
164164
EnableHealthCheck bool
165+
Index string
165166
}
166167

167168
// Validate validates the fields

templates/repo/settings/options.tmpl

+40-1
Original file line numberDiff line numberDiff line change
@@ -558,11 +558,50 @@
558558
</div>
559559
</div>
560560

561-
<div class="ui divider"></div>
562561
<div class="field">
563562
<button class="ui green button">{{$.i18n.Tr "repo.settings.update_settings"}}</button>
564563
</div>
565564
</form>
565+
566+
<div class="ui divider"></div>
567+
<form class="ui form" method="post">
568+
{{.CsrfTokenHtml}}
569+
<input type="hidden" name="action" value="admin_index">
570+
{{if .CodeIndexerEnabled}}
571+
<h4 class="ui header">{{.i18n.Tr "repo.settings.admin_code_indexer"}}</h4>
572+
<div class="inline fields">
573+
<label>{{.i18n.Tr "repo.settings.admin_indexer_commit_sha"}}</label>
574+
<span class="field">
575+
{{if .CodeIndexerStatus}}
576+
<a rel="nofollow" class="ui sha label" href="{{.RepoLink}}/commit/{{.CodeIndexerStatus.CommitSha}}">
577+
<span class="shortsha">{{ShortSha .CodeIndexerStatus.CommitSha}}</span>
578+
</a>
579+
{{else}}
580+
<span>{{.i18n.Tr "repo.settings.admin_indexer_unindexed"}}</span>
581+
{{end}}
582+
</span>
583+
<div class="field">
584+
<button class="ui green button" name="index" value="code">{{$.i18n.Tr "repo.settings.reindex_button"}}</button>
585+
</div>
586+
</div>
587+
{{end}}
588+
<h4 class="ui header">{{.i18n.Tr "repo.settings.admin_stats_indexer"}}</h4>
589+
<div class="inline fields">
590+
<label>{{.i18n.Tr "repo.settings.admin_indexer_commit_sha"}}</label>
591+
<span class="field">
592+
{{if .StatsIndexerStatus}}
593+
<a rel="nofollow" class="ui sha label" href="{{.RepoLink}}/commit/{{.StatsIndexerStatus.CommitSha}}">
594+
<span class="shortsha">{{ShortSha .StatsIndexerStatus.CommitSha}}</span>
595+
</a>
596+
{{else}}
597+
<span>{{.i18n.Tr "repo.settings.admin_indexer_unindexed"}}</span>
598+
{{end}}
599+
</span>
600+
<div class="field">
601+
<button class="ui green button" name="index" value="stats">{{$.i18n.Tr "repo.settings.reindex_button"}}</button>
602+
</div>
603+
</div>
604+
</form>
566605
</div>
567606
{{end}}
568607

0 commit comments

Comments
 (0)