diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-10-31 05:59:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-30 22:59:02 +0100 |
commit | 4df2ed29f28194513c59733e369152b8f8bc1d36 (patch) | |
tree | 3bb0604e902390f37e2c9a8104f4ccaf495b4291 | |
parent | dd12384f224e98a130511ebc9ffcfb44ead0e736 (diff) | |
download | gitea-4df2ed29f28194513c59733e369152b8f8bc1d36.tar.gz gitea-4df2ed29f28194513c59733e369152b8f8bc1d36.zip |
Refactor: Move PushUpdateOptions (#13363)
Co-authored-by: Antoine GIRARD <sapk@users.noreply.github.com>
-rw-r--r-- | modules/notification/action/action.go | 4 | ||||
-rw-r--r-- | modules/notification/base/notifier.go | 4 | ||||
-rw-r--r-- | modules/notification/base/null.go | 4 | ||||
-rw-r--r-- | modules/notification/indexer/indexer.go | 8 | ||||
-rw-r--r-- | modules/notification/notification.go | 8 | ||||
-rw-r--r-- | modules/notification/webhook/webhook.go | 16 | ||||
-rw-r--r-- | modules/repository/push.go | 115 | ||||
-rw-r--r-- | routers/api/v1/repo/branch.go | 2 | ||||
-rw-r--r-- | routers/private/hook.go | 5 | ||||
-rw-r--r-- | routers/repo/branch.go | 4 | ||||
-rw-r--r-- | routers/repo/pull.go | 3 | ||||
-rw-r--r-- | services/mirror/mirror.go | 6 | ||||
-rw-r--r-- | services/release/release.go | 8 | ||||
-rw-r--r-- | services/repository/push.go | 120 | ||||
-rw-r--r-- | services/repository/push_test.go | 8 |
15 files changed, 169 insertions, 146 deletions
diff --git a/modules/notification/action/action.go b/modules/notification/action/action.go index f7078d3493..3c61cceb99 100644 --- a/modules/notification/action/action.go +++ b/modules/notification/action/action.go @@ -275,7 +275,7 @@ func (*actionNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mode } } -func (a *actionNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func (a *actionNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { data, err := json.Marshal(commits) if err != nil { log.Error("json.Marshal: %v", err) @@ -289,7 +289,7 @@ func (a *actionNotifier) NotifySyncPushCommits(pusher *models.User, repo *models RepoID: repo.ID, Repo: repo, IsPrivate: repo.IsPrivate, - RefName: refName, + RefName: opts.RefFullName, Content: string(data), }); err != nil { log.Error("notifyWatchers: %v", err) diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go index 5cd2b4c060..7b8eb7b1f1 100644 --- a/modules/notification/base/notifier.go +++ b/modules/notification/base/notifier.go @@ -48,11 +48,11 @@ type Notifier interface { NotifyUpdateRelease(doer *models.User, rel *models.Release) NotifyDeleteRelease(doer *models.User, rel *models.Release) - NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) + NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string) NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string) - NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) + NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) NotifySyncCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string) NotifySyncDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string) } diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go index 15d06ec856..7a9ad0b2ce 100644 --- a/modules/notification/base/null.go +++ b/modules/notification/base/null.go @@ -128,7 +128,7 @@ func (*NullNotifier) NotifyMigrateRepository(doer *models.User, u *models.User, } // NotifyPushCommits notifies commits pushed to notifiers -func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { } // NotifyCreateRef notifies branch or tag creation to notifiers @@ -148,7 +148,7 @@ func (*NullNotifier) NotifyTransferRepository(doer *models.User, repo *models.Re } // NotifySyncPushCommits places a place holder function -func (*NullNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func (*NullNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { } // NotifySyncCreateRef places a place holder function diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go index 6e848e6318..8293d28570 100644 --- a/modules/notification/indexer/indexer.go +++ b/modules/notification/indexer/indexer.go @@ -123,8 +123,8 @@ func (r *indexerNotifier) NotifyMigrateRepository(doer *models.User, u *models.U } } -func (r *indexerNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { - if setting.Indexer.RepoIndexerEnabled && refName == git.BranchPrefix+repo.DefaultBranch { +func (r *indexerNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { + if setting.Indexer.RepoIndexerEnabled && opts.RefFullName == git.BranchPrefix+repo.DefaultBranch { code_indexer.UpdateRepoIndexer(repo) } if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { @@ -132,8 +132,8 @@ func (r *indexerNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re } } -func (r *indexerNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { - if setting.Indexer.RepoIndexerEnabled && refName == git.BranchPrefix+repo.DefaultBranch { +func (r *indexerNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { + if setting.Indexer.RepoIndexerEnabled && opts.RefFullName == git.BranchPrefix+repo.DefaultBranch { code_indexer.UpdateRepoIndexer(repo) } if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { diff --git a/modules/notification/notification.go b/modules/notification/notification.go index 57f1e7c16d..21f9dc87a8 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -236,9 +236,9 @@ func NotifyRenameRepository(doer *models.User, repo *models.Repository, oldName } // NotifyPushCommits notifies commits pushed to notifiers -func NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { for _, notifier := range notifiers { - notifier.NotifyPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits) + notifier.NotifyPushCommits(pusher, repo, opts, commits) } } @@ -257,9 +257,9 @@ func NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refF } // NotifySyncPushCommits notifies commits pushed to notifiers -func NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { for _, notifier := range notifiers { - notifier.NotifySyncPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits) + notifier.NotifySyncPushCommits(pusher, repo, opts, commits) } } diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index 231112ec4c..9ca73db051 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -548,7 +548,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m } } -func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { apiPusher := convert.ToUser(pusher, false, false) apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) if err != nil { @@ -557,9 +557,9 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re } if err := webhook_module.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ - Ref: refName, - Before: oldCommitID, - After: newCommitID, + Ref: opts.RefFullName, + Before: opts.OldCommitID, + After: opts.NewCommitID, CompareURL: setting.AppURL + commits.CompareURL, Commits: apiCommits, Repo: repo.APIFormat(models.AccessModeOwner), @@ -776,7 +776,7 @@ func (m *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Rel sendReleaseHook(doer, rel, api.HookReleaseDeleted) } -func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { +func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { apiPusher := convert.ToUser(pusher, false, false) apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) if err != nil { @@ -785,9 +785,9 @@ func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *model } if err := webhook_module.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ - Ref: refName, - Before: oldCommitID, - After: newCommitID, + Ref: opts.RefFullName, + Before: opts.OldCommitID, + After: opts.NewCommitID, CompareURL: setting.AppURL + commits.CompareURL, Commits: apiCommits, Repo: repo.APIFormat(models.AccessModeOwner), diff --git a/modules/repository/push.go b/modules/repository/push.go new file mode 100644 index 0000000000..04dd63a2cc --- /dev/null +++ b/modules/repository/push.go @@ -0,0 +1,115 @@ +// Copyright 2020 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 repository + +import ( + "path/filepath" + "strings" + + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/setting" +) + +// PushUpdateOptions defines the push update options +type PushUpdateOptions struct { + PusherID int64 + PusherName string + RepoUserName string + RepoName string + RefFullName string // branch, tag or other name to push + OldCommitID string + NewCommitID string +} + +// IsNewRef return true if it's a first-time push to a branch, tag or etc. +func (opts PushUpdateOptions) IsNewRef() bool { + return opts.OldCommitID == git.EmptySHA +} + +// IsDelRef return true if it's a deletion to a branch or tag +func (opts PushUpdateOptions) IsDelRef() bool { + return opts.NewCommitID == git.EmptySHA +} + +// IsUpdateRef return true if it's an update operation +func (opts PushUpdateOptions) IsUpdateRef() bool { + return !opts.IsNewRef() && !opts.IsDelRef() +} + +// IsTag return true if it's an operation to a tag +func (opts PushUpdateOptions) IsTag() bool { + return strings.HasPrefix(opts.RefFullName, git.TagPrefix) +} + +// IsNewTag return true if it's a creation to a tag +func (opts PushUpdateOptions) IsNewTag() bool { + return opts.IsTag() && opts.IsNewRef() +} + +// IsDelTag return true if it's a deletion to a tag +func (opts PushUpdateOptions) IsDelTag() bool { + return opts.IsTag() && opts.IsDelRef() +} + +// IsBranch return true if it's a push to branch +func (opts PushUpdateOptions) IsBranch() bool { + return strings.HasPrefix(opts.RefFullName, git.BranchPrefix) +} + +// IsNewBranch return true if it's the first-time push to a branch +func (opts PushUpdateOptions) IsNewBranch() bool { + return opts.IsBranch() && opts.IsNewRef() +} + +// IsUpdateBranch return true if it's not the first push to a branch +func (opts PushUpdateOptions) IsUpdateBranch() bool { + return opts.IsBranch() && opts.IsUpdateRef() +} + +// IsDelBranch return true if it's a deletion to a branch +func (opts PushUpdateOptions) IsDelBranch() bool { + return opts.IsBranch() && opts.IsDelRef() +} + +// TagName returns simple tag name if it's an operation to a tag +func (opts PushUpdateOptions) TagName() string { + return opts.RefFullName[len(git.TagPrefix):] +} + +// BranchName returns simple branch name if it's an operation to branch +func (opts PushUpdateOptions) BranchName() string { + return opts.RefFullName[len(git.BranchPrefix):] +} + +// RefName returns simple name for ref +func (opts PushUpdateOptions) RefName() string { + if strings.HasPrefix(opts.RefFullName, git.TagPrefix) { + return opts.RefFullName[len(git.TagPrefix):] + } else if strings.HasPrefix(opts.RefFullName, git.BranchPrefix) { + return opts.RefFullName[len(git.BranchPrefix):] + } + return "" +} + +// RepoFullName returns repo full name +func (opts PushUpdateOptions) RepoFullName() string { + return opts.RepoUserName + "/" + opts.RepoName +} + +// IsForcePush detect if a push is a force push +func IsForcePush(opts *PushUpdateOptions) (bool, error) { + if !opts.IsUpdateBranch() { + return false, nil + } + + output, err := git.NewCommand("rev-list", "--max-count=1", opts.OldCommitID, "^"+opts.NewCommitID). + RunInDir(filepath.Join(setting.RepoRootPath, opts.RepoUserName, opts.RepoName)) + if err != nil { + return false, err + } else if len(output) > 0 { + return true, nil + } + return false, nil +} diff --git a/routers/api/v1/repo/branch.go b/routers/api/v1/repo/branch.go index 50ca3977a5..384225d742 100644 --- a/routers/api/v1/repo/branch.go +++ b/routers/api/v1/repo/branch.go @@ -162,7 +162,7 @@ func DeleteBranch(ctx *context.APIContext) { // Don't return error below this if err := repo_service.PushUpdate( - &repo_service.PushUpdateOptions{ + &repo_module.PushUpdateOptions{ RefFullName: git.BranchPrefix + ctx.Repo.BranchName, OldCommitID: c.ID.String(), NewCommitID: git.EmptySHA, diff --git a/routers/private/hook.go b/routers/private/hook.go index a2033fc1dd..dac3940756 100644 --- a/routers/private/hook.go +++ b/routers/private/hook.go @@ -18,6 +18,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" pull_service "code.gitea.io/gitea/services/pull" @@ -375,7 +376,7 @@ func HookPostReceive(ctx *macaron.Context, opts private.HookOptions) { repoName := ctx.Params(":repo") var repo *models.Repository - updates := make([]*repo_service.PushUpdateOptions, 0, len(opts.OldCommitIDs)) + updates := make([]*repo_module.PushUpdateOptions, 0, len(opts.OldCommitIDs)) wasEmpty := false for i := range opts.OldCommitIDs { @@ -402,7 +403,7 @@ func HookPostReceive(ctx *macaron.Context, opts private.HookOptions) { wasEmpty = repo.IsEmpty } - option := repo_service.PushUpdateOptions{ + option := repo_module.PushUpdateOptions{ RefFullName: refFullName, OldCommitID: opts.OldCommitIDs[i], NewCommitID: opts.NewCommitIDs[i], diff --git a/routers/repo/branch.go b/routers/repo/branch.go index cd18f66777..81e8916af2 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -120,7 +120,7 @@ func RestoreBranchPost(ctx *context.Context) { // Don't return error below this if err := repo_service.PushUpdate( - &repo_service.PushUpdateOptions{ + &repo_module.PushUpdateOptions{ RefFullName: git.BranchPrefix + deletedBranch.Name, OldCommitID: git.EmptySHA, NewCommitID: deletedBranch.Commit, @@ -157,7 +157,7 @@ func deleteBranch(ctx *context.Context, branchName string) error { // Don't return error below this if err := repo_service.PushUpdate( - &repo_service.PushUpdateOptions{ + &repo_module.PushUpdateOptions{ RefFullName: git.BranchPrefix + branchName, OldCommitID: commit.ID.String(), NewCommitID: git.EmptySHA, diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 1b3f835e4f..0ea6ec33de 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -22,6 +22,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/upload" @@ -1185,7 +1186,7 @@ func CleanUpPullRequest(ctx *context.Context) { } if err := repo_service.PushUpdate( - &repo_service.PushUpdateOptions{ + &repo_module.PushUpdateOptions{ RefFullName: git.BranchPrefix + pr.HeadBranch, OldCommitID: branchCommitID, NewCommitID: git.EmptySHA, diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index fc494bfce2..cfef55f2a7 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -472,7 +472,11 @@ func syncMirror(repoID string) { theCommits.CompareURL = m.Repo.ComposeCompareURL(oldCommitID, newCommitID) - notification.NotifySyncPushCommits(m.Repo.MustOwner(), m.Repo, result.refName, oldCommitID, newCommitID, theCommits) + notification.NotifySyncPushCommits(m.Repo.MustOwner(), m.Repo, &repo_module.PushUpdateOptions{ + RefFullName: result.refName, + OldCommitID: oldCommitID, + NewCommitID: newCommitID, + }, theCommits) } log.Trace("SyncMirrors [repo: %-v]: done notifying updated branches/tags - now updating last commit time", m.Repo) diff --git a/services/release/release.go b/services/release/release.go index af97987a27..0e04a71898 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -43,8 +43,12 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { return err } notification.NotifyPushCommits( - rel.Publisher, rel.Repo, git.TagPrefix+rel.TagName, - git.EmptySHA, commit.ID.String(), repository.NewPushCommits()) + rel.Publisher, rel.Repo, + &repository.PushUpdateOptions{ + RefFullName: git.TagPrefix + rel.TagName, + OldCommitID: git.EmptySHA, + NewCommitID: commit.ID.String(), + }, repository.NewPushCommits()) notification.NotifyCreateRef(rel.Publisher, rel.Repo, "tag", git.TagPrefix+rel.TagName) rel.CreatedUnix = timeutil.TimeStampNow() } diff --git a/services/repository/push.go b/services/repository/push.go index 762136fd08..538f282784 100644 --- a/services/repository/push.go +++ b/services/repository/push.go @@ -8,7 +8,6 @@ import ( "container/list" "encoding/json" "fmt" - "strings" "time" "code.gitea.io/gitea/models" @@ -24,114 +23,13 @@ import ( pull_service "code.gitea.io/gitea/services/pull" ) -// PushUpdateOptions defines the push update options -type PushUpdateOptions struct { - PusherID int64 - PusherName string - RepoUserName string - RepoName string - RefFullName string // branch, tag or other name to push - OldCommitID string - NewCommitID string -} - -// IsNewRef return true if it's a first-time push to a branch, tag or etc. -func (opts PushUpdateOptions) IsNewRef() bool { - return opts.OldCommitID == git.EmptySHA -} - -// IsDelRef return true if it's a deletion to a branch or tag -func (opts PushUpdateOptions) IsDelRef() bool { - return opts.NewCommitID == git.EmptySHA -} - -// IsUpdateRef return true if it's an update operation -func (opts PushUpdateOptions) IsUpdateRef() bool { - return !opts.IsNewRef() && !opts.IsDelRef() -} - -// IsTag return true if it's an operation to a tag -func (opts PushUpdateOptions) IsTag() bool { - return strings.HasPrefix(opts.RefFullName, git.TagPrefix) -} - -// IsNewTag return true if it's a creation to a tag -func (opts PushUpdateOptions) IsNewTag() bool { - return opts.IsTag() && opts.IsNewRef() -} - -// IsDelTag return true if it's a deletion to a tag -func (opts PushUpdateOptions) IsDelTag() bool { - return opts.IsTag() && opts.IsDelRef() -} - -// IsBranch return true if it's a push to branch -func (opts PushUpdateOptions) IsBranch() bool { - return strings.HasPrefix(opts.RefFullName, git.BranchPrefix) -} - -// IsNewBranch return true if it's the first-time push to a branch -func (opts PushUpdateOptions) IsNewBranch() bool { - return opts.IsBranch() && opts.IsNewRef() -} - -// IsUpdateBranch return true if it's not the first push to a branch -func (opts PushUpdateOptions) IsUpdateBranch() bool { - return opts.IsBranch() && opts.IsUpdateRef() -} - -// IsDelBranch return true if it's a deletion to a branch -func (opts PushUpdateOptions) IsDelBranch() bool { - return opts.IsBranch() && opts.IsDelRef() -} - -// TagName returns simple tag name if it's an operation to a tag -func (opts PushUpdateOptions) TagName() string { - return opts.RefFullName[len(git.TagPrefix):] -} - -// BranchName returns simple branch name if it's an operation to branch -func (opts PushUpdateOptions) BranchName() string { - return opts.RefFullName[len(git.BranchPrefix):] -} - -// RefName returns simple name for ref -func (opts PushUpdateOptions) RefName() string { - if strings.HasPrefix(opts.RefFullName, git.TagPrefix) { - return opts.RefFullName[len(git.TagPrefix):] - } else if strings.HasPrefix(opts.RefFullName, git.BranchPrefix) { - return opts.RefFullName[len(git.BranchPrefix):] - } - return "" -} - -// RepoFullName returns repo full name -func (opts PushUpdateOptions) RepoFullName() string { - return opts.RepoUserName + "/" + opts.RepoName -} - -// isForcePush detect if a push is a force push -func isForcePush(repoPath string, opts *PushUpdateOptions) (bool, error) { - if !opts.IsUpdateBranch() { - return false, nil - } - - output, err := git.NewCommand("rev-list", "--max-count=1", opts.OldCommitID, "^"+opts.NewCommitID).RunInDir(repoPath) - if err != nil { - return false, err - } else if len(output) > 0 { - return true, nil - } - return false, nil -} - // pushQueue represents a queue to handle update pull request tests var pushQueue queue.Queue // handle passed PR IDs and test the PRs func handle(data ...queue.Data) { for _, datum := range data { - opts := datum.([]*PushUpdateOptions) + opts := datum.([]*repo_module.PushUpdateOptions) if err := pushUpdates(opts); err != nil { log.Error("pushUpdate failed: %v", err) } @@ -139,7 +37,7 @@ func handle(data ...queue.Data) { } func initPushQueue() error { - pushQueue = queue.CreateQueue("push_update", handle, []*PushUpdateOptions{}).(queue.Queue) + pushQueue = queue.CreateQueue("push_update", handle, []*repo_module.PushUpdateOptions{}).(queue.Queue) if pushQueue == nil { return fmt.Errorf("Unable to create push_update Queue") } @@ -149,12 +47,12 @@ func initPushQueue() error { } // PushUpdate is an alias of PushUpdates for single push update options -func PushUpdate(opts *PushUpdateOptions) error { - return PushUpdates([]*PushUpdateOptions{opts}) +func PushUpdate(opts *repo_module.PushUpdateOptions) error { + return PushUpdates([]*repo_module.PushUpdateOptions{opts}) } // PushUpdates adds a push update to push queue -func PushUpdates(opts []*PushUpdateOptions) error { +func PushUpdates(opts []*repo_module.PushUpdateOptions) error { if len(opts) == 0 { return nil } @@ -169,7 +67,7 @@ func PushUpdates(opts []*PushUpdateOptions) error { } // pushUpdates generates push action history feeds for push updating multiple refs -func pushUpdates(optsList []*PushUpdateOptions) error { +func pushUpdates(optsList []*repo_module.PushUpdateOptions) error { if len(optsList) == 0 { return nil } @@ -238,7 +136,7 @@ func pushUpdates(optsList []*PushUpdateOptions) error { return fmt.Errorf("newCommit.CommitsBeforeUntil: %v", err) } - isForce, err := isForcePush(repo.RepoPath(), opts) + isForce, err := repo_module.IsForcePush(opts) if err != nil { log.Error("isForcePush %s/%s failed: %v", repo.ID, branch, err) } @@ -293,7 +191,7 @@ func pushUpdates(optsList []*PushUpdateOptions) error { // commitRepoActionOptions represent options of a new commit action. type commitRepoActionOptions struct { - PushUpdateOptions + repo_module.PushUpdateOptions Pusher *models.User RepoOwnerID int64 @@ -395,7 +293,7 @@ func commitRepoAction(repo *models.Repository, gitRepo *git.Repository, optsList } if isHookEventPush { - notification.NotifyPushCommits(opts.Pusher, repo, opts.RefFullName, opts.OldCommitID, opts.NewCommitID, opts.Commits) + notification.NotifyPushCommits(opts.Pusher, repo, &opts.PushUpdateOptions, opts.Commits) } } diff --git a/services/repository/push_test.go b/services/repository/push_test.go index 19ffab45e7..da24c19d57 100644 --- a/services/repository/push_test.go +++ b/services/repository/push_test.go @@ -32,7 +32,7 @@ func TestCommitRepoAction(t *testing.T) { userID: 2, repositoryID: 16, commitRepoActionOptions: commitRepoActionOptions{ - PushUpdateOptions: PushUpdateOptions{ + PushUpdateOptions: repo_module.PushUpdateOptions{ RefFullName: "refName", OldCommitID: "oldCommitID", NewCommitID: "newCommitID", @@ -68,7 +68,7 @@ func TestCommitRepoAction(t *testing.T) { userID: 2, repositoryID: 1, commitRepoActionOptions: commitRepoActionOptions{ - PushUpdateOptions: PushUpdateOptions{ + PushUpdateOptions: repo_module.PushUpdateOptions{ RefFullName: git.TagPrefix + "v1.1", OldCommitID: git.EmptySHA, NewCommitID: "newCommitID", @@ -84,7 +84,7 @@ func TestCommitRepoAction(t *testing.T) { userID: 2, repositoryID: 1, commitRepoActionOptions: commitRepoActionOptions{ - PushUpdateOptions: PushUpdateOptions{ + PushUpdateOptions: repo_module.PushUpdateOptions{ RefFullName: git.TagPrefix + "v1.1", OldCommitID: "oldCommitID", NewCommitID: git.EmptySHA, @@ -100,7 +100,7 @@ func TestCommitRepoAction(t *testing.T) { userID: 2, repositoryID: 1, commitRepoActionOptions: commitRepoActionOptions{ - PushUpdateOptions: PushUpdateOptions{ + PushUpdateOptions: repo_module.PushUpdateOptions{ RefFullName: git.BranchPrefix + "feature/1", OldCommitID: "oldCommitID", NewCommitID: git.EmptySHA, |