diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2023-09-05 18:07:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-05 10:07:57 +0000 |
commit | aa678b80985c5dcb92cef15e19bd963c47a647db (patch) | |
tree | 94e829dece002ceafe70f3382d25d57e602e8a79 /services | |
parent | a66d883a18c5eefc475c3b61c0842a87b4ce250f (diff) | |
download | gitea-aa678b80985c5dcb92cef15e19bd963c47a647db.tar.gz gitea-aa678b80985c5dcb92cef15e19bd963c47a647db.zip |
Move indexer notification to service layer (#26906)
Extract from #22266
Diffstat (limited to 'services')
-rw-r--r-- | services/indexer/indexer.go | 20 | ||||
-rw-r--r-- | services/indexer/notify.go | 123 |
2 files changed, 143 insertions, 0 deletions
diff --git a/services/indexer/indexer.go b/services/indexer/indexer.go new file mode 100644 index 0000000000..d5f31d99ea --- /dev/null +++ b/services/indexer/indexer.go @@ -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 index 0000000000..a18c66edb5 --- /dev/null +++ b/services/indexer/notify.go @@ -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) +} |