mirror of
https://gitcode.com/gitea/gitea.git
synced 2025-06-20 03:43:59 +08:00
Refactor: Move PushUpdateOptions (#13363)
Co-authored-by: Antoine GIRARD <sapk@users.noreply.github.com>
This commit is contained in:
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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),
|
||||
|
115
modules/repository/push.go
Normal file
115
modules/repository/push.go
Normal file
@ -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
|
||||
}
|
Reference in New Issue
Block a user