mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Move some actions to notification/action (#8779)
* Move some actions to notification/action * Fix test * fix test
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							fb459f2c2c
						
					
				
				
					commit
					016a5d0438
				
			@@ -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 New Issue
	
	Block a user