summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-11-06 14:43:03 +0800
committerGitHub <noreply@github.com>2019-11-06 14:43:03 +0800
commit8a84d82d5341ff6572e7c77f5779e2583ed45c25 (patch)
tree8cd399ebff88f2e10a76a01c117834b25a0c699f
parent36b8c081f6b9b642bc068158b3a893d027d06ba8 (diff)
downloadgitea-8a84d82d5341ff6572e7c77f5779e2583ed45c25.tar.gz
gitea-8a84d82d5341ff6572e7c77f5779e2583ed45c25.zip
Move repofiles webhooks to notification (#8807)
-rw-r--r--modules/notification/base/notifier.go2
-rw-r--r--modules/notification/base/null.go8
-rw-r--r--modules/notification/notification.go14
-rw-r--r--modules/notification/webhook/webhook.go47
-rw-r--r--modules/repofiles/action.go74
5 files changed, 77 insertions, 68 deletions
diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go
index 286ebe5d69..72bf52c938 100644
--- a/modules/notification/base/notifier.go
+++ b/modules/notification/base/notifier.go
@@ -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)
}
diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go
index 5b6359cbd5..a9d9d6a164 100644
--- a/modules/notification/base/null.go
+++ b/modules/notification/base/null.go
@@ -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) {
+}
diff --git a/modules/notification/notification.go b/modules/notification/notification.go
index a5e450ee66..5ac09a72e5 100644
--- a/modules/notification/notification.go
+++ b/modules/notification/notification.go
@@ -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)
+ }
+}
diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go
index 39c63edb05..6eb03d3ebc 100644
--- a/modules/notification/webhook/webhook.go
+++ b/modules/notification/webhook/webhook.go
@@ -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)
+ }
+}
diff --git a/modules/repofiles/action.go b/modules/repofiles/action.go
index e5f6bf8718..996363863d 100644
--- a/modules/repofiles/action.go
+++ b/modules/repofiles/action.go
@@ -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 {