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  }