]> source.dussan.org Git - gitea.git/commitdiff
Move some actions to notification/action (#8779)
authorLunny Xiao <xiaolunwen@gmail.com>
Fri, 8 Nov 2019 20:54:50 +0000 (04:54 +0800)
committertechknowlogick <techknowlogick@gitea.io>
Fri, 8 Nov 2019 20:54:50 +0000 (15:54 -0500)
* Move some actions to notification/action

* Fix test

* fix test

models/action.go
models/action_test.go
models/repo.go
modules/notification/action/action.go
modules/notification/action/action_test.go [new file with mode: 0644]
modules/notification/base/notifier.go
modules/notification/base/null.go
modules/notification/notification.go
routers/api/v1/repo/repo.go
routers/repo/setting.go

index b651c658d53d67f22ecd820c0d75f489fdf262ec..ddb82e0f4c86bee0c371809b64942983347a4a0c 100644 (file)
@@ -283,49 +283,6 @@ func (a *Action) GetIssueContent() string {
        return issue.Content
 }
 
-func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
-       if err = notifyWatchers(e, &Action{
-               ActUserID: u.ID,
-               ActUser:   u,
-               OpType:    ActionCreateRepo,
-               RepoID:    repo.ID,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-       }); err != nil {
-               return fmt.Errorf("notify watchers '%d/%d': %v", u.ID, repo.ID, err)
-       }
-
-       log.Trace("action.newRepoAction: %s/%s", u.Name, repo.Name)
-       return err
-}
-
-// NewRepoAction adds new action for creating repository.
-func NewRepoAction(u *User, repo *Repository) (err error) {
-       return newRepoAction(x, u, repo)
-}
-
-func renameRepoAction(e Engine, actUser *User, oldRepoName string, repo *Repository) (err error) {
-       if err = notifyWatchers(e, &Action{
-               ActUserID: actUser.ID,
-               ActUser:   actUser,
-               OpType:    ActionRenameRepo,
-               RepoID:    repo.ID,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-               Content:   oldRepoName,
-       }); err != nil {
-               return fmt.Errorf("notify watchers: %v", err)
-       }
-
-       log.Trace("action.renameRepoAction: %s/%s", actUser.Name, repo.Name)
-       return nil
-}
-
-// RenameRepoAction adds new action for renaming a repository.
-func RenameRepoAction(actUser *User, oldRepoName string, repo *Repository) error {
-       return renameRepoAction(x, actUser, oldRepoName, repo)
-}
-
 // PushCommit represents a commit in a push operation.
 type PushCommit struct {
        Sha1           string
index df41556850d0ce02b3088115bd645ed2f0249d9a..5eb89aac212073b367d2fca5c886442c107cf94c 100644 (file)
@@ -2,7 +2,6 @@ package models
 
 import (
        "path"
-       "strings"
        "testing"
 
        "code.gitea.io/gitea/modules/setting"
@@ -28,58 +27,6 @@ func TestAction_GetRepoLink(t *testing.T) {
        assert.Equal(t, expected, action.GetRepoLink())
 }
 
-func TestNewRepoAction(t *testing.T) {
-       assert.NoError(t, PrepareTestDatabase())
-
-       user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
-       repo := AssertExistsAndLoadBean(t, &Repository{OwnerID: user.ID}).(*Repository)
-       repo.Owner = user
-
-       actionBean := &Action{
-               OpType:    ActionCreateRepo,
-               ActUserID: user.ID,
-               RepoID:    repo.ID,
-               ActUser:   user,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-       }
-
-       AssertNotExistsBean(t, actionBean)
-       assert.NoError(t, NewRepoAction(user, repo))
-       AssertExistsAndLoadBean(t, actionBean)
-       CheckConsistencyFor(t, &Action{})
-}
-
-func TestRenameRepoAction(t *testing.T) {
-       assert.NoError(t, PrepareTestDatabase())
-
-       user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
-       repo := AssertExistsAndLoadBean(t, &Repository{OwnerID: user.ID}).(*Repository)
-       repo.Owner = user
-
-       oldRepoName := repo.Name
-       const newRepoName = "newRepoName"
-       repo.Name = newRepoName
-       repo.LowerName = strings.ToLower(newRepoName)
-
-       actionBean := &Action{
-               OpType:    ActionRenameRepo,
-               ActUserID: user.ID,
-               ActUser:   user,
-               RepoID:    repo.ID,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-               Content:   oldRepoName,
-       }
-       AssertNotExistsBean(t, actionBean)
-       assert.NoError(t, RenameRepoAction(user, oldRepoName, repo))
-       AssertExistsAndLoadBean(t, actionBean)
-
-       _, err := x.ID(repo.ID).Cols("name", "lower_name").Update(repo)
-       assert.NoError(t, err)
-       CheckConsistencyFor(t, &Action{})
-}
-
 func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
        pushCommits := NewPushCommits()
        pushCommits.Commits = []*PushCommit{
index 89e579d1ec8fd14019ceb8329c1102da91b42bf2..e0a93aaebfdeedd507849294ea8d1c5124a25995 100644 (file)
@@ -1469,8 +1469,15 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err
                        return fmt.Errorf("watchRepo: %v", err)
                }
        }
-       if err = newRepoAction(e, doer, repo); err != nil {
-               return fmt.Errorf("newRepoAction: %v", err)
+       if err = notifyWatchers(e, &Action{
+               ActUserID: doer.ID,
+               ActUser:   doer,
+               OpType:    ActionCreateRepo,
+               RepoID:    repo.ID,
+               Repo:      repo,
+               IsPrivate: repo.IsPrivate,
+       }); err != nil {
+               return fmt.Errorf("notify watchers '%d/%d': %v", doer.ID, repo.ID, err)
        }
 
        if err = copyDefaultWebhooksToRepo(e, repo.ID); err != nil {
index 15228f65e75a04ca1063f2397ce5abdead845e01..52471c1107909c0a528d4242af82635cb7ff2cc2 100644 (file)
@@ -20,7 +20,7 @@ var (
        _ base.Notifier = &actionNotifier{}
 )
 
-// NewNotifier create a new webhookNotifier notifier
+// NewNotifier create a new actionNotifier notifier
 func NewNotifier() base.Notifier {
        return &actionNotifier{}
 }
@@ -75,3 +75,19 @@ func (a *actionNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
                log.Error("NotifyWatchers: %v", err)
        }
 }
+
+func (a *actionNotifier) NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName string) {
+       if err := models.NotifyWatchers(&models.Action{
+               ActUserID: doer.ID,
+               ActUser:   doer,
+               OpType:    models.ActionRenameRepo,
+               RepoID:    repo.ID,
+               Repo:      repo,
+               IsPrivate: repo.IsPrivate,
+               Content:   oldName,
+       }); err != nil {
+               log.Error("notify watchers: %v", err)
+       } else {
+               log.Trace("action.renameRepoAction: %s/%s", doer.Name, repo.Name)
+       }
+}
diff --git a/modules/notification/action/action_test.go b/modules/notification/action/action_test.go
new file mode 100644 (file)
index 0000000..cdfe4bd
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package action
+
+import (
+       "path/filepath"
+       "strings"
+       "testing"
+
+       "code.gitea.io/gitea/models"
+       "github.com/stretchr/testify/assert"
+)
+
+func TestMain(m *testing.M) {
+       models.MainTest(m, filepath.Join("..", "..", ".."))
+}
+
+func TestRenameRepoAction(t *testing.T) {
+       assert.NoError(t, models.PrepareTestDatabase())
+
+       user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
+       repo := models.AssertExistsAndLoadBean(t, &models.Repository{OwnerID: user.ID}).(*models.Repository)
+       repo.Owner = user
+
+       oldRepoName := repo.Name
+       const newRepoName = "newRepoName"
+       repo.Name = newRepoName
+       repo.LowerName = strings.ToLower(newRepoName)
+
+       actionBean := &models.Action{
+               OpType:    models.ActionRenameRepo,
+               ActUserID: user.ID,
+               ActUser:   user,
+               RepoID:    repo.ID,
+               Repo:      repo,
+               IsPrivate: repo.IsPrivate,
+               Content:   oldRepoName,
+       }
+       models.AssertNotExistsBean(t, actionBean)
+
+       NewNotifier().NotifyRenameRepository(user, repo, oldRepoName)
+
+       models.AssertExistsAndLoadBean(t, actionBean)
+       models.CheckConsistencyFor(t, &models.Action{})
+}
index 72bf52c938ac568686de98b08422766c4a30bd46..9510afc97867fa0b4525dadfeb012b94b18f4cc9 100644 (file)
@@ -17,6 +17,7 @@ type Notifier interface {
        NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository)
        NotifyDeleteRepository(doer *models.User, repo *models.Repository)
        NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
+       NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName string)
 
        NotifyNewIssue(*models.Issue)
        NotifyIssueChangeStatus(*models.User, *models.Issue, bool)
index a9d9d6a1640b5b68f234561a9558cd23339ad89a..2341b8d2a754e742ab5cd1a73c2de76946029edd 100644 (file)
@@ -66,6 +66,10 @@ func (*NullNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repo
 func (*NullNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
 }
 
+// NotifyRenameRepository places a place holder function
+func (*NullNotifier) NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName string) {
+}
+
 // NotifyNewRelease places a place holder function
 func (*NullNotifier) NotifyNewRelease(rel *models.Release) {
 }
index 5ac09a72e5c6dc70438bb84eaaf4fa358d1e7037..fdfcc62ffe1e11947728569b83c3ca31b5a4c6c4 100644 (file)
@@ -115,6 +115,13 @@ func NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
        }
 }
 
+// NotifyRenameRepository notifies repository renamed
+func NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName string) {
+       for _, notifier := range notifiers {
+               notifier.NotifyRenameRepository(doer, repo, oldName)
+       }
+}
+
 // NotifyNewRelease notifies new release to notifiers
 func NotifyNewRelease(rel *models.Release) {
        for _, notifier := range notifiers {
index 422bb0ac3a2ef3940133d8da515c9dbc1d7e4033..d366435a2fe19bb7845af7024b414c69569d18be 100644 (file)
@@ -603,11 +603,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
                        return err
                }
 
-               if err := models.RenameRepoAction(ctx.User, oldRepoName, repo); err != nil {
-                       log.Error("RenameRepoAction: %v", err)
-                       ctx.Error(http.StatusInternalServerError, "RenameRepoActions", err)
-                       return err
-               }
+               notification.NotifyRenameRepository(ctx.User, repo, oldRepoName)
 
                log.Trace("Repository name changed: %s/%s -> %s", ctx.Repo.Owner.Name, repo.Name, newRepoName)
        }
index 663394fe3db6d7571ea9529cbe1971ce8c31b286..95cba3cbf25719ffabbd27aed4f00e04ada60d5d 100644 (file)
@@ -20,6 +20,7 @@ import (
        "code.gitea.io/gitea/modules/context"
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/notification"
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/timeutil"
        "code.gitea.io/gitea/modules/validation"
@@ -121,9 +122,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
                log.Trace("Repository basic settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name)
 
                if isNameChanged {
-                       if err := models.RenameRepoAction(ctx.User, oldRepoName, repo); err != nil {
-                               log.Error("RenameRepoAction: %v", err)
-                       }
+                       notification.NotifyRenameRepository(ctx.User, repo, oldRepoName)
                }
 
                ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))