* move commit repo action from models to repofiles package * fix unit teststags/v1.11.0-dev
| @@ -17,7 +17,6 @@ import ( | |||
| "unicode" | |||
| "code.gitea.io/gitea/modules/base" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| api "code.gitea.io/gitea/modules/structs" | |||
| @@ -441,6 +440,9 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit | |||
| // AvatarLink tries to match user in database with e-mail | |||
| // in order to show custom avatar, and falls back to general avatar link. | |||
| func (pc *PushCommits) AvatarLink(email string) string { | |||
| if pc.avatars == nil { | |||
| pc.avatars = make(map[string]string) | |||
| } | |||
| avatar, ok := pc.avatars[email] | |||
| if ok { | |||
| return avatar | |||
| @@ -655,200 +657,6 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit, bra | |||
| return nil | |||
| } | |||
| // CommitRepoActionOptions represent options of a new commit action. | |||
| type CommitRepoActionOptions struct { | |||
| PusherName string | |||
| RepoOwnerID int64 | |||
| RepoName string | |||
| RefFullName string | |||
| OldCommitID string | |||
| NewCommitID string | |||
| Commits *PushCommits | |||
| } | |||
| // CommitRepoAction adds new commit action to the repository, and prepare | |||
| // corresponding webhooks. | |||
| func CommitRepoAction(opts CommitRepoActionOptions) error { | |||
| pusher, err := GetUserByName(opts.PusherName) | |||
| if err != nil { | |||
| return fmt.Errorf("GetUserByName [%s]: %v", opts.PusherName, err) | |||
| } | |||
| repo, err := GetRepositoryByName(opts.RepoOwnerID, opts.RepoName) | |||
| if err != nil { | |||
| return fmt.Errorf("GetRepositoryByName [owner_id: %d, name: %s]: %v", opts.RepoOwnerID, opts.RepoName, err) | |||
| } | |||
| refName := git.RefEndName(opts.RefFullName) | |||
| // Change default branch and empty status only if pushed ref is non-empty branch. | |||
| if repo.IsEmpty && opts.NewCommitID != git.EmptySHA && strings.HasPrefix(opts.RefFullName, git.BranchPrefix) { | |||
| repo.DefaultBranch = refName | |||
| repo.IsEmpty = false | |||
| if refName != "master" { | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| if err := gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil { | |||
| if !git.IsErrUnsupportedVersion(err) { | |||
| return err | |||
| } | |||
| } | |||
| } | |||
| } | |||
| // Change repository empty status and update last updated time. | |||
| if err = UpdateRepository(repo, false); err != nil { | |||
| return fmt.Errorf("UpdateRepository: %v", err) | |||
| } | |||
| isNewBranch := false | |||
| opType := ActionCommitRepo | |||
| // Check it's tag push or branch. | |||
| if strings.HasPrefix(opts.RefFullName, git.TagPrefix) { | |||
| opType = ActionPushTag | |||
| if opts.NewCommitID == git.EmptySHA { | |||
| opType = ActionDeleteTag | |||
| } | |||
| opts.Commits = &PushCommits{} | |||
| } else if opts.NewCommitID == git.EmptySHA { | |||
| opType = ActionDeleteBranch | |||
| opts.Commits = &PushCommits{} | |||
| } else { | |||
| // if not the first commit, set the compare URL. | |||
| if opts.OldCommitID == git.EmptySHA { | |||
| isNewBranch = true | |||
| } else { | |||
| opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) | |||
| } | |||
| if err = UpdateIssuesCommit(pusher, repo, opts.Commits.Commits, refName); err != nil { | |||
| log.Error("updateIssuesCommit: %v", err) | |||
| } | |||
| } | |||
| if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { | |||
| opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] | |||
| } | |||
| data, err := json.Marshal(opts.Commits) | |||
| if err != nil { | |||
| return fmt.Errorf("Marshal: %v", err) | |||
| } | |||
| if err = NotifyWatchers(&Action{ | |||
| ActUserID: pusher.ID, | |||
| ActUser: pusher, | |||
| OpType: opType, | |||
| Content: string(data), | |||
| RepoID: repo.ID, | |||
| Repo: repo, | |||
| RefName: refName, | |||
| IsPrivate: repo.IsPrivate, | |||
| }); err != nil { | |||
| return fmt.Errorf("NotifyWatchers: %v", err) | |||
| } | |||
| defer func() { | |||
| go HookQueue.Add(repo.ID) | |||
| }() | |||
| apiPusher := pusher.APIFormat() | |||
| apiRepo := repo.APIFormat(AccessModeNone) | |||
| var shaSum string | |||
| var isHookEventPush = false | |||
| switch opType { | |||
| case ActionCommitRepo: // Push | |||
| isHookEventPush = true | |||
| if isNewBranch { | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err) | |||
| } | |||
| shaSum, err = gitRepo.GetBranchCommitID(refName) | |||
| if err != nil { | |||
| log.Error("GetBranchCommitID[%s]: %v", opts.RefFullName, err) | |||
| } | |||
| if err = PrepareWebhooks(repo, HookEventCreate, &api.CreatePayload{ | |||
| Ref: refName, | |||
| Sha: shaSum, | |||
| RefType: "branch", | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| } | |||
| case ActionDeleteBranch: // Delete Branch | |||
| isHookEventPush = true | |||
| if err = PrepareWebhooks(repo, HookEventDelete, &api.DeletePayload{ | |||
| Ref: refName, | |||
| RefType: "branch", | |||
| PusherType: api.PusherTypeUser, | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks.(delete branch): %v", err) | |||
| } | |||
| case ActionPushTag: // Create | |||
| isHookEventPush = true | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err) | |||
| } | |||
| shaSum, err = gitRepo.GetTagCommitID(refName) | |||
| if err != nil { | |||
| log.Error("GetTagCommitID[%s]: %v", opts.RefFullName, err) | |||
| } | |||
| if err = PrepareWebhooks(repo, HookEventCreate, &api.CreatePayload{ | |||
| Ref: refName, | |||
| Sha: shaSum, | |||
| RefType: "tag", | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| case ActionDeleteTag: // Delete Tag | |||
| isHookEventPush = true | |||
| if err = PrepareWebhooks(repo, HookEventDelete, &api.DeletePayload{ | |||
| Ref: refName, | |||
| RefType: "tag", | |||
| PusherType: api.PusherTypeUser, | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks.(delete tag): %v", err) | |||
| } | |||
| } | |||
| if isHookEventPush { | |||
| if err = PrepareWebhooks(repo, HookEventPush, &api.PushPayload{ | |||
| Ref: opts.RefFullName, | |||
| Before: opts.OldCommitID, | |||
| After: opts.NewCommitID, | |||
| CompareURL: setting.AppURL + opts.Commits.CompareURL, | |||
| Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()), | |||
| Repo: apiRepo, | |||
| Pusher: apiPusher, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| } | |||
| return nil | |||
| } | |||
| func transferRepoAction(e Engine, doer, oldOwner *User, repo *Repository) (err error) { | |||
| if err = notifyWatchers(e, &Action{ | |||
| ActUserID: doer.ID, | |||
| @@ -6,7 +6,6 @@ import ( | |||
| "strings" | |||
| "testing" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "github.com/stretchr/testify/assert" | |||
| @@ -409,119 +408,6 @@ func TestUpdateIssuesCommit_AnotherRepoNoPermission(t *testing.T) { | |||
| CheckConsistencyFor(t, &Action{}) | |||
| } | |||
| func testCorrectRepoAction(t *testing.T, opts CommitRepoActionOptions, actionBean *Action) { | |||
| AssertNotExistsBean(t, actionBean) | |||
| assert.NoError(t, CommitRepoAction(opts)) | |||
| AssertExistsAndLoadBean(t, actionBean) | |||
| CheckConsistencyFor(t, &Action{}) | |||
| } | |||
| func TestCommitRepoAction(t *testing.T) { | |||
| samples := []struct { | |||
| userID int64 | |||
| repositoryID int64 | |||
| commitRepoActionOptions CommitRepoActionOptions | |||
| action Action | |||
| }{ | |||
| { | |||
| userID: 2, | |||
| repositoryID: 2, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: "refName", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: "newCommitID", | |||
| Commits: &PushCommits{ | |||
| avatars: make(map[string]string), | |||
| Commits: []*PushCommit{ | |||
| { | |||
| Sha1: "abcdef1", | |||
| CommitterEmail: "user2@example.com", | |||
| CommitterName: "User Two", | |||
| AuthorEmail: "user4@example.com", | |||
| AuthorName: "User Four", | |||
| Message: "message1", | |||
| }, | |||
| { | |||
| Sha1: "abcdef2", | |||
| CommitterEmail: "user2@example.com", | |||
| CommitterName: "User Two", | |||
| AuthorEmail: "user2@example.com", | |||
| AuthorName: "User Two", | |||
| Message: "message2", | |||
| }, | |||
| }, | |||
| Len: 2, | |||
| }, | |||
| }, | |||
| action: Action{ | |||
| OpType: ActionCommitRepo, | |||
| RefName: "refName", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.TagPrefix + "v1.1", | |||
| OldCommitID: git.EmptySHA, | |||
| NewCommitID: "newCommitID", | |||
| Commits: &PushCommits{}, | |||
| }, | |||
| action: Action{ | |||
| OpType: ActionPushTag, | |||
| RefName: "v1.1", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.TagPrefix + "v1.1", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: git.EmptySHA, | |||
| Commits: &PushCommits{}, | |||
| }, | |||
| action: Action{ | |||
| OpType: ActionDeleteTag, | |||
| RefName: "v1.1", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.BranchPrefix + "feature/1", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: git.EmptySHA, | |||
| Commits: &PushCommits{}, | |||
| }, | |||
| action: Action{ | |||
| OpType: ActionDeleteBranch, | |||
| RefName: "feature/1", | |||
| }, | |||
| }, | |||
| } | |||
| for _, s := range samples { | |||
| PrepareTestEnv(t) | |||
| user := AssertExistsAndLoadBean(t, &User{ID: s.userID}).(*User) | |||
| repo := AssertExistsAndLoadBean(t, &Repository{ID: s.repositoryID, OwnerID: user.ID}).(*Repository) | |||
| repo.Owner = user | |||
| s.commitRepoActionOptions.PusherName = user.Name | |||
| s.commitRepoActionOptions.RepoOwnerID = user.ID | |||
| s.commitRepoActionOptions.RepoName = repo.Name | |||
| s.action.ActUserID = user.ID | |||
| s.action.RepoID = repo.ID | |||
| s.action.Repo = repo | |||
| s.action.IsPrivate = repo.IsPrivate | |||
| testCorrectRepoAction(t, s.commitRepoActionOptions, &s.action) | |||
| } | |||
| } | |||
| func TestTransferRepoAction(t *testing.T) { | |||
| assert.NoError(t, PrepareTestDatabase()) | |||
| @@ -65,6 +65,13 @@ func MainTest(m *testing.M, pathToGiteaRoot string) { | |||
| fatalTestError("url.Parse: %v\n", err) | |||
| } | |||
| if err = removeAllWithRetry(setting.RepoRootPath); err != nil { | |||
| fatalTestError("os.RemoveAll: %v\n", err) | |||
| } | |||
| if err = com.CopyDir(filepath.Join(pathToGiteaRoot, "integrations", "gitea-repositories-meta"), setting.RepoRootPath); err != nil { | |||
| fatalTestError("com.CopyDir: %v\n", err) | |||
| } | |||
| exitStatus := m.Run() | |||
| if err = removeAllWithRetry(setting.RepoRootPath); err != nil { | |||
| fatalTestError("os.RemoveAll: %v\n", err) | |||
| @@ -0,0 +1,211 @@ | |||
| // 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 repofiles | |||
| import ( | |||
| "encoding/json" | |||
| "fmt" | |||
| "strings" | |||
| "code.gitea.io/gitea/models" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| api "code.gitea.io/gitea/modules/structs" | |||
| ) | |||
| // CommitRepoActionOptions represent options of a new commit action. | |||
| type CommitRepoActionOptions struct { | |||
| PusherName string | |||
| RepoOwnerID int64 | |||
| RepoName string | |||
| RefFullName string | |||
| OldCommitID string | |||
| NewCommitID string | |||
| Commits *models.PushCommits | |||
| } | |||
| // CommitRepoAction adds new commit action to the repository, and prepare | |||
| // corresponding webhooks. | |||
| func CommitRepoAction(opts CommitRepoActionOptions) error { | |||
| pusher, err := models.GetUserByName(opts.PusherName) | |||
| if err != nil { | |||
| return fmt.Errorf("GetUserByName [%s]: %v", opts.PusherName, err) | |||
| } | |||
| repo, err := models.GetRepositoryByName(opts.RepoOwnerID, opts.RepoName) | |||
| if err != nil { | |||
| return fmt.Errorf("GetRepositoryByName [owner_id: %d, name: %s]: %v", opts.RepoOwnerID, opts.RepoName, err) | |||
| } | |||
| refName := git.RefEndName(opts.RefFullName) | |||
| // Change default branch and empty status only if pushed ref is non-empty branch. | |||
| if repo.IsEmpty && opts.NewCommitID != git.EmptySHA && strings.HasPrefix(opts.RefFullName, git.BranchPrefix) { | |||
| repo.DefaultBranch = refName | |||
| repo.IsEmpty = false | |||
| if refName != "master" { | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| if err := gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil { | |||
| if !git.IsErrUnsupportedVersion(err) { | |||
| return err | |||
| } | |||
| } | |||
| } | |||
| } | |||
| // Change repository empty status and update last updated time. | |||
| if err = models.UpdateRepository(repo, false); err != nil { | |||
| return fmt.Errorf("UpdateRepository: %v", err) | |||
| } | |||
| isNewBranch := false | |||
| opType := models.ActionCommitRepo | |||
| // Check it's tag push or branch. | |||
| if strings.HasPrefix(opts.RefFullName, git.TagPrefix) { | |||
| opType = models.ActionPushTag | |||
| if opts.NewCommitID == git.EmptySHA { | |||
| opType = models.ActionDeleteTag | |||
| } | |||
| opts.Commits = &models.PushCommits{} | |||
| } else if opts.NewCommitID == git.EmptySHA { | |||
| opType = models.ActionDeleteBranch | |||
| opts.Commits = &models.PushCommits{} | |||
| } else { | |||
| // if not the first commit, set the compare URL. | |||
| if opts.OldCommitID == git.EmptySHA { | |||
| isNewBranch = true | |||
| } else { | |||
| opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) | |||
| } | |||
| if err = models.UpdateIssuesCommit(pusher, repo, opts.Commits.Commits, refName); err != nil { | |||
| log.Error("updateIssuesCommit: %v", err) | |||
| } | |||
| } | |||
| if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { | |||
| opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] | |||
| } | |||
| data, err := json.Marshal(opts.Commits) | |||
| if err != nil { | |||
| return fmt.Errorf("Marshal: %v", err) | |||
| } | |||
| if err = models.NotifyWatchers(&models.Action{ | |||
| ActUserID: pusher.ID, | |||
| ActUser: pusher, | |||
| OpType: opType, | |||
| Content: string(data), | |||
| RepoID: repo.ID, | |||
| Repo: repo, | |||
| RefName: refName, | |||
| IsPrivate: repo.IsPrivate, | |||
| }); err != nil { | |||
| return fmt.Errorf("NotifyWatchers: %v", err) | |||
| } | |||
| defer func() { | |||
| go models.HookQueue.Add(repo.ID) | |||
| }() | |||
| apiPusher := pusher.APIFormat() | |||
| apiRepo := repo.APIFormat(models.AccessModeNone) | |||
| var shaSum string | |||
| var isHookEventPush = false | |||
| switch opType { | |||
| case models.ActionCommitRepo: // Push | |||
| isHookEventPush = true | |||
| if isNewBranch { | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err) | |||
| } | |||
| shaSum, err = gitRepo.GetBranchCommitID(refName) | |||
| if err != nil { | |||
| log.Error("GetBranchCommitID[%s]: %v", opts.RefFullName, err) | |||
| } | |||
| if err = models.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{ | |||
| Ref: refName, | |||
| Sha: shaSum, | |||
| RefType: "branch", | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| } | |||
| case models.ActionDeleteBranch: // Delete Branch | |||
| isHookEventPush = true | |||
| if err = models.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{ | |||
| Ref: refName, | |||
| RefType: "branch", | |||
| PusherType: api.PusherTypeUser, | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks.(delete branch): %v", err) | |||
| } | |||
| case models.ActionPushTag: // Create | |||
| isHookEventPush = true | |||
| gitRepo, err := git.OpenRepository(repo.RepoPath()) | |||
| if err != nil { | |||
| log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err) | |||
| } | |||
| shaSum, err = gitRepo.GetTagCommitID(refName) | |||
| if err != nil { | |||
| log.Error("GetTagCommitID[%s]: %v", opts.RefFullName, err) | |||
| } | |||
| if err = models.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{ | |||
| Ref: refName, | |||
| Sha: shaSum, | |||
| RefType: "tag", | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| case models.ActionDeleteTag: // Delete Tag | |||
| isHookEventPush = true | |||
| if err = models.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{ | |||
| Ref: refName, | |||
| RefType: "tag", | |||
| PusherType: api.PusherTypeUser, | |||
| Repo: apiRepo, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks.(delete tag): %v", err) | |||
| } | |||
| } | |||
| if isHookEventPush { | |||
| if err = models.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | |||
| Ref: opts.RefFullName, | |||
| Before: opts.OldCommitID, | |||
| After: opts.NewCommitID, | |||
| CompareURL: setting.AppURL + opts.Commits.CompareURL, | |||
| Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()), | |||
| Repo: apiRepo, | |||
| Pusher: apiPusher, | |||
| Sender: apiPusher, | |||
| }); err != nil { | |||
| return fmt.Errorf("PrepareWebhooks: %v", err) | |||
| } | |||
| } | |||
| return nil | |||
| } | |||
| @@ -0,0 +1,126 @@ | |||
| // 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 repofiles | |||
| import ( | |||
| "testing" | |||
| "code.gitea.io/gitea/models" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "github.com/stretchr/testify/assert" | |||
| ) | |||
| func testCorrectRepoAction(t *testing.T, opts CommitRepoActionOptions, actionBean *models.Action) { | |||
| models.AssertNotExistsBean(t, actionBean) | |||
| assert.NoError(t, CommitRepoAction(opts)) | |||
| models.AssertExistsAndLoadBean(t, actionBean) | |||
| models.CheckConsistencyFor(t, &models.Action{}) | |||
| } | |||
| func TestCommitRepoAction(t *testing.T) { | |||
| samples := []struct { | |||
| userID int64 | |||
| repositoryID int64 | |||
| commitRepoActionOptions CommitRepoActionOptions | |||
| action models.Action | |||
| }{ | |||
| { | |||
| userID: 2, | |||
| repositoryID: 2, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: "refName", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: "newCommitID", | |||
| Commits: &models.PushCommits{ | |||
| Commits: []*models.PushCommit{ | |||
| { | |||
| Sha1: "abcdef1", | |||
| CommitterEmail: "user2@example.com", | |||
| CommitterName: "User Two", | |||
| AuthorEmail: "user4@example.com", | |||
| AuthorName: "User Four", | |||
| Message: "message1", | |||
| }, | |||
| { | |||
| Sha1: "abcdef2", | |||
| CommitterEmail: "user2@example.com", | |||
| CommitterName: "User Two", | |||
| AuthorEmail: "user2@example.com", | |||
| AuthorName: "User Two", | |||
| Message: "message2", | |||
| }, | |||
| }, | |||
| Len: 2, | |||
| }, | |||
| }, | |||
| action: models.Action{ | |||
| OpType: models.ActionCommitRepo, | |||
| RefName: "refName", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.TagPrefix + "v1.1", | |||
| OldCommitID: git.EmptySHA, | |||
| NewCommitID: "newCommitID", | |||
| Commits: &models.PushCommits{}, | |||
| }, | |||
| action: models.Action{ | |||
| OpType: models.ActionPushTag, | |||
| RefName: "v1.1", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.TagPrefix + "v1.1", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: git.EmptySHA, | |||
| Commits: &models.PushCommits{}, | |||
| }, | |||
| action: models.Action{ | |||
| OpType: models.ActionDeleteTag, | |||
| RefName: "v1.1", | |||
| }, | |||
| }, | |||
| { | |||
| userID: 2, | |||
| repositoryID: 1, | |||
| commitRepoActionOptions: CommitRepoActionOptions{ | |||
| RefFullName: git.BranchPrefix + "feature/1", | |||
| OldCommitID: "oldCommitID", | |||
| NewCommitID: git.EmptySHA, | |||
| Commits: &models.PushCommits{}, | |||
| }, | |||
| action: models.Action{ | |||
| OpType: models.ActionDeleteBranch, | |||
| RefName: "feature/1", | |||
| }, | |||
| }, | |||
| } | |||
| for _, s := range samples { | |||
| models.PrepareTestEnv(t) | |||
| user := models.AssertExistsAndLoadBean(t, &models.User{ID: s.userID}).(*models.User) | |||
| repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: s.repositoryID, OwnerID: user.ID}).(*models.Repository) | |||
| repo.Owner = user | |||
| s.commitRepoActionOptions.PusherName = user.Name | |||
| s.commitRepoActionOptions.RepoOwnerID = user.ID | |||
| s.commitRepoActionOptions.RepoName = repo.Name | |||
| s.action.ActUserID = user.ID | |||
| s.action.RepoID = repo.ID | |||
| s.action.Repo = repo | |||
| s.action.IsPrivate = repo.IsPrivate | |||
| testCorrectRepoAction(t, s.commitRepoActionOptions, &s.action) | |||
| } | |||
| } | |||
| @@ -497,7 +497,7 @@ func PushUpdate(repo *models.Repository, branch string, opts models.PushUpdateOp | |||
| commits = models.ListToPushCommits(l) | |||
| } | |||
| if err := models.CommitRepoAction(models.CommitRepoActionOptions{ | |||
| if err := CommitRepoAction(CommitRepoActionOptions{ | |||
| PusherName: opts.PusherName, | |||
| RepoOwnerID: repo.OwnerID, | |||
| RepoName: repo.Name, | |||