Move pull webhook to notification (#8805)
* Move pull webhook to notification * fix fmt
This commit is contained in:
		
							parent
							
								
									05e7715c4b
								
							
						
					
					
						commit
						aaeef295bb
					
				
					 7 changed files with 84 additions and 71 deletions
				
			
		|  | @ -30,6 +30,7 @@ type Notifier interface { | |||
| 
 | ||||
| 	NotifyNewPullRequest(*models.PullRequest) | ||||
| 	NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository) | ||||
| 	NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) | ||||
| 	NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment) | ||||
| 
 | ||||
| 	NotifyCreateIssueComment(*models.User, *models.Repository, | ||||
|  |  | |||
|  | @ -46,6 +46,10 @@ func (*NullNotifier) NotifyPullRequestReview(pr *models.PullRequest, r *models.R | |||
| func (*NullNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | ||||
| } | ||||
| 
 | ||||
| // NotifyPullRequestSynchronized places a place holder function
 | ||||
| func (*NullNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||
| } | ||||
| 
 | ||||
| // NotifyUpdateComment places a place holder function
 | ||||
| func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) { | ||||
| } | ||||
|  |  | |||
|  | @ -73,6 +73,13 @@ func NotifyNewPullRequest(pr *models.PullRequest) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NotifyPullRequestSynchronized notifies Synchronized pull request
 | ||||
| func NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||
| 	for _, notifier := range notifiers { | ||||
| 		notifier.NotifyPullRequestSynchronized(doer, pr) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NotifyPullRequestReview notifies new pull request review
 | ||||
| func NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | ||||
| 	for _, notifier := range notifiers { | ||||
|  |  | |||
|  | @ -520,3 +520,65 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re | |||
| 		log.Error("PrepareWebhooks: %v", err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | ||||
| 	var reviewHookType models.HookEventType | ||||
| 
 | ||||
| 	switch review.Type { | ||||
| 	case models.ReviewTypeApprove: | ||||
| 		reviewHookType = models.HookEventPullRequestApproved | ||||
| 	case models.ReviewTypeComment: | ||||
| 		reviewHookType = models.HookEventPullRequestComment | ||||
| 	case models.ReviewTypeReject: | ||||
| 		reviewHookType = models.HookEventPullRequestRejected | ||||
| 	default: | ||||
| 		// unsupported review webhook type here
 | ||||
| 		log.Error("Unsupported review webhook type") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if err := pr.LoadIssue(); err != nil { | ||||
| 		log.Error("pr.LoadIssue: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo) | ||||
| 	if err != nil { | ||||
| 		log.Error("models.AccessLevel: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueSynchronized, | ||||
| 		Index:       review.Issue.Index, | ||||
| 		PullRequest: pr.APIFormat(), | ||||
| 		Repository:  review.Issue.Repo.APIFormat(mode), | ||||
| 		Sender:      review.Reviewer.APIFormat(), | ||||
| 		Review: &api.ReviewPayload{ | ||||
| 			Type:    string(reviewHookType), | ||||
| 			Content: review.Content, | ||||
| 		}, | ||||
| 	}); 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 := pr.Issue.LoadAttributes(); err != nil { | ||||
| 		log.Error("LoadAttributes: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueSynchronized, | ||||
| 		Index:       pr.Issue.Index, | ||||
| 		PullRequest: pr.Issue.PullRequest.APIFormat(), | ||||
| 		Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), | ||||
| 		Sender:      doer.APIFormat(), | ||||
| 	}); err != nil { | ||||
| 		log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -20,10 +20,9 @@ import ( | |||
| 	"code.gitea.io/gitea/modules/cache" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"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/timeutil" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 
 | ||||
| 	"github.com/mcuadros/go-version" | ||||
| ) | ||||
|  | @ -360,16 +359,7 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor | |||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	mode, _ := models.AccessLevel(doer, pr.Issue.Repo) | ||||
| 	if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueClosed, | ||||
| 		Index:       pr.Index, | ||||
| 		PullRequest: pr.APIFormat(), | ||||
| 		Repository:  pr.Issue.Repo.APIFormat(mode), | ||||
| 		Sender:      doer.APIFormat(), | ||||
| 	}); err != nil { | ||||
| 		log.Error("PrepareWebhooks: %v", err) | ||||
| 	} | ||||
| 	notification.NotifyIssueChangeStatus(doer, pr.Issue, true) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
|  |  | |||
|  | @ -11,8 +11,6 @@ import ( | |||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/notification" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	issue_service "code.gitea.io/gitea/services/issue" | ||||
| ) | ||||
| 
 | ||||
|  | @ -90,23 +88,9 @@ func AddTestPullRequestTask(doer *models.User, repoID int64, branch string, isSy | |||
| 		if err == nil { | ||||
| 			for _, pr := range prs { | ||||
| 				pr.Issue.PullRequest = pr | ||||
| 				if err = pr.Issue.LoadAttributes(); err != nil { | ||||
| 					log.Error("LoadAttributes: %v", err) | ||||
| 					continue | ||||
| 				} | ||||
| 				if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 					Action:      api.HookIssueSynchronized, | ||||
| 					Index:       pr.Issue.Index, | ||||
| 					PullRequest: pr.Issue.PullRequest.APIFormat(), | ||||
| 					Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), | ||||
| 					Sender:      doer.APIFormat(), | ||||
| 				}); err != nil { | ||||
| 					log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | ||||
| 					continue | ||||
| 				} | ||||
| 				notification.NotifyPullRequestSynchronized(doer, pr) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	addHeadRepoTasks(prs) | ||||
|  |  | |||
|  | @ -7,8 +7,7 @@ package pull | |||
| 
 | ||||
| import ( | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	"code.gitea.io/gitea/modules/notification" | ||||
| ) | ||||
| 
 | ||||
| // CreateReview creates a new review based on opts
 | ||||
|  | @ -18,7 +17,9 @@ func CreateReview(opts models.CreateReviewOptions) (*models.Review, error) { | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return review, reviewHook(review) | ||||
| 	notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil) | ||||
| 
 | ||||
| 	return review, nil | ||||
| } | ||||
| 
 | ||||
| // UpdateReview updates a review
 | ||||
|  | @ -28,43 +29,7 @@ func UpdateReview(review *models.Review) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return reviewHook(review) | ||||
| } | ||||
| 
 | ||||
| func reviewHook(review *models.Review) error { | ||||
| 	var reviewHookType models.HookEventType | ||||
| 
 | ||||
| 	switch review.Type { | ||||
| 	case models.ReviewTypeApprove: | ||||
| 		reviewHookType = models.HookEventPullRequestApproved | ||||
| 	case models.ReviewTypeComment: | ||||
| 		reviewHookType = models.HookEventPullRequestComment | ||||
| 	case models.ReviewTypeReject: | ||||
| 		reviewHookType = models.HookEventPullRequestRejected | ||||
| 	default: | ||||
| 		// unsupported review webhook type here
 | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	pr := review.Issue.PullRequest | ||||
| 
 | ||||
| 	if err := pr.LoadIssue(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueSynchronized, | ||||
| 		Index:       review.Issue.Index, | ||||
| 		PullRequest: pr.APIFormat(), | ||||
| 		Repository:  review.Issue.Repo.APIFormat(mode), | ||||
| 		Sender:      review.Reviewer.APIFormat(), | ||||
| 		Review: &api.ReviewPayload{ | ||||
| 			Type:    string(reviewHookType), | ||||
| 			Content: review.Content, | ||||
| 		}, | ||||
| 	}) | ||||
| 	notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue