]> source.dussan.org Git - gitea.git/commitdiff
Move indexer notification to service layer (#26906)
authorLunny Xiao <xiaolunwen@gmail.com>
Tue, 5 Sep 2023 10:07:57 +0000 (18:07 +0800)
committerGitHub <noreply@github.com>
Tue, 5 Sep 2023 10:07:57 +0000 (10:07 +0000)
Extract from #22266

modules/notification/indexer/indexer.go [deleted file]
modules/notification/notification.go
routers/init.go
services/indexer/indexer.go [new file with mode: 0644]
services/indexer/notify.go [new file with mode: 0644]

diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go
deleted file mode 100644 (file)
index a18c66e..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2019 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package indexer
-
-import (
-       "context"
-
-       issues_model "code.gitea.io/gitea/models/issues"
-       repo_model "code.gitea.io/gitea/models/repo"
-       user_model "code.gitea.io/gitea/models/user"
-       code_indexer "code.gitea.io/gitea/modules/indexer/code"
-       issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
-       stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
-       "code.gitea.io/gitea/modules/log"
-       "code.gitea.io/gitea/modules/notification/base"
-       "code.gitea.io/gitea/modules/repository"
-       "code.gitea.io/gitea/modules/setting"
-)
-
-type indexerNotifier struct {
-       base.NullNotifier
-}
-
-var _ base.Notifier = &indexerNotifier{}
-
-// NewNotifier create a new indexerNotifier notifier
-func NewNotifier() base.Notifier {
-       return &indexerNotifier{}
-}
-
-func (r *indexerNotifier) NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) {
-       r.NotifyMigrateRepository(ctx, doer, u, repo)
-}
-
-func (r *indexerNotifier) NotifyCreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository,
-       issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User,
-) {
-       issue_indexer.UpdateIssueIndexer(issue.ID)
-}
-
-func (r *indexerNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) {
-       issue_indexer.UpdateIssueIndexer(issue.ID)
-}
-
-func (r *indexerNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) {
-       if err := pr.LoadIssue(ctx); err != nil {
-               log.Error("LoadIssue: %v", err)
-               return
-       }
-       issue_indexer.UpdateIssueIndexer(pr.Issue.ID)
-}
-
-func (r *indexerNotifier) NotifyUpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) {
-       if err := c.LoadIssue(ctx); err != nil {
-               log.Error("LoadIssue: %v", err)
-               return
-       }
-       issue_indexer.UpdateIssueIndexer(c.Issue.ID)
-}
-
-func (r *indexerNotifier) NotifyDeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) {
-       if err := comment.LoadIssue(ctx); err != nil {
-               log.Error("LoadIssue: %v", err)
-               return
-       }
-       issue_indexer.UpdateIssueIndexer(comment.Issue.ID)
-}
-
-func (r *indexerNotifier) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) {
-       issue_indexer.DeleteRepoIssueIndexer(ctx, repo.ID)
-       if setting.Indexer.RepoIndexerEnabled {
-               code_indexer.UpdateRepoIndexer(repo)
-       }
-}
-
-func (r *indexerNotifier) NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) {
-       issue_indexer.UpdateRepoIndexer(ctx, repo.ID)
-       if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty {
-               code_indexer.UpdateRepoIndexer(repo)
-       }
-       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
-               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
-       }
-}
-
-func (r *indexerNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
-       if !opts.RefFullName.IsBranch() {
-               return
-       }
-
-       if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch {
-               code_indexer.UpdateRepoIndexer(repo)
-       }
-       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
-               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
-       }
-}
-
-func (r *indexerNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
-       if !opts.RefFullName.IsBranch() {
-               return
-       }
-
-       if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch {
-               code_indexer.UpdateRepoIndexer(repo)
-       }
-       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
-               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
-       }
-}
-
-func (r *indexerNotifier) NotifyIssueChangeContent(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldContent string) {
-       issue_indexer.UpdateIssueIndexer(issue.ID)
-}
-
-func (r *indexerNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldTitle string) {
-       issue_indexer.UpdateIssueIndexer(issue.ID)
-}
-
-func (r *indexerNotifier) NotifyIssueChangeRef(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldRef string) {
-       issue_indexer.UpdateIssueIndexer(issue.ID)
-}
index 1e22c043a911fde92ca5b56b2448ce0bfdc100e2..093113dcbe5a354793b49935f52a7642c9b6f4d5 100644 (file)
@@ -14,7 +14,6 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/notification/action"
        "code.gitea.io/gitea/modules/notification/base"
-       "code.gitea.io/gitea/modules/notification/indexer"
        "code.gitea.io/gitea/modules/notification/ui"
        "code.gitea.io/gitea/modules/repository"
 )
@@ -30,7 +29,6 @@ func RegisterNotifier(notifier base.Notifier) {
 // NewContext registers notification handlers
 func NewContext() {
        RegisterNotifier(ui.NewNotifier())
-       RegisterNotifier(indexer.NewNotifier())
        RegisterNotifier(action.NewNotifier())
 }
 
index 020fff31c0e389aca4078fcc84448ace1bfeda7a..ad7da70718e6913db913fd433d49a930fbd8e697 100644 (file)
@@ -15,9 +15,6 @@ import (
        "code.gitea.io/gitea/modules/eventsource"
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/highlight"
-       code_indexer "code.gitea.io/gitea/modules/indexer/code"
-       issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
-       stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/markup"
        "code.gitea.io/gitea/modules/markup/external"
@@ -41,6 +38,7 @@ import (
        "code.gitea.io/gitea/services/auth/source/oauth2"
        "code.gitea.io/gitea/services/automerge"
        "code.gitea.io/gitea/services/cron"
+       indexer_service "code.gitea.io/gitea/services/indexer"
        "code.gitea.io/gitea/services/mailer"
        mailer_incoming "code.gitea.io/gitea/services/mailer/incoming"
        markup_service "code.gitea.io/gitea/services/markup"
@@ -143,9 +141,7 @@ func InitWebInstalled(ctx context.Context) {
        mustInit(repo_service.Init)
 
        // Booting long running goroutines.
-       issue_indexer.InitIssueIndexer(false)
-       code_indexer.Init()
-       mustInit(stats_indexer.Init)
+       mustInit(indexer_service.Init)
 
        mirror_service.InitSyncMirrors()
        mustInit(webhook.Init)
diff --git a/services/indexer/indexer.go b/services/indexer/indexer.go
new file mode 100644 (file)
index 0000000..d5f31d9
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package indexer
+
+import (
+       code_indexer "code.gitea.io/gitea/modules/indexer/code"
+       issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
+       stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
+       "code.gitea.io/gitea/modules/notification"
+)
+
+// Init initialize the repo indexer
+func Init() error {
+       notification.RegisterNotifier(NewNotifier())
+
+       issue_indexer.InitIssueIndexer(false)
+       code_indexer.Init()
+       return stats_indexer.Init()
+}
diff --git a/services/indexer/notify.go b/services/indexer/notify.go
new file mode 100644 (file)
index 0000000..a18c66e
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package indexer
+
+import (
+       "context"
+
+       issues_model "code.gitea.io/gitea/models/issues"
+       repo_model "code.gitea.io/gitea/models/repo"
+       user_model "code.gitea.io/gitea/models/user"
+       code_indexer "code.gitea.io/gitea/modules/indexer/code"
+       issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
+       stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
+       "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/notification/base"
+       "code.gitea.io/gitea/modules/repository"
+       "code.gitea.io/gitea/modules/setting"
+)
+
+type indexerNotifier struct {
+       base.NullNotifier
+}
+
+var _ base.Notifier = &indexerNotifier{}
+
+// NewNotifier create a new indexerNotifier notifier
+func NewNotifier() base.Notifier {
+       return &indexerNotifier{}
+}
+
+func (r *indexerNotifier) NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) {
+       r.NotifyMigrateRepository(ctx, doer, u, repo)
+}
+
+func (r *indexerNotifier) NotifyCreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository,
+       issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User,
+) {
+       issue_indexer.UpdateIssueIndexer(issue.ID)
+}
+
+func (r *indexerNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) {
+       issue_indexer.UpdateIssueIndexer(issue.ID)
+}
+
+func (r *indexerNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) {
+       if err := pr.LoadIssue(ctx); err != nil {
+               log.Error("LoadIssue: %v", err)
+               return
+       }
+       issue_indexer.UpdateIssueIndexer(pr.Issue.ID)
+}
+
+func (r *indexerNotifier) NotifyUpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) {
+       if err := c.LoadIssue(ctx); err != nil {
+               log.Error("LoadIssue: %v", err)
+               return
+       }
+       issue_indexer.UpdateIssueIndexer(c.Issue.ID)
+}
+
+func (r *indexerNotifier) NotifyDeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) {
+       if err := comment.LoadIssue(ctx); err != nil {
+               log.Error("LoadIssue: %v", err)
+               return
+       }
+       issue_indexer.UpdateIssueIndexer(comment.Issue.ID)
+}
+
+func (r *indexerNotifier) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) {
+       issue_indexer.DeleteRepoIssueIndexer(ctx, repo.ID)
+       if setting.Indexer.RepoIndexerEnabled {
+               code_indexer.UpdateRepoIndexer(repo)
+       }
+}
+
+func (r *indexerNotifier) NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) {
+       issue_indexer.UpdateRepoIndexer(ctx, repo.ID)
+       if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty {
+               code_indexer.UpdateRepoIndexer(repo)
+       }
+       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
+               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
+       }
+}
+
+func (r *indexerNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
+       if !opts.RefFullName.IsBranch() {
+               return
+       }
+
+       if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch {
+               code_indexer.UpdateRepoIndexer(repo)
+       }
+       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
+               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
+       }
+}
+
+func (r *indexerNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
+       if !opts.RefFullName.IsBranch() {
+               return
+       }
+
+       if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch {
+               code_indexer.UpdateRepoIndexer(repo)
+       }
+       if err := stats_indexer.UpdateRepoIndexer(repo); err != nil {
+               log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err)
+       }
+}
+
+func (r *indexerNotifier) NotifyIssueChangeContent(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldContent string) {
+       issue_indexer.UpdateIssueIndexer(issue.ID)
+}
+
+func (r *indexerNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldTitle string) {
+       issue_indexer.UpdateIssueIndexer(issue.ID)
+}
+
+func (r *indexerNotifier) NotifyIssueChangeRef(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldRef string) {
+       issue_indexer.UpdateIssueIndexer(issue.ID)
+}