From d44a415bf019393b85a33aa31244f52d43f55080 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 26 Jun 2023 14:59:15 +0800 Subject: [PATCH] Add Adopt repository event and handler (#25497) Fix #14304 --------- Co-authored-by: delvh --- modules/notification/base/notifier.go | 1 + modules/notification/base/null.go | 4 ++++ modules/notification/indexer/indexer.go | 4 ++++ modules/notification/notification.go | 7 +++++++ services/repository/adopt.go | 24 +++++++++++++----------- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go index e1762bb1ee9..be4d774a8b0 100644 --- a/modules/notification/base/notifier.go +++ b/modules/notification/base/notifier.go @@ -17,6 +17,7 @@ import ( // Notifier defines an interface to notify receiver type Notifier interface { Run() + NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) NotifyCreateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go index 338790b3564..56a25394f99 100644 --- a/modules/notification/base/null.go +++ b/modules/notification/base/null.go @@ -145,6 +145,10 @@ func (*NullNotifier) NotifyIssueChangeLabels(ctx context.Context, doer *user_mod func (*NullNotifier) NotifyCreateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { } +// NotifyAdoptRepository places a place holder function +func (*NullNotifier) NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { +} + // NotifyDeleteRepository places a place holder function func (*NullNotifier) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) { } diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go index 0661c2c1ab4..bb652e39426 100644 --- a/modules/notification/indexer/indexer.go +++ b/modules/notification/indexer/indexer.go @@ -29,6 +29,10 @@ 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, ) { diff --git a/modules/notification/notification.go b/modules/notification/notification.go index 6153c9e3d68..99e1a06ebda 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -274,6 +274,13 @@ func NotifyCreateRepository(ctx context.Context, doer, u *user_model.User, repo } } +// NotifyAdoptRepository notifies the adoption of a repository to notifiers +func NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { + for _, notifier := range notifiers { + notifier.NotifyAdoptRepository(ctx, doer, u, repo) + } +} + // NotifyMigrateRepository notifies create repository to notifiers func NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { for _, notifier := range notifiers { diff --git a/services/repository/adopt.go b/services/repository/adopt.go index 55e77a78a78..e07ff350419 100644 --- a/services/repository/adopt.go +++ b/services/repository/adopt.go @@ -70,9 +70,17 @@ func AdoptRepository(ctx context.Context, doer, u *user_model.User, opts repo_mo if err := repo_module.CreateRepositoryByExample(ctx, doer, u, repo, true, false); err != nil { return err } - if err := adoptRepository(ctx, repoPath, doer, repo, opts); err != nil { + + // Re-fetch the repository from database before updating it (else it would + // override changes that were done earlier with sql) + if repo, err = repo_model.GetRepositoryByID(ctx, repo.ID); err != nil { + return fmt.Errorf("getRepositoryByID: %w", err) + } + + if err := adoptRepository(ctx, repoPath, doer, repo, opts.DefaultBranch); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) } + if err := repo_module.CheckDaemonExportOK(ctx, repo); err != nil { return fmt.Errorf("checkDaemonExportOK: %w", err) } @@ -95,12 +103,12 @@ func AdoptRepository(ctx context.Context, doer, u *user_model.User, opts repo_mo return nil, err } - notification.NotifyCreateRepository(ctx, doer, u, repo) + notification.NotifyAdoptRepository(ctx, doer, u, repo) return repo, nil } -func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, repo *repo_model.Repository, opts repo_module.CreateRepoOptions) (err error) { +func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, repo *repo_model.Repository, defaultBranch string) (err error) { isExist, err := util.IsExist(repoPath) if err != nil { log.Error("Unable to check if %s exists. Error: %v", repoPath, err) @@ -114,12 +122,6 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r return fmt.Errorf("createDelegateHooks: %w", err) } - // Re-fetch the repository from database before updating it (else it would - // override changes that were done earlier with sql) - if repo, err = repo_model.GetRepositoryByID(ctx, repo.ID); err != nil { - return fmt.Errorf("getRepositoryByID: %w", err) - } - repo.IsEmpty = false // Don't bother looking this repo in the context it won't be there @@ -129,8 +131,8 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r } defer gitRepo.Close() - if len(opts.DefaultBranch) > 0 { - repo.DefaultBranch = opts.DefaultBranch + if len(defaultBranch) > 0 { + repo.DefaultBranch = defaultBranch if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil { return fmt.Errorf("setDefaultBranch: %w", err)