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)
}
// 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) {
+}
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)
+ }
+}
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"
}
}
+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)
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(),
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)
+ }
+}
"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.
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 {