mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-09 03:11:51 +01:00
Fix duplicate call of webhook (#7821)
This commit is contained in:
parent
8bfeb85f93
commit
e9bb75d8d1
6 changed files with 34 additions and 113 deletions
|
@ -54,6 +54,10 @@ func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum str
|
||||||
|
|
||||||
func TestPullMerge(t *testing.T) {
|
func TestPullMerge(t *testing.T) {
|
||||||
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
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")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
|
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), "/")
|
elem := strings.Split(test.RedirectURL(resp), "/")
|
||||||
assert.EqualValues(t, "pulls", elem[3])
|
assert.EqualValues(t, "pulls", elem[3])
|
||||||
testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge)
|
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) {
|
func TestPullRebase(t *testing.T) {
|
||||||
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
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")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
|
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), "/")
|
elem := strings.Split(test.RedirectURL(resp), "/")
|
||||||
assert.EqualValues(t, "pulls", elem[3])
|
assert.EqualValues(t, "pulls", elem[3])
|
||||||
testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebase)
|
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) {
|
func TestPullRebaseMerge(t *testing.T) {
|
||||||
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
|
|
||||||
|
hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
|
||||||
|
assert.NoError(t, err)
|
||||||
|
hookTasksLenBefore := len(hookTasks)
|
||||||
|
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
|
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), "/")
|
elem := strings.Split(test.RedirectURL(resp), "/")
|
||||||
assert.EqualValues(t, "pulls", elem[3])
|
assert.EqualValues(t, "pulls", elem[3])
|
||||||
testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebaseMerge)
|
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) {
|
func TestPullSquash(t *testing.T) {
|
||||||
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
|
|
||||||
|
hookTasks, err := models.HookTasks(1, 1) //Retrieve previous hook number
|
||||||
|
assert.NoError(t, err)
|
||||||
|
hookTasksLenBefore := len(hookTasks)
|
||||||
|
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
|
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), "/")
|
elem := strings.Split(test.RedirectURL(resp), "/")
|
||||||
assert.EqualValues(t, "pulls", elem[3])
|
assert.EqualValues(t, "pulls", elem[3])
|
||||||
testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleSquash)
|
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 {
|
for _, t := range tasks {
|
||||||
if err = t.deliver(); err != nil {
|
if err = t.deliver(); err != nil {
|
||||||
log.Error("deliver: %v", err)
|
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)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,32 +178,6 @@ func DeleteRepoFile(repo *models.Repository, doer *models.User, opts *DeleteRepo
|
||||||
return nil, err
|
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)
|
commit, err = t.GetCommit(commitHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -396,32 +396,6 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up
|
||||||
return nil, err
|
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)
|
commit, err = t.GetCommit(commitHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
"code.gitea.io/gitea/modules/git"
|
|
||||||
"code.gitea.io/gitea/modules/lfs"
|
"code.gitea.io/gitea/modules/lfs"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
)
|
)
|
||||||
|
@ -177,31 +176,5 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
|
||||||
return err
|
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...)
|
return models.DeleteUploads(uploads...)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue