Move some actions to notification/action (#8779)
* Move some actions to notification/action * Fix test * fix test
This commit is contained in:
parent
fb459f2c2c
commit
016a5d0438
10 changed files with 88 additions and 107 deletions
|
@ -283,49 +283,6 @@ func (a *Action) GetIssueContent() string {
|
||||||
return issue.Content
|
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.
|
// PushCommit represents a commit in a push operation.
|
||||||
type PushCommit struct {
|
type PushCommit struct {
|
||||||
Sha1 string
|
Sha1 string
|
||||||
|
|
|
@ -2,7 +2,6 @@ package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
@ -28,58 +27,6 @@ func TestAction_GetRepoLink(t *testing.T) {
|
||||||
assert.Equal(t, expected, action.GetRepoLink())
|
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) {
|
func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
|
||||||
pushCommits := NewPushCommits()
|
pushCommits := NewPushCommits()
|
||||||
pushCommits.Commits = []*PushCommit{
|
pushCommits.Commits = []*PushCommit{
|
||||||
|
|
|
@ -1469,8 +1469,15 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err
|
||||||
return fmt.Errorf("watchRepo: %v", err)
|
return fmt.Errorf("watchRepo: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err = newRepoAction(e, doer, repo); err != nil {
|
if err = notifyWatchers(e, &Action{
|
||||||
return fmt.Errorf("newRepoAction: %v", err)
|
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 {
|
if err = copyDefaultWebhooksToRepo(e, repo.ID); err != nil {
|
||||||
|
|
|
@ -20,7 +20,7 @@ var (
|
||||||
_ base.Notifier = &actionNotifier{}
|
_ base.Notifier = &actionNotifier{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewNotifier create a new webhookNotifier notifier
|
// NewNotifier create a new actionNotifier notifier
|
||||||
func NewNotifier() base.Notifier {
|
func NewNotifier() base.Notifier {
|
||||||
return &actionNotifier{}
|
return &actionNotifier{}
|
||||||
}
|
}
|
||||||
|
@ -75,3 +75,19 @@ func (a *actionNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
|
||||||
log.Error("NotifyWatchers: %v", err)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
47
modules/notification/action/action_test.go
Normal file
47
modules/notification/action/action_test.go
Normal file
|
@ -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{})
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ type Notifier interface {
|
||||||
NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository)
|
NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository)
|
||||||
NotifyDeleteRepository(doer *models.User, repo *models.Repository)
|
NotifyDeleteRepository(doer *models.User, repo *models.Repository)
|
||||||
NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
|
NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
|
||||||
|
NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName string)
|
||||||
|
|
||||||
NotifyNewIssue(*models.Issue)
|
NotifyNewIssue(*models.Issue)
|
||||||
NotifyIssueChangeStatus(*models.User, *models.Issue, bool)
|
NotifyIssueChangeStatus(*models.User, *models.Issue, bool)
|
||||||
|
|
|
@ -66,6 +66,10 @@ func (*NullNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repo
|
||||||
func (*NullNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
|
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
|
// NotifyNewRelease places a place holder function
|
||||||
func (*NullNotifier) NotifyNewRelease(rel *models.Release) {
|
func (*NullNotifier) NotifyNewRelease(rel *models.Release) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
// NotifyNewRelease notifies new release to notifiers
|
||||||
func NotifyNewRelease(rel *models.Release) {
|
func NotifyNewRelease(rel *models.Release) {
|
||||||
for _, notifier := range notifiers {
|
for _, notifier := range notifiers {
|
||||||
|
|
|
@ -603,11 +603,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := models.RenameRepoAction(ctx.User, oldRepoName, repo); err != nil {
|
notification.NotifyRenameRepository(ctx.User, repo, oldRepoName)
|
||||||
log.Error("RenameRepoAction: %v", err)
|
|
||||||
ctx.Error(http.StatusInternalServerError, "RenameRepoActions", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Repository name changed: %s/%s -> %s", ctx.Repo.Owner.Name, repo.Name, newRepoName)
|
log.Trace("Repository name changed: %s/%s -> %s", ctx.Repo.Owner.Name, repo.Name, newRepoName)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/context"
|
"code.gitea.io/gitea/modules/context"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/notification"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/validation"
|
"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)
|
log.Trace("Repository basic settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name)
|
||||||
|
|
||||||
if isNameChanged {
|
if isNameChanged {
|
||||||
if err := models.RenameRepoAction(ctx.User, oldRepoName, repo); err != nil {
|
notification.NotifyRenameRepository(ctx.User, repo, oldRepoName)
|
||||||
log.Error("RenameRepoAction: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
|
ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
|
||||||
|
|
Reference in a new issue