code.gitea.io/gitea@v1.21.7/services/indexer/notify.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package indexer 5 6 import ( 7 "context" 8 9 issues_model "code.gitea.io/gitea/models/issues" 10 repo_model "code.gitea.io/gitea/models/repo" 11 user_model "code.gitea.io/gitea/models/user" 12 code_indexer "code.gitea.io/gitea/modules/indexer/code" 13 issue_indexer "code.gitea.io/gitea/modules/indexer/issues" 14 stats_indexer "code.gitea.io/gitea/modules/indexer/stats" 15 "code.gitea.io/gitea/modules/log" 16 "code.gitea.io/gitea/modules/repository" 17 "code.gitea.io/gitea/modules/setting" 18 notify_service "code.gitea.io/gitea/services/notify" 19 ) 20 21 type indexerNotifier struct { 22 notify_service.NullNotifier 23 } 24 25 var _ notify_service.Notifier = &indexerNotifier{} 26 27 // NewNotifier create a new indexerNotifier notifier 28 func NewNotifier() notify_service.Notifier { 29 return &indexerNotifier{} 30 } 31 32 func (r *indexerNotifier) AdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { 33 r.MigrateRepository(ctx, doer, u, repo) 34 } 35 36 func (r *indexerNotifier) CreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, 37 issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User, 38 ) { 39 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 40 } 41 42 func (r *indexerNotifier) NewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) { 43 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 44 } 45 46 func (r *indexerNotifier) NewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) { 47 if err := pr.LoadIssue(ctx); err != nil { 48 log.Error("LoadIssue: %v", err) 49 return 50 } 51 issue_indexer.UpdateIssueIndexer(ctx, pr.Issue.ID) 52 } 53 54 func (r *indexerNotifier) UpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) { 55 if err := c.LoadIssue(ctx); err != nil { 56 log.Error("LoadIssue: %v", err) 57 return 58 } 59 issue_indexer.UpdateIssueIndexer(ctx, c.Issue.ID) 60 } 61 62 func (r *indexerNotifier) DeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) { 63 if err := comment.LoadIssue(ctx); err != nil { 64 log.Error("LoadIssue: %v", err) 65 return 66 } 67 issue_indexer.UpdateIssueIndexer(ctx, comment.Issue.ID) 68 } 69 70 func (r *indexerNotifier) DeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) { 71 issue_indexer.DeleteRepoIssueIndexer(ctx, repo.ID) 72 if setting.Indexer.RepoIndexerEnabled { 73 code_indexer.UpdateRepoIndexer(repo) 74 } 75 } 76 77 func (r *indexerNotifier) MigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { 78 issue_indexer.UpdateRepoIndexer(ctx, repo.ID) 79 if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty { 80 code_indexer.UpdateRepoIndexer(repo) 81 } 82 if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { 83 log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) 84 } 85 } 86 87 func (r *indexerNotifier) PushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { 88 if !opts.RefFullName.IsBranch() { 89 return 90 } 91 92 if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { 93 code_indexer.UpdateRepoIndexer(repo) 94 } 95 if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { 96 log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) 97 } 98 } 99 100 func (r *indexerNotifier) SyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { 101 if !opts.RefFullName.IsBranch() { 102 return 103 } 104 105 if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { 106 code_indexer.UpdateRepoIndexer(repo) 107 } 108 if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { 109 log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) 110 } 111 } 112 113 func (r *indexerNotifier) ChangeDefaultBranch(ctx context.Context, repo *repo_model.Repository) { 114 if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty { 115 code_indexer.UpdateRepoIndexer(repo) 116 } 117 if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { 118 log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) 119 } 120 } 121 122 func (r *indexerNotifier) IssueChangeContent(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldContent string) { 123 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 124 } 125 126 func (r *indexerNotifier) IssueChangeTitle(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldTitle string) { 127 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 128 } 129 130 func (r *indexerNotifier) IssueChangeRef(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldRef string) { 131 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 132 } 133 134 func (r *indexerNotifier) IssueChangeStatus(ctx context.Context, doer *user_model.User, commitID string, issue *issues_model.Issue, actionComment *issues_model.Comment, closeOrReopen bool) { 135 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 136 } 137 138 func (r *indexerNotifier) IssueChangeAssignee(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, assignee *user_model.User, removed bool, comment *issues_model.Comment) { 139 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 140 } 141 142 func (r *indexerNotifier) IssueChangeMilestone(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldMilestoneID int64) { 143 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 144 } 145 146 func (r *indexerNotifier) IssueChangeLabels(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, 147 addedLabels, removedLabels []*issues_model.Label, 148 ) { 149 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 150 } 151 152 func (r *indexerNotifier) IssueClearLabels(ctx context.Context, doer *user_model.User, issue *issues_model.Issue) { 153 issue_indexer.UpdateIssueIndexer(ctx, issue.ID) 154 }