@ -5,9 +5,8 @@
package webhook
import (
"fm t"
"contex t"
"code.gitea.io/gitea/models/db"
issues_model "code.gitea.io/gitea/models/issues"
packages_model "code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/models/perm"
@ -18,10 +17,8 @@ import (
"code.gitea.io/gitea/models/webhook"
"code.gitea.io/gitea/modules/convert"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification/base"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
@ -39,12 +36,9 @@ func NewNotifier() base.Notifier {
return & webhookNotifier { }
}
func ( m * webhookNotifier ) NotifyIssueClearLabels ( doer * user_model . User , issue * issues_model . Issue ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueClearLabels User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
if err := issue . LoadPoster ( ) ; err != nil {
log . Error ( "loadPoster: %v" , err )
func ( m * webhookNotifier ) NotifyIssueClearLabels ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue ) {
if err := issue . LoadPoster ( ctx ) ; err != nil {
log . Error ( "LoadPoster: %v" , err )
return
}
@ -53,10 +47,10 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *user_model.User, issue *i
return
}
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
var err error
if issue . IsPull {
if err = issue . LoadPullRequest ( ) ; err != nil {
if err = issue . LoadPullRequest ( ctx ) ; err != nil {
log . Error ( "LoadPullRequest: %v" , err )
return
}
@ -72,7 +66,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *user_model.User, issue *i
err = webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventIssueLabel , & api . IssuePayload {
Action : api . HookIssueLabelCleared ,
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
@ -82,12 +76,12 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *user_model.User, issue *i
}
}
func ( m * webhookNotifier ) NotifyForkRepository ( doer * user_model . User , oldRepo , repo * repo_model . Repository ) {
oldMode , _ := access_model . AccessLevel ( doer , oldRepo )
mode , _ := access_model . AccessLevel ( doer , repo )
func ( m * webhookNotifier ) NotifyForkRepository ( ctx context . Context , doer * user_model . User , oldRepo , repo * repo_model . Repository ) {
oldMode , _ := access_model . AccessLevel ( ctx , doer , oldRepo )
mode , _ := access_model . AccessLevel ( ctx , doer , repo )
// forked webhook
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : oldRepo } , webhook . HookEventFork , & api . ForkPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : oldRepo } , webhook . HookEventFork , & api . ForkPayload {
Forkee : convert . ToRepo ( oldRepo , oldMode ) ,
Repo : convert . ToRepo ( repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -95,11 +89,11 @@ func (m *webhookNotifier) NotifyForkRepository(doer *user_model.User, oldRepo, r
log . Error ( "PrepareWebhooks [repo_id: %d]: %v" , oldRepo . ID , err )
}
u := repo . MustOwner ( )
u := repo . MustOwner ( ctx )
// Add to hook queue for created repo after session commit.
if u . IsOrganization ( ) {
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
Action : api . HookRepoCreated ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Organization : convert . ToUser ( u , nil ) ,
@ -110,9 +104,9 @@ func (m *webhookNotifier) NotifyForkRepository(doer *user_model.User, oldRepo, r
}
}
func ( m * webhookNotifier ) NotifyCreateRepository ( doer , u * user_model . User , repo * repo_model . Repository ) {
func ( m * webhookNotifier ) NotifyCreateRepository ( ctx context . Context , doer , u * user_model . User , repo * repo_model . Repository ) {
// Add to hook queue for created repo after session commit.
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
Action : api . HookRepoCreated ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Organization : convert . ToUser ( u , nil ) ,
@ -122,22 +116,20 @@ func (m *webhookNotifier) NotifyCreateRepository(doer, u *user_model.User, repo
}
}
func ( m * webhookNotifier ) NotifyDeleteRepository ( doer * user_model . User , repo * repo_model . Repository ) {
u := repo . MustOwner ( )
if err := webhook_services . PrepareWebhooks ( db . DefaultContext , webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
func ( m * webhookNotifier ) NotifyDeleteRepository ( ctx context . Context , doer * user_model . User , repo * repo_model . Repository ) {
if err := webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
Action : api . HookRepoDeleted ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Organization : convert . ToUser ( u , nil ) ,
Organization : convert . ToUser ( repo . M ustOwner ( ctx ) , nil ) ,
Sender : convert . ToUser ( doer , nil ) ,
} ) ; err != nil {
log . Error ( "PrepareWebhooks [repo_id: %d]: %v" , repo . ID , err )
}
}
func ( m * webhookNotifier ) NotifyMigrateRepository ( doer , u * user_model . User , repo * repo_model . Repository ) {
func ( m * webhookNotifier ) NotifyMigrateRepository ( ctx context . Context , doer , u * user_model . User , repo * repo_model . Repository ) {
// Add to hook queue for created repo after session commit.
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventRepository , & api . RepositoryPayload {
Action : api . HookRepoCreated ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Organization : convert . ToUser ( u , nil ) ,
@ -147,14 +139,11 @@ func (m *webhookNotifier) NotifyMigrateRepository(doer, u *user_model.User, repo
}
}
func ( m * webhookNotifier ) NotifyIssueChangeAssignee ( doer * user_model . User , issue * issues_model . Issue , assignee * user_model . User , removed bool , comment * issues_model . Comment ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeAssignee User: %s[%d] Issue[%d] #%d in [%d] Assignee %s[%d] removed: %t" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID , assignee . Name , assignee . ID , removed ) )
defer finished ( )
func ( m * webhookNotifier ) NotifyIssueChangeAssignee ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , assignee * user_model . User , removed bool , comment * issues_model . Comment ) {
if issue . IsPull {
mode , _ := access_model . AccessLevelUnit ( doer , issue . Repo , unit . TypePullRequests )
mode , _ := access_model . AccessLevelUnit ( ctx , doer , issue . Repo , unit . TypePullRequests )
if err := issue . LoadPullRequest ( ) ; err != nil {
if err := issue . LoadPullRequest ( ctx ) ; err != nil {
log . Error ( "LoadPullRequest failed: %v" , err )
return
}
@ -176,10 +165,10 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *user_model.User, issue
return
}
} else {
mode , _ := access_model . AccessLevelUnit ( doer , issue . Repo , unit . TypeIssues )
mode , _ := access_model . AccessLevelUnit ( ctx , doer , issue . Repo , unit . TypeIssues )
apiIssue := & api . IssuePayload {
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
}
@ -196,14 +185,11 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *user_model.User, issue
}
}
func ( m * webhookNotifier ) NotifyIssueChangeTitle ( doer * user_model . User , issue * issues_model . Issue , oldTitle string ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeTitle User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
func ( m * webhookNotifier ) NotifyIssueChangeTitle ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , oldTitle string ) {
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
var err error
if issue . IsPull {
if err = issue . LoadPullRequest ( ) ; err != nil {
if err = issue . LoadPullRequest ( ctx ) ; err != nil {
log . Error ( "LoadPullRequest failed: %v" , err )
return
}
@ -229,7 +215,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *user_model.User, issue *i
From : oldTitle ,
} ,
} ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
@ -240,14 +226,11 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *user_model.User, issue *i
}
}
func ( m * webhookNotifier ) NotifyIssueChangeStatus ( doer * user_model . User , issue * issues_model . Issue , actionComment * issues_model . Comment , isClosed bool ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeStatus User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
func ( m * webhookNotifier ) NotifyIssueChangeStatus ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , actionComment * issues_model . Comment , isClosed bool ) {
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
var err error
if issue . IsPull {
if err = issue . LoadPullRequest ( ) ; err != nil {
if err = issue . LoadPullRequest ( ctx ) ; err != nil {
log . Error ( "LoadPullRequest: %v" , err )
return
}
@ -267,7 +250,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *user_model.User, issue *
} else {
apiIssue := & api . IssuePayload {
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
}
@ -283,21 +266,21 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *user_model.User, issue *
}
}
func ( m * webhookNotifier ) NotifyNewIssue ( issue * issues_model . Issue , mentions [ ] * user_model . User ) {
if err := issue . LoadRepo ( db . Defaul tConte xt ) ; err != nil {
func ( m * webhookNotifier ) NotifyNewIssue ( ctx context . Context , issue * issues_model . Issue , mentions [ ] * user_model . User ) {
if err := issue . LoadRepo ( c tx) ; err != nil {
log . Error ( "issue.LoadRepo: %v" , err )
return
}
if err := issue . LoadPoster ( ) ; err != nil {
if err := issue . LoadPoster ( ctx ) ; err != nil {
log . Error ( "issue.LoadPoster: %v" , err )
return
}
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventIssues , & api . IssuePayload {
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventIssues , & api . IssuePayload {
Action : api . HookIssueOpened ,
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( issue . Poster , nil ) ,
} ) ; err != nil {
@ -305,11 +288,8 @@ func (m *webhookNotifier) NotifyNewIssue(issue *issues_model.Issue, mentions []*
}
}
func ( m * webhookNotifier ) NotifyNewPullRequest ( pull * issues_model . PullRequest , mentions [ ] * user_model . User ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyNewPullRequest Pull[%d] #%d in [%d]" , pull . ID , pull . Index , pull . BaseRepoID ) )
defer finished ( )
if err := pull . LoadIssue ( ) ; err != nil {
func ( m * webhookNotifier ) NotifyNewPullRequest ( ctx context . Context , pull * issues_model . PullRequest , mentions [ ] * user_model . User ) {
if err := pull . LoadIssue ( ctx ) ; err != nil {
log . Error ( "pull.LoadIssue: %v" , err )
return
}
@ -317,12 +297,12 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *issues_model.PullRequest, m
log . Error ( "pull.Issue.LoadRepo: %v" , err )
return
}
if err := pull . Issue . LoadPoster ( ) ; err != nil {
if err := pull . Issue . LoadPoster ( ctx ) ; err != nil {
log . Error ( "pull.Issue.LoadPoster: %v" , err )
return
}
mode , _ := access_model . AccessLevel ( pull . Issue . Poster , pull . Issue . Repo )
mode , _ := access_model . AccessLevel ( ctx , pull . Issue . Poster , pull . Issue . Repo )
if err := webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : pull . Issue . Repo } , webhook . HookEventPullRequest , & api . PullRequestPayload {
Action : api . HookIssueOpened ,
Index : pull . Issue . Index ,
@ -334,11 +314,8 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *issues_model.PullRequest, m
}
}
func ( m * webhookNotifier ) NotifyIssueChangeContent ( doer * user_model . User , issue * issues_model . Issue , oldContent string ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeContent User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
func ( m * webhookNotifier ) NotifyIssueChangeContent ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , oldContent string ) {
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
var err error
if issue . IsPull {
issue . PullRequest . Issue = issue
@ -363,7 +340,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *user_model.User, issue
From : oldContent ,
} ,
} ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
@ -373,17 +350,17 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *user_model.User, issue
}
}
func ( m * webhookNotifier ) NotifyUpdateComment ( doer * user_model . User , c * issues_model . Comment , oldContent string ) {
if err := c . LoadPoster ( ) ; err != nil {
func ( m * webhookNotifier ) NotifyUpdateComment ( ctx context . Context , doer * user_model . User , c * issues_model . Comment , oldContent string ) {
if err := c . LoadPoster ( ctx ) ; err != nil {
log . Error ( "LoadPoster: %v" , err )
return
}
if err := c . LoadIssue ( ) ; err != nil {
if err := c . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
if err := c . Issue . LoadAttributes ( db . Defaul tConte xt ) ; err != nil {
if err := c . Issue . LoadAttributes ( c tx) ; err != nil {
log . Error ( "LoadAttributes: %v" , err )
return
}
@ -395,10 +372,10 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *user_model.User, c *issues_m
eventType = webhook . HookEventIssueComment
}
mode , _ := access_model . AccessLevel ( doer , c . Issue . Repo )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : c . Issue . Repo } , eventType , & api . IssueCommentPayload {
mode , _ := access_model . AccessLevel ( ctx , doer , c . Issue . Repo )
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : c . Issue . Repo } , eventType , & api . IssueCommentPayload {
Action : api . HookIssueCommentEdited ,
Issue : convert . ToAPIIssue ( c . Issue ) ,
Issue : convert . ToAPIIssue ( ctx , c . Issue ) ,
Comment : convert . ToComment ( c ) ,
Changes : & api . ChangesPayload {
Body : & api . ChangesFromPayload {
@ -413,7 +390,7 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *user_model.User, c *issues_m
}
}
func ( m * webhookNotifier ) NotifyCreateIssueComment ( doer * user_model . User , repo * repo_model . Repository ,
func ( m * webhookNotifier ) NotifyCreateIssueComment ( ctx context . Context , doer * user_model . User , repo * repo_model . Repository ,
issue * issues_model . Issue , comment * issues_model . Comment , mentions [ ] * user_model . User ,
) {
var eventType webhook . HookEventType
@ -423,10 +400,10 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *user_model.User, repo *
eventType = webhook . HookEventIssueComment
}
mode , _ := access_model . AccessLevel ( doer , repo )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : issue . Repo } , eventType , & api . IssueCommentPayload {
mode , _ := access_model . AccessLevel ( ctx , doer , repo )
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : issue . Repo } , eventType , & api . IssueCommentPayload {
Action : api . HookIssueCommentCreated ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Comment : convert . ToComment ( comment ) ,
Repository : convert . ToRepo ( repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -436,19 +413,19 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *user_model.User, repo *
}
}
func ( m * webhookNotifier ) NotifyDeleteComment ( doer * user_model . User , comment * issues_model . Comment ) {
func ( m * webhookNotifier ) NotifyDeleteComment ( ctx context . Context , doer * user_model . User , comment * issues_model . Comment ) {
var err error
if err = comment . LoadPoster ( ) ; err != nil {
if err = comment . LoadPoster ( ctx ) ; err != nil {
log . Error ( "LoadPoster: %v" , err )
return
}
if err = comment . LoadIssue ( ) ; err != nil {
if err = comment . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
if err = comment . Issue . LoadAttributes ( db . Defaul tConte xt ) ; err != nil {
if err = comment . Issue . LoadAttributes ( c tx) ; err != nil {
log . Error ( "LoadAttributes: %v" , err )
return
}
@ -460,10 +437,10 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *user_model.User, comment *is
eventType = webhook . HookEventIssueComment
}
mode , _ := access_model . AccessLevel ( doer , comment . Issue . Repo )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : comment . Issue . Repo } , eventType , & api . IssueCommentPayload {
mode , _ := access_model . AccessLevel ( ctx , doer , comment . Issue . Repo )
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : comment . Issue . Repo } , eventType , & api . IssueCommentPayload {
Action : api . HookIssueCommentDeleted ,
Issue : convert . ToAPIIssue ( comment . Issue ) ,
Issue : convert . ToAPIIssue ( ctx , c omment . Issue ) ,
Comment : convert . ToComment ( comment ) ,
Repository : convert . ToRepo ( comment . Issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -473,9 +450,9 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *user_model.User, comment *is
}
}
func ( m * webhookNotifier ) NotifyNewWikiPage ( doer * user_model . User , repo * repo_model . Repository , page , comment string ) {
func ( m * webhookNotifier ) NotifyNewWikiPage ( ctx context . Context , doer * user_model . User , repo * repo_model . Repository , page , comment string ) {
// Add to hook queue for created wiki page.
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
Action : api . HookWikiCreated ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -486,9 +463,9 @@ func (m *webhookNotifier) NotifyNewWikiPage(doer *user_model.User, repo *repo_mo
}
}
func ( m * webhookNotifier ) NotifyEditWikiPage ( doer * user_model . User , repo * repo_model . Repository , page , comment string ) {
func ( m * webhookNotifier ) NotifyEditWikiPage ( ctx context . Context , doer * user_model . User , repo * repo_model . Repository , page , comment string ) {
// Add to hook queue for edit wiki page.
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
Action : api . HookWikiEdited ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -499,9 +476,9 @@ func (m *webhookNotifier) NotifyEditWikiPage(doer *user_model.User, repo *repo_m
}
}
func ( m * webhookNotifier ) NotifyDeleteWikiPage ( doer * user_model . User , repo * repo_model . Repository , page string ) {
func ( m * webhookNotifier ) NotifyDeleteWikiPage ( ctx context . Context , doer * user_model . User , repo * repo_model . Repository , page string ) {
// Add to hook queue for edit wiki page.
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventWiki , & api . WikiPayload {
Action : api . HookWikiDeleted ,
Repository : convert . ToRepo ( repo , perm . AccessModeOwner ) ,
Sender : convert . ToUser ( doer , nil ) ,
@ -511,12 +488,9 @@ func (m *webhookNotifier) NotifyDeleteWikiPage(doer *user_model.User, repo *repo
}
}
func ( m * webhookNotifier ) NotifyIssueChangeLabels ( doer * user_model . User , issue * issues_model . Issue ,
func ( m * webhookNotifier ) NotifyIssueChangeLabels ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue ,
addedLabels , removedLabels [ ] * issues_model . Label ,
) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeLabels User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
var err error
if err = issue . LoadRepo ( ctx ) ; err != nil {
@ -524,18 +498,18 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *user_model.User, issue *
return
}
if err = issue . LoadPoster ( ) ; err != nil {
if err = issue . LoadPoster ( ctx ) ; err != nil {
log . Error ( "LoadPoster: %v" , err )
return
}
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
if issue . IsPull {
if err = issue . LoadPullRequest ( ) ; err != nil {
if err = issue . LoadPullRequest ( ctx ) ; err != nil {
log . Error ( "loadPullRequest: %v" , err )
return
}
if err = issue . PullRequest . LoadIssue ( ) ; err != nil {
if err = issue . PullRequest . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
@ -550,7 +524,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *user_model.User, issue *
err = webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventIssueLabel , & api . IssuePayload {
Action : api . HookIssueLabelUpdated ,
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
@ -560,10 +534,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *user_model.User, issue *
}
}
func ( m * webhookNotifier ) NotifyIssueChangeMilestone ( doer * user_model . User , issue * issues_model . Issue , oldMilestoneID int64 ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyIssueChangeMilestone User: %s[%d] Issue[%d] #%d in [%d]" , doer . Name , doer . ID , issue . ID , issue . Index , issue . RepoID ) )
defer finished ( )
func ( m * webhookNotifier ) NotifyIssueChangeMilestone ( ctx context . Context , doer * user_model . User , issue * issues_model . Issue , oldMilestoneID int64 ) {
var hookAction api . HookIssueAction
var err error
if issue . MilestoneID > 0 {
@ -572,14 +543,14 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *user_model.User, issu
hookAction = api . HookIssueDemilestoned
}
if err = issue . LoadAttributes ( db . Defaul tConte xt ) ; err != nil {
if err = issue . LoadAttributes ( c tx) ; err != nil {
log . Error ( "issue.LoadAttributes failed: %v" , err )
return
}
mode , _ := access_model . AccessLevel ( doer , issue . Repo )
mode , _ := access_model . AccessLevel ( ctx , doer , issue . Repo )
if issue . IsPull {
err = issue . PullRequest . LoadIssue ( )
err = issue . PullRequest . LoadIssue ( ctx )
if err != nil {
log . Error ( "LoadIssue: %v" , err )
return
@ -595,7 +566,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *user_model.User, issu
err = webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventIssueMilestone , & api . IssuePayload {
Action : hookAction ,
Index : issue . Index ,
Issue : convert . ToAPIIssue ( issue ) ,
Issue : convert . ToAPIIssue ( ctx , issue ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
@ -605,10 +576,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *user_model.User, issu
}
}
func ( m * webhookNotifier ) NotifyPushCommits ( pusher * user_model . User , repo * repo_model . Repository , opts * repository . PushUpdateOptions , commits * repository . PushCommits ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyPushCommits User: %s[%d] in %s[%d]" , pusher . Name , pusher . ID , repo . FullName ( ) , repo . ID ) )
defer finished ( )
func ( m * webhookNotifier ) NotifyPushCommits ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , opts * repository . PushUpdateOptions , commits * repository . PushCommits ) {
apiPusher := convert . ToUser ( pusher , nil )
apiCommits , apiHeadCommit , err := commits . ToAPIPayloadCommits ( ctx , repo . RepoPath ( ) , repo . HTMLURL ( ) )
if err != nil {
@ -632,23 +600,20 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *user_model.User, repo *repo_
}
}
func ( m * webhookNotifier ) NotifyAutoMergePullRequest ( p r * issues_model . PullRequest , doer * user_model . User ) {
func ( m * webhookNotifier ) NotifyAutoMergePullRequest ( ctx context . Context , doe r * user_model . User , pr * issues_model . PullRequest ) {
// just redirect to the NotifyMergePullRequest
m . NotifyMergePullRequest ( pr , doer )
m . NotifyMergePullRequest ( ctx , doer , p r )
}
func ( * webhookNotifier ) NotifyMergePullRequest ( pr * issues_model . PullRequest , doer * user_model . User ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyMergePullRequest Pull[%d] #%d in [%d]" , pr . ID , pr . Index , pr . BaseRepoID ) )
defer finished ( )
func ( * webhookNotifier ) NotifyMergePullRequest ( ctx context . Context , doer * user_model . User , pr * issues_model . PullRequest ) {
// Reload pull request information.
if err := pr . LoadAttributes ( ) ; err != nil {
if err := pr . LoadAttributes ( ctx ) ; err != nil {
log . Error ( "LoadAttributes: %v" , err )
return
}
if err := pr . LoadIssue ( ) ; err != nil {
log . Error ( "LoadAttributes : %v" , err )
if err := pr . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue : %v" , err )
return
}
@ -657,7 +622,7 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *issues_model.PullRequest, doe
return
}
mode , err := access_model . AccessLevel ( doer , pr . Issue . Repo )
mode , err := access_model . AccessLevel ( ctx , doer , pr . Issue . Repo )
if err != nil {
log . Error ( "models.AccessLevel: %v" , err )
return
@ -672,29 +637,21 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *issues_model.PullRequest, doe
Action : api . HookIssueClosed ,
}
err = webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : pr . Issue . Repo } , webhook . HookEventPullRequest , apiPullRequest )
if err != nil {
if err := webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : pr . Issue . Repo } , webhook . HookEventPullRequest , apiPullRequest ) ; err != nil {
log . Error ( "PrepareWebhooks: %v" , err )
}
}
func ( m * webhookNotifier ) NotifyPullRequestChangeTargetBranch ( doer * user_model . User , pr * issues_model . PullRequest , oldBranch string ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyPullRequestChangeTargetBranch Pull[%d] #%d in [%d]" , pr . ID , pr . Index , pr . BaseRepoID ) )
defer finished ( )
issue := pr . Issue
if ! issue . IsPull {
func ( m * webhookNotifier ) NotifyPullRequestChangeTargetBranch ( ctx context . Context , doer * user_model . User , pr * issues_model . PullRequest , oldBranch string ) {
if err := pr . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
var err error
if err = issue . LoadPullRequest ( ) ; err != nil {
log . Error ( "LoadPullRequest failed: %v" , err )
return
}
issue . PullRequest . Issue = issue
mode , _ := access_model . AccessLevel ( issue . Poster , issue . Repo )
err = webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventPullRequest , & api . PullRequestPayload {
issue := pr . Issue
mode , _ := access_model . AccessLevel ( ctx , issue . Poster , issue . Repo )
if err := webhook_services . PrepareWebhooks ( ctx , webhook_services . EventSource { Repository : issue . Repo } , webhook . HookEventPullRequest , & api . PullRequestPayload {
Action : api . HookIssueEdited ,
Index : issue . Index ,
Changes : & api . ChangesPayload {
@ -702,20 +659,15 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(doer *user_model.U
From : oldBranch ,
} ,
} ,
PullRequest : convert . ToAPIPullRequest ( ctx , issue . PullRequest , nil ) ,
PullRequest : convert . ToAPIPullRequest ( ctx , pr , nil ) ,
Repository : convert . ToRepo ( issue . Repo , mode ) ,
Sender : convert . ToUser ( doer , nil ) ,
} )
if err != nil {
log . Error ( "PrepareWebhooks [is_pull: %v]: %v" , issue . IsPull , err )
} ) ; err != nil {
log . Error ( "PrepareWebhooks [pr: %d]: %v" , pr . ID , err )
}
}
func ( m * webhookNotifier ) NotifyPullRequestReview ( pr * issues_model . PullRequest , review * issues_model . Review , comment * issues_model . Comment , mentions [ ] * user_model . User ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyPullRequestReview Pull[%d] #%d in [%d]" , pr . ID , pr . Index , pr . BaseRepoID ) )
defer finished ( )
func ( m * webhookNotifier ) NotifyPullRequestReview ( ctx context . Context , pr * issues_model . PullRequest , review * issues_model . Review , comment * issues_model . Comment , mentions [ ] * user_model . User ) {
var reviewHookType webhook . HookEventType
switch review . Type {
@ -731,12 +683,12 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *issues_model.PullRequest,
return
}
if err := pr . LoadIssue ( ) ; err != nil {
log . Error ( "pr. LoadIssue: %v" , err )
if err := pr . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
mode , err := access_model . AccessLevel ( review . Issue . Poster , review . Issue . Repo )
mode , err := access_model . AccessLevel ( ctx , review . Issue . Poster , review . Issue . Repo )
if err != nil {
log . Error ( "models.AccessLevel: %v" , err )
return
@ -756,12 +708,12 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *issues_model.PullRequest,
}
}
func ( m * webhookNotifier ) NotifyCreateRef ( pusher * user_model . User , repo * repo_model . Repository , refType , refFullName , refID string ) {
func ( m * webhookNotifier ) NotifyCreateRef ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , refType , refFullName , refID string ) {
apiPusher := convert . ToUser ( pusher , nil )
apiRepo := convert . ToRepo ( repo , perm . AccessModeNone )
refName := git . RefEndName ( refFullName )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventCreate , & api . CreatePayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventCreate , & api . CreatePayload {
Ref : refName ,
Sha : refID ,
RefType : refType ,
@ -772,15 +724,12 @@ func (m *webhookNotifier) NotifyCreateRef(pusher *user_model.User, repo *repo_mo
}
}
func ( m * webhookNotifier ) NotifyPullRequestSynchronized ( doer * user_model . User , pr * issues_model . PullRequest ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifyPullRequestSynchronized Pull[%d] #%d in [%d]" , pr . ID , pr . Index , pr . BaseRepoID ) )
defer finished ( )
if err := pr . LoadIssue ( ) ; err != nil {
log . Error ( "pr.LoadIssue: %v" , err )
func ( m * webhookNotifier ) NotifyPullRequestSynchronized ( ctx context . Context , doer * user_model . User , pr * issues_model . PullRequest ) {
if err := pr . LoadIssue ( ctx ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
if err := pr . Issue . LoadAttributes ( db . Defaul tConte xt ) ; err != nil {
if err := pr . Issue . LoadAttributes ( ctx ) ; err != nil {
log . Error ( "LoadAttributes: %v" , err )
return
}
@ -796,12 +745,12 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *user_model.User, p
}
}
func ( m * webhookNotifier ) NotifyDeleteRef ( pusher * user_model . User , repo * repo_model . Repository , refType , refFullName string ) {
func ( m * webhookNotifier ) NotifyDeleteRef ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , refType , refFullName string ) {
apiPusher := convert . ToUser ( pusher , nil )
apiRepo := convert . ToRepo ( repo , perm . AccessModeNone )
refName := git . RefEndName ( refFullName )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : repo } , webhook . HookEventDelete , & api . DeletePayload {
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : repo } , webhook . HookEventDelete , & api . DeletePayload {
Ref : refName ,
RefType : refType ,
PusherType : api . PusherTypeUser ,
@ -812,14 +761,14 @@ func (m *webhookNotifier) NotifyDeleteRef(pusher *user_model.User, repo *repo_mo
}
}
func sendReleaseHook ( doer * user_model . User , rel * repo_model . Release , action api . HookReleaseAction ) {
if err := rel . LoadAttributes ( ) ; err != nil {
func sendReleaseHook ( ctx context . Context , doer * user_model . User , rel * repo_model . Release , action api . HookReleaseAction ) {
if err := rel . LoadAttributes ( ctx ) ; err != nil {
log . Error ( "LoadAttributes: %v" , err )
return
}
mode , _ := access_model . AccessLevel ( doer , rel . Repo )
if err := webhook_services . PrepareWebhooks ( db . Defaul tConte xt , webhook_services . EventSource { Repository : rel . Repo } , webhook . HookEventRelease , & api . ReleasePayload {
mode , _ := access_model . AccessLevel ( ctx , doer , rel . Repo )
if err := webhook_services . PrepareWebhooks ( c tx, webhook_services . EventSource { Repository : rel . Repo } , webhook . HookEventRelease , & api . ReleasePayload {
Action : action ,
Release : convert . ToRelease ( rel ) ,
Repository : convert . ToRepo ( rel . Repo , mode ) ,
@ -829,22 +778,19 @@ func sendReleaseHook(doer *user_model.User, rel *repo_model.Release, action api.
}
}
func ( m * webhookNotifier ) NotifyNewRelease ( rel * repo_model . Release ) {
sendReleaseHook ( rel . Publisher , rel , api . HookReleasePublished )
func ( m * webhookNotifier ) NotifyNewRelease ( ctx context . Context , rel * repo_model . Release ) {
sendReleaseHook ( ctx , rel . Publisher , rel , api . HookReleasePublished )
}
func ( m * webhookNotifier ) NotifyUpdateRelease ( doer * user_model . User , rel * repo_model . Release ) {
sendReleaseHook ( doer , rel , api . HookReleaseUpdated )
func ( m * webhookNotifier ) NotifyUpdateRelease ( ctx context . Context , doer * user_model . User , rel * repo_model . Release ) {
sendReleaseHook ( ctx , doer , rel , api . HookReleaseUpdated )
}
func ( m * webhookNotifier ) NotifyDeleteRelease ( doer * user_model . User , rel * repo_model . Release ) {
sendReleaseHook ( doer , rel , api . HookReleaseDeleted )
func ( m * webhookNotifier ) NotifyDeleteRelease ( ctx context . Context , doer * user_model . User , rel * repo_model . Release ) {
sendReleaseHook ( ctx , doer , rel , api . HookReleaseDeleted )
}
func ( m * webhookNotifier ) NotifySyncPushCommits ( pusher * user_model . User , repo * repo_model . Repository , opts * repository . PushUpdateOptions , commits * repository . PushCommits ) {
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.NotifySyncPushCommits User: %s[%d] in %s[%d]" , pusher . Name , pusher . ID , repo . FullName ( ) , repo . ID ) )
defer finished ( )
func ( m * webhookNotifier ) NotifySyncPushCommits ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , opts * repository . PushUpdateOptions , commits * repository . PushCommits ) {
apiPusher := convert . ToUser ( pusher , nil )
apiCommits , apiHeadCommit , err := commits . ToAPIPayloadCommits ( ctx , repo . RepoPath ( ) , repo . HTMLURL ( ) )
if err != nil {
@ -868,31 +814,28 @@ func (m *webhookNotifier) NotifySyncPushCommits(pusher *user_model.User, repo *r
}
}
func ( m * webhookNotifier ) NotifySyncCreateRef ( pusher * user_model . User , repo * repo_model . Repository , refType , refFullName , refID string ) {
m . NotifyCreateRef ( pusher , repo , refType , refFullName , refID )
func ( m * webhookNotifier ) NotifySyncCreateRef ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , refType , refFullName , refID string ) {
m . NotifyCreateRef ( ctx , pusher , repo , refType , refFullName , refID )
}
func ( m * webhookNotifier ) NotifySyncDeleteRef ( pusher * user_model . User , repo * repo_model . Repository , refType , refFullName string ) {
m . NotifyDeleteRef ( pusher , repo , refType , refFullName )
func ( m * webhookNotifier ) NotifySyncDeleteRef ( ctx context . Context , pusher * user_model . User , repo * repo_model . Repository , refType , refFullName string ) {
m . NotifyDeleteRef ( ctx , pusher , repo , refType , refFullName )
}
func ( m * webhookNotifier ) NotifyPackageCreate ( doer * user_model . User , pd * packages_model . PackageDescriptor ) {
notifyPackage ( doer , pd , api . HookPackageCreated )
func ( m * webhookNotifier ) NotifyPackageCreate ( ctx context . Context , doer * user_model . User , pd * packages_model . PackageDescriptor ) {
notifyPackage ( ctx , doer , pd , api . HookPackageCreated )
}
func ( m * webhookNotifier ) NotifyPackageDelete ( doer * user_model . User , pd * packages_model . PackageDescriptor ) {
notifyPackage ( doer , pd , api . HookPackageDeleted )
func ( m * webhookNotifier ) NotifyPackageDelete ( ctx context . Context , doer * user_model . User , pd * packages_model . PackageDescriptor ) {
notifyPackage ( ctx , doer , pd , api . HookPackageDeleted )
}
func notifyPackage ( sender * user_model . User , pd * packages_model . PackageDescriptor , action api . HookPackageAction ) {
func notifyPackage ( ctx context . Context , sender * user_model . User , pd * packages_model . PackageDescriptor , action api . HookPackageAction ) {
source := webhook_services . EventSource {
Repository : pd . Repository ,
Owner : pd . Owner ,
}
ctx , _ , finished := process . GetManager ( ) . AddContext ( graceful . GetManager ( ) . HammerContext ( ) , fmt . Sprintf ( "webhook.notifyPackage Package: %s[%d]" , pd . Package . Name , pd . Package . ID ) )
defer finished ( )
apiPackage , err := convert . ToPackage ( ctx , pd , sender )
if err != nil {
log . Error ( "Error converting package: %v" , err )