]> source.dussan.org Git - gitea.git/commitdiff
Add Adopt repository event and handler (#25497) (#25518)
authorGiteabot <teabot@gitea.io>
Mon, 26 Jun 2023 20:09:07 +0000 (16:09 -0400)
committerGitHub <noreply@github.com>
Mon, 26 Jun 2023 20:09:07 +0000 (20:09 +0000)
Backport #25497 by @lunny

Fix #14304

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: KN4CK3R <admin@oldschoolhack.me>
modules/notification/base/notifier.go
modules/notification/base/null.go
modules/notification/indexer/indexer.go
modules/notification/notification.go
services/repository/adopt.go

index e1762bb1ee9a256e102ead57aea97176886378e4..be4d774a8b05ab2cd89b4483ea2b04c71e0e1c15 100644 (file)
@@ -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)
index 338790b356426330f6ed4a7d2d5ed75ffa38567b..56a25394f995ece2d239a62d5355b86056eb8a91 100644 (file)
@@ -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) {
 }
index 0661c2c1ab49d4d4865e0742c0a609d3dd7f167f..bb652e39426be075515fda5db696b986a0e02e07 100644 (file)
@@ -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,
 ) {
index 6153c9e3d6870556d3472ab50e41cc30bf57de4b..99e1a06ebda4758070017db3645683bed93927f3 100644 (file)
@@ -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 {
index 55e77a78a78a913ec4443d5c22c63502eee526a2..e07ff3504191522b6948fc954feb0bcdfcb49819 100644 (file)
@@ -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)