mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Move repofiles webhooks to notification (#8807)
This commit is contained in:
		@@ -43,4 +43,6 @@ type Notifier interface {
 | 
			
		||||
	NotifyDeleteRelease(doer *models.User, rel *models.Release)
 | 
			
		||||
 | 
			
		||||
	NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits)
 | 
			
		||||
	NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string)
 | 
			
		||||
	NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -114,3 +114,11 @@ 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 *models.PushCommits) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyCreateRef notifies branch or tag creation to notifiers
 | 
			
		||||
func (*NullNotifier) NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyDeleteRef notifies branch or tag deleteion to notifiers
 | 
			
		||||
func (*NullNotifier) NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -199,3 +199,17 @@ func NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, ol
 | 
			
		||||
		notifier.NotifyPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyCreateRef notifies branch or tag creation to notifiers
 | 
			
		||||
func NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
	for _, notifier := range notifiers {
 | 
			
		||||
		notifier.NotifyCreateRef(pusher, repo, refType, refFullName)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyDeleteRef notifies branch or tag deletion to notifiers
 | 
			
		||||
func NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
	for _, notifier := range notifiers {
 | 
			
		||||
		notifier.NotifyDeleteRef(pusher, repo, refType, refFullName)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ package webhook
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/notification/base"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
@@ -562,6 +563,34 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
	apiPusher := pusher.APIFormat()
 | 
			
		||||
	apiRepo := repo.APIFormat(models.AccessModeNone)
 | 
			
		||||
	refName := git.RefEndName(refFullName)
 | 
			
		||||
 | 
			
		||||
	gitRepo, err := git.OpenRepository(repo.RepoPath())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	shaSum, err := gitRepo.GetBranchCommitID(refName)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error("GetBranchCommitID[%s]: %v", refFullName, err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = webhook_module.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
 | 
			
		||||
		Ref:     refName,
 | 
			
		||||
		Sha:     shaSum,
 | 
			
		||||
		RefType: refType,
 | 
			
		||||
		Repo:    apiRepo,
 | 
			
		||||
		Sender:  apiPusher,
 | 
			
		||||
	}); err != nil {
 | 
			
		||||
		log.Error("PrepareWebhooks: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
 | 
			
		||||
	if err := pr.LoadIssue(); err != nil {
 | 
			
		||||
		log.Error("pr.LoadIssue: %v", err)
 | 
			
		||||
@@ -572,7 +601,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
 | 
			
		||||
	if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
 | 
			
		||||
		Action:      api.HookIssueSynchronized,
 | 
			
		||||
		Index:       pr.Issue.Index,
 | 
			
		||||
		PullRequest: pr.Issue.PullRequest.APIFormat(),
 | 
			
		||||
@@ -582,3 +611,19 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
 | 
			
		||||
		log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
 | 
			
		||||
	apiPusher := pusher.APIFormat()
 | 
			
		||||
	apiRepo := repo.APIFormat(models.AccessModeNone)
 | 
			
		||||
	refName := git.RefEndName(refFullName)
 | 
			
		||||
 | 
			
		||||
	if err := webhook_module.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
 | 
			
		||||
		Ref:        refName,
 | 
			
		||||
		RefType:    "branch",
 | 
			
		||||
		PusherType: api.PusherTypeUser,
 | 
			
		||||
		Repo:       apiRepo,
 | 
			
		||||
		Sender:     apiPusher,
 | 
			
		||||
	}); err != nil {
 | 
			
		||||
		log.Error("PrepareWebhooks.(delete branch): %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,6 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/notification"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	api "code.gitea.io/gitea/modules/structs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/webhook"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// CommitRepoActionOptions represent options of a new commit action.
 | 
			
		||||
@@ -113,81 +111,23 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
 | 
			
		||||
		return fmt.Errorf("NotifyWatchers: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	apiPusher := pusher.APIFormat()
 | 
			
		||||
	apiRepo := repo.APIFormat(models.AccessModeNone)
 | 
			
		||||
 | 
			
		||||
	var shaSum string
 | 
			
		||||
	var isHookEventPush = false
 | 
			
		||||
	var isHookEventPush = true
 | 
			
		||||
	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 = webhook.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
 | 
			
		||||
				Ref:     refName,
 | 
			
		||||
				Sha:     shaSum,
 | 
			
		||||
				RefType: "branch",
 | 
			
		||||
				Repo:    apiRepo,
 | 
			
		||||
				Sender:  apiPusher,
 | 
			
		||||
			}); err != nil {
 | 
			
		||||
				return fmt.Errorf("PrepareWebhooks: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
			notification.NotifyCreateRef(pusher, repo, "branch", opts.RefFullName)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	case models.ActionDeleteBranch: // Delete Branch
 | 
			
		||||
		isHookEventPush = true
 | 
			
		||||
 | 
			
		||||
		if err = webhook.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)
 | 
			
		||||
		}
 | 
			
		||||
		notification.NotifyDeleteRef(pusher, repo, "branch", opts.RefFullName)
 | 
			
		||||
 | 
			
		||||
	case models.ActionPushTag: // Create
 | 
			
		||||
		isHookEventPush = true
 | 
			
		||||
		notification.NotifyCreateRef(pusher, repo, "tag", opts.RefFullName)
 | 
			
		||||
 | 
			
		||||
		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 = webhook.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 = webhook.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)
 | 
			
		||||
		}
 | 
			
		||||
		notification.NotifyDeleteRef(pusher, repo, "tag", opts.RefFullName)
 | 
			
		||||
	default:
 | 
			
		||||
		isHookEventPush = false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if isHookEventPush {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user