Fix duplicate call of webhook (#7821)
This commit is contained in:
		
							parent
							
								
									8bfeb85f93
								
							
						
					
					
						commit
						e9bb75d8d1
					
				| @ -54,6 +54,10 @@ func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum str | ||||
| 
 | ||||
| func TestPullMerge(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
 | ||||
| 		assert.NoError(t, err) | ||||
| 		hookTasksLenBefore := len(hookTasks) | ||||
| 
 | ||||
| 		session := loginUser(t, "user1") | ||||
| 		testRepoFork(t, session, "user2", "repo1", "user1", "repo1") | ||||
| 		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n") | ||||
| @ -63,11 +67,19 @@ func TestPullMerge(t *testing.T) { | ||||
| 		elem := strings.Split(test.RedirectURL(resp), "/") | ||||
| 		assert.EqualValues(t, "pulls", elem[3]) | ||||
| 		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge) | ||||
| 
 | ||||
| 		hookTasks, err = models.HookTasks(1, 1) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Len(t, hookTasks, hookTasksLenBefore+1) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func TestPullRebase(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
 | ||||
| 		assert.NoError(t, err) | ||||
| 		hookTasksLenBefore := len(hookTasks) | ||||
| 
 | ||||
| 		session := loginUser(t, "user1") | ||||
| 		testRepoFork(t, session, "user2", "repo1", "user1", "repo1") | ||||
| 		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n") | ||||
| @ -77,12 +89,21 @@ func TestPullRebase(t *testing.T) { | ||||
| 		elem := strings.Split(test.RedirectURL(resp), "/") | ||||
| 		assert.EqualValues(t, "pulls", elem[3]) | ||||
| 		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebase) | ||||
| 
 | ||||
| 		hookTasks, err = models.HookTasks(1, 1) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Len(t, hookTasks, hookTasksLenBefore+1) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func TestPullRebaseMerge(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		prepareTestEnv(t) | ||||
| 
 | ||||
| 		hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
 | ||||
| 		assert.NoError(t, err) | ||||
| 		hookTasksLenBefore := len(hookTasks) | ||||
| 
 | ||||
| 		session := loginUser(t, "user1") | ||||
| 		testRepoFork(t, session, "user2", "repo1", "user1", "repo1") | ||||
| 		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n") | ||||
| @ -92,12 +113,21 @@ func TestPullRebaseMerge(t *testing.T) { | ||||
| 		elem := strings.Split(test.RedirectURL(resp), "/") | ||||
| 		assert.EqualValues(t, "pulls", elem[3]) | ||||
| 		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebaseMerge) | ||||
| 
 | ||||
| 		hookTasks, err = models.HookTasks(1, 1) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Len(t, hookTasks, hookTasksLenBefore+1) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func TestPullSquash(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		prepareTestEnv(t) | ||||
| 
 | ||||
| 		hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
 | ||||
| 		assert.NoError(t, err) | ||||
| 		hookTasksLenBefore := len(hookTasks) | ||||
| 
 | ||||
| 		session := loginUser(t, "user1") | ||||
| 		testRepoFork(t, session, "user2", "repo1", "user1", "repo1") | ||||
| 		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n") | ||||
| @ -108,6 +138,10 @@ func TestPullSquash(t *testing.T) { | ||||
| 		elem := strings.Split(test.RedirectURL(resp), "/") | ||||
| 		assert.EqualValues(t, "pulls", elem[3]) | ||||
| 		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleSquash) | ||||
| 
 | ||||
| 		hookTasks, err = models.HookTasks(1, 1) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Len(t, hookTasks, hookTasksLenBefore+1) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -890,7 +890,6 @@ func DeliverHooks() { | ||||
| 	for _, t := range tasks { | ||||
| 		if err = t.deliver(); err != nil { | ||||
| 			log.Error("deliver: %v", err) | ||||
| 			continue | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -292,39 +292,6 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor | ||||
| 		go models.HookQueue.Add(pr.Issue.Repo.ID) | ||||
| 	} | ||||
| 
 | ||||
| 	l, err := baseGitRepo.CommitsBetweenIDs(pr.MergedCommitID, pr.MergeBase) | ||||
| 	if err != nil { | ||||
| 		log.Error("CommitsBetweenIDs: %v", err) | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	// It is possible that head branch is not fully sync with base branch for merge commits,
 | ||||
| 	// so we need to get latest head commit and append merge commit manually
 | ||||
| 	// to avoid strange diff commits produced.
 | ||||
| 	mergeCommit, err := baseGitRepo.GetBranchCommit(pr.BaseBranch) | ||||
| 	if err != nil { | ||||
| 		log.Error("GetBranchCommit: %v", err) | ||||
| 		return nil | ||||
| 	} | ||||
| 	if mergeStyle == models.MergeStyleMerge { | ||||
| 		l.PushFront(mergeCommit) | ||||
| 	} | ||||
| 
 | ||||
| 	p := &api.PushPayload{ | ||||
| 		Ref:        git.BranchPrefix + pr.BaseBranch, | ||||
| 		Before:     pr.MergeBase, | ||||
| 		After:      mergeCommit.ID.String(), | ||||
| 		CompareURL: setting.AppURL + pr.BaseRepo.ComposeCompareURL(pr.MergeBase, pr.MergedCommitID), | ||||
| 		Commits:    models.ListToPushCommits(l).ToAPIPayloadCommits(pr.BaseRepo.HTMLURL()), | ||||
| 		Repo:       pr.BaseRepo.APIFormat(mode), | ||||
| 		Pusher:     pr.HeadRepo.MustOwner().APIFormat(), | ||||
| 		Sender:     doer.APIFormat(), | ||||
| 	} | ||||
| 	if err = models.PrepareWebhooks(pr.BaseRepo, models.HookEventPush, p); err != nil { | ||||
| 		log.Error("PrepareWebhooks: %v", err) | ||||
| 	} else { | ||||
| 		go models.HookQueue.Add(pr.BaseRepo.ID) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -178,32 +178,6 @@ func DeleteRepoFile(repo *models.Repository, doer *models.User, opts *DeleteRepo | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// Simulate push event.
 | ||||
| 	oldCommitID := opts.LastCommitID | ||||
| 	if opts.NewBranch != opts.OldBranch { | ||||
| 		oldCommitID = git.EmptySHA | ||||
| 	} | ||||
| 
 | ||||
| 	if err = repo.GetOwner(); err != nil { | ||||
| 		return nil, fmt.Errorf("GetOwner: %v", err) | ||||
| 	} | ||||
| 	err = PushUpdate( | ||||
| 		repo, | ||||
| 		opts.NewBranch, | ||||
| 		models.PushUpdateOptions{ | ||||
| 			PusherID:     doer.ID, | ||||
| 			PusherName:   doer.Name, | ||||
| 			RepoUserName: repo.Owner.Name, | ||||
| 			RepoName:     repo.Name, | ||||
| 			RefFullName:  git.BranchPrefix + opts.NewBranch, | ||||
| 			OldCommitID:  oldCommitID, | ||||
| 			NewCommitID:  commitHash, | ||||
| 		}, | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("PushUpdate: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	commit, err = t.GetCommit(commitHash) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  | ||||
| @ -396,32 +396,6 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// Simulate push event.
 | ||||
| 	oldCommitID := opts.LastCommitID | ||||
| 	if opts.NewBranch != opts.OldBranch || oldCommitID == "" { | ||||
| 		oldCommitID = git.EmptySHA | ||||
| 	} | ||||
| 
 | ||||
| 	if err = repo.GetOwner(); err != nil { | ||||
| 		return nil, fmt.Errorf("GetOwner: %v", err) | ||||
| 	} | ||||
| 	err = PushUpdate( | ||||
| 		repo, | ||||
| 		opts.NewBranch, | ||||
| 		models.PushUpdateOptions{ | ||||
| 			PusherID:     doer.ID, | ||||
| 			PusherName:   doer.Name, | ||||
| 			RepoUserName: repo.Owner.Name, | ||||
| 			RepoName:     repo.Name, | ||||
| 			RefFullName:  git.BranchPrefix + opts.NewBranch, | ||||
| 			OldCommitID:  oldCommitID, | ||||
| 			NewCommitID:  commitHash, | ||||
| 		}, | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("PushUpdate: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	commit, err = t.GetCommit(commitHash) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  | ||||
| @ -11,7 +11,6 @@ import ( | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/lfs" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| ) | ||||
| @ -177,31 +176,5 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// Simulate push event.
 | ||||
| 	oldCommitID := opts.LastCommitID | ||||
| 	if opts.NewBranch != opts.OldBranch { | ||||
| 		oldCommitID = git.EmptySHA | ||||
| 	} | ||||
| 
 | ||||
| 	if err = repo.GetOwner(); err != nil { | ||||
| 		return fmt.Errorf("GetOwner: %v", err) | ||||
| 	} | ||||
| 	err = PushUpdate( | ||||
| 		repo, | ||||
| 		opts.NewBranch, | ||||
| 		models.PushUpdateOptions{ | ||||
| 			PusherID:     doer.ID, | ||||
| 			PusherName:   doer.Name, | ||||
| 			RepoUserName: repo.Owner.Name, | ||||
| 			RepoName:     repo.Name, | ||||
| 			RefFullName:  git.BranchPrefix + opts.NewBranch, | ||||
| 			OldCommitID:  oldCommitID, | ||||
| 			NewCommitID:  commitHash, | ||||
| 		}, | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("PushUpdate: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return models.DeleteUploads(uploads...) | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user