forked from gitea/gitea
		
	Move repofiles webhooks to notification (#8807)
This commit is contained in:
		
							parent
							
								
									36b8c081f6
								
							
						
					
					
						commit
						8a84d82d53
					
				| @ -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) | ||||
| } | ||||
|  | ||||
| @ -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) { | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 GitHub
							GitHub