NotifyDeleteRelease(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 *models.PushCommits) | 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 | // NotifyPushCommits notifies commits pushed to notifiers | ||||
func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits) { | 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) | 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 ( | import ( | ||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/git" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/notification/base" | "code.gitea.io/gitea/modules/notification/base" | ||||
"code.gitea.io/gitea/modules/setting" | "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) { | func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||
if err := pr.LoadIssue(); err != nil { | if err := pr.LoadIssue(); err != nil { | ||||
log.Error("pr.LoadIssue: %v", err) | log.Error("pr.LoadIssue: %v", err) | ||||
return | 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, | Action: api.HookIssueSynchronized, | ||||
Index: pr.Issue.Index, | Index: pr.Issue.Index, | ||||
PullRequest: pr.Issue.PullRequest.APIFormat(), | PullRequest: pr.Issue.PullRequest.APIFormat(), | ||||
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | 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/log" | ||||
"code.gitea.io/gitea/modules/notification" | "code.gitea.io/gitea/modules/notification" | ||||
"code.gitea.io/gitea/modules/setting" | "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. | // CommitRepoActionOptions represent options of a new commit action. | ||||
return fmt.Errorf("NotifyWatchers: %v", err) | 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 { | switch opType { | ||||
case models.ActionCommitRepo: // Push | case models.ActionCommitRepo: // Push | ||||
isHookEventPush = true | |||||
if isNewBranch { | 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 | 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 | 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 | 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 { | if isHookEventPush { |