Skip to content

Commit 8a84d82

Browse files
authored
Move repofiles webhooks to notification (#8807)
1 parent 36b8c08 commit 8a84d82

File tree

5 files changed

+77
-68
lines changed

5 files changed

+77
-68
lines changed

modules/notification/base/notifier.go

+2
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ type Notifier interface {
4343
NotifyDeleteRelease(doer *models.User, rel *models.Release)
4444

4545
NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits)
46+
NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string)
47+
NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string)
4648
}

modules/notification/base/null.go

+8
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,11 @@ func (*NullNotifier) NotifyMigrateRepository(doer *models.User, u *models.User,
114114
// NotifyPushCommits notifies commits pushed to notifiers
115115
func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits) {
116116
}
117+
118+
// NotifyCreateRef notifies branch or tag creation to notifiers
119+
func (*NullNotifier) NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
120+
}
121+
122+
// NotifyDeleteRef notifies branch or tag deleteion to notifiers
123+
func (*NullNotifier) NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
124+
}

modules/notification/notification.go

+14
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,17 @@ func NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, ol
199199
notifier.NotifyPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits)
200200
}
201201
}
202+
203+
// NotifyCreateRef notifies branch or tag creation to notifiers
204+
func NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
205+
for _, notifier := range notifiers {
206+
notifier.NotifyCreateRef(pusher, repo, refType, refFullName)
207+
}
208+
}
209+
210+
// NotifyDeleteRef notifies branch or tag deletion to notifiers
211+
func NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
212+
for _, notifier := range notifiers {
213+
notifier.NotifyDeleteRef(pusher, repo, refType, refFullName)
214+
}
215+
}

modules/notification/webhook/webhook.go

+46-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package webhook
66

77
import (
88
"code.gitea.io/gitea/models"
9+
"code.gitea.io/gitea/modules/git"
910
"code.gitea.io/gitea/modules/log"
1011
"code.gitea.io/gitea/modules/notification/base"
1112
"code.gitea.io/gitea/modules/setting"
@@ -562,6 +563,34 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
562563
}
563564
}
564565

566+
func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
567+
apiPusher := pusher.APIFormat()
568+
apiRepo := repo.APIFormat(models.AccessModeNone)
569+
refName := git.RefEndName(refFullName)
570+
571+
gitRepo, err := git.OpenRepository(repo.RepoPath())
572+
if err != nil {
573+
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
574+
return
575+
}
576+
577+
shaSum, err := gitRepo.GetBranchCommitID(refName)
578+
if err != nil {
579+
log.Error("GetBranchCommitID[%s]: %v", refFullName, err)
580+
return
581+
}
582+
583+
if err = webhook_module.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
584+
Ref: refName,
585+
Sha: shaSum,
586+
RefType: refType,
587+
Repo: apiRepo,
588+
Sender: apiPusher,
589+
}); err != nil {
590+
log.Error("PrepareWebhooks: %v", err)
591+
}
592+
}
593+
565594
func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
566595
if err := pr.LoadIssue(); err != nil {
567596
log.Error("pr.LoadIssue: %v", err)
@@ -572,7 +601,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
572601
return
573602
}
574603

575-
if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
604+
if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
576605
Action: api.HookIssueSynchronized,
577606
Index: pr.Issue.Index,
578607
PullRequest: pr.Issue.PullRequest.APIFormat(),
@@ -582,3 +611,19 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
582611
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
583612
}
584613
}
614+
615+
func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
616+
apiPusher := pusher.APIFormat()
617+
apiRepo := repo.APIFormat(models.AccessModeNone)
618+
refName := git.RefEndName(refFullName)
619+
620+
if err := webhook_module.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
621+
Ref: refName,
622+
RefType: "branch",
623+
PusherType: api.PusherTypeUser,
624+
Repo: apiRepo,
625+
Sender: apiPusher,
626+
}); err != nil {
627+
log.Error("PrepareWebhooks.(delete branch): %v", err)
628+
}
629+
}

modules/repofiles/action.go

+7-67
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
"code.gitea.io/gitea/modules/log"
1515
"code.gitea.io/gitea/modules/notification"
1616
"code.gitea.io/gitea/modules/setting"
17-
api "code.gitea.io/gitea/modules/structs"
18-
"code.gitea.io/gitea/modules/webhook"
1917
)
2018

2119
// CommitRepoActionOptions represent options of a new commit action.
@@ -113,81 +111,23 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
113111
return fmt.Errorf("NotifyWatchers: %v", err)
114112
}
115113

116-
apiPusher := pusher.APIFormat()
117-
apiRepo := repo.APIFormat(models.AccessModeNone)
118-
119-
var shaSum string
120-
var isHookEventPush = false
114+
var isHookEventPush = true
121115
switch opType {
122116
case models.ActionCommitRepo: // Push
123-
isHookEventPush = true
124-
125117
if isNewBranch {
126-
gitRepo, err := git.OpenRepository(repo.RepoPath())
127-
if err != nil {
128-
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
129-
}
130-
131-
shaSum, err = gitRepo.GetBranchCommitID(refName)
132-
if err != nil {
133-
log.Error("GetBranchCommitID[%s]: %v", opts.RefFullName, err)
134-
}
135-
if err = webhook.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
136-
Ref: refName,
137-
Sha: shaSum,
138-
RefType: "branch",
139-
Repo: apiRepo,
140-
Sender: apiPusher,
141-
}); err != nil {
142-
return fmt.Errorf("PrepareWebhooks: %v", err)
143-
}
118+
notification.NotifyCreateRef(pusher, repo, "branch", opts.RefFullName)
144119
}
145120

146121
case models.ActionDeleteBranch: // Delete Branch
147-
isHookEventPush = true
148-
149-
if err = webhook.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
150-
Ref: refName,
151-
RefType: "branch",
152-
PusherType: api.PusherTypeUser,
153-
Repo: apiRepo,
154-
Sender: apiPusher,
155-
}); err != nil {
156-
return fmt.Errorf("PrepareWebhooks.(delete branch): %v", err)
157-
}
122+
notification.NotifyDeleteRef(pusher, repo, "branch", opts.RefFullName)
158123

159124
case models.ActionPushTag: // Create
160-
isHookEventPush = true
125+
notification.NotifyCreateRef(pusher, repo, "tag", opts.RefFullName)
161126

162-
gitRepo, err := git.OpenRepository(repo.RepoPath())
163-
if err != nil {
164-
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
165-
}
166-
shaSum, err = gitRepo.GetTagCommitID(refName)
167-
if err != nil {
168-
log.Error("GetTagCommitID[%s]: %v", opts.RefFullName, err)
169-
}
170-
if err = webhook.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
171-
Ref: refName,
172-
Sha: shaSum,
173-
RefType: "tag",
174-
Repo: apiRepo,
175-
Sender: apiPusher,
176-
}); err != nil {
177-
return fmt.Errorf("PrepareWebhooks: %v", err)
178-
}
179127
case models.ActionDeleteTag: // Delete Tag
180-
isHookEventPush = true
181-
182-
if err = webhook.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
183-
Ref: refName,
184-
RefType: "tag",
185-
PusherType: api.PusherTypeUser,
186-
Repo: apiRepo,
187-
Sender: apiPusher,
188-
}); err != nil {
189-
return fmt.Errorf("PrepareWebhooks.(delete tag): %v", err)
190-
}
128+
notification.NotifyDeleteRef(pusher, repo, "tag", opts.RefFullName)
129+
default:
130+
isHookEventPush = false
191131
}
192132

193133
if isHookEventPush {

0 commit comments

Comments
 (0)