[GITEA] Remove redundant syncBranchToDB
- The transaction in combination with Git push was causing deadlocks if you had the `push_update` queue set to `immediate`. This was the root cause of slow integration tests in CI. - Remove the sync branch code as this is already being done in the Git post-receive hook. - Add tests to proof the branch models are in sync even with this code removed. (cherry picked from commit 90110e1f44a40837a6ef5b3979a6ed96bfd614be) (cherry picked from commit a064065cb9a6e39597e38c37a405d066cfabf7f7) (cherry picked from commit 7713e558eb6419a3a7d3f2d1beaa8062899490c8) Conflicts: services/repository/branch.go https://codeberg.org/forgejo/forgejo/pulls/2068 (cherry picked from commit 3bb73e0813b46fd8b518a46d7499ee1c525bc434) (cherry picked from commit c557540926826e82a118a085c3b510e072157cfe) (cherry picked from commit 986be6171a3a34ebab60e757dafeee2e254765a1) (cherry picked from commit 7a343877f1051773e21e9af7bfff26ad03d43f08) (cherry picked from commit 51425500f2c44d5ef4deb7a4fe7909645e0fb569)
This commit is contained in:
parent
1d8bca07f3
commit
abfc169fc8
2 changed files with 56 additions and 59 deletions
|
@ -4,72 +4,55 @@
|
||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/translation"
|
git_model "code.gitea.io/gitea/models/git"
|
||||||
"code.gitea.io/gitea/tests"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
|
"code.gitea.io/gitea/models/unittest"
|
||||||
|
gitea_context "code.gitea.io/gitea/modules/context"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestViewBranches(t *testing.T) {
|
func TestBranchActions(t *testing.T) {
|
||||||
defer tests.PrepareTestEnv(t)()
|
|
||||||
|
|
||||||
req := NewRequest(t, "GET", "/user2/repo1/branches")
|
|
||||||
resp := MakeRequest(t, req, http.StatusOK)
|
|
||||||
|
|
||||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
|
||||||
_, exists := htmlDoc.doc.Find(".delete-branch-button").Attr("data-url")
|
|
||||||
assert.False(t, exists, "The template has changed")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDeleteBranch(t *testing.T) {
|
|
||||||
defer tests.PrepareTestEnv(t)()
|
|
||||||
|
|
||||||
deleteBranch(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUndoDeleteBranch(t *testing.T) {
|
|
||||||
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
||||||
deleteBranch(t)
|
|
||||||
htmlDoc, name := branchAction(t, ".restore-branch-button")
|
|
||||||
assert.Contains(t,
|
|
||||||
htmlDoc.doc.Find(".ui.positive.message").Text(),
|
|
||||||
translation.NewLocale("en-US").Tr("repo.branch.restore_success", name),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func deleteBranch(t *testing.T) {
|
|
||||||
htmlDoc, name := branchAction(t, ".delete-branch-button")
|
|
||||||
assert.Contains(t,
|
|
||||||
htmlDoc.doc.Find(".ui.positive.message").Text(),
|
|
||||||
translation.NewLocale("en-US").Tr("repo.branch.deletion_success", name),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func branchAction(t *testing.T, button string) (*HTMLDoc, string) {
|
|
||||||
session := loginUser(t, "user2")
|
session := loginUser(t, "user2")
|
||||||
req := NewRequest(t, "GET", "/user2/repo1/branches")
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
||||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
branch3 := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 3, RepoID: repo1.ID})
|
||||||
|
branchesLink := repo1.FullName() + "/branches"
|
||||||
|
|
||||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
t.Run("View", func(t *testing.T) {
|
||||||
link, exists := htmlDoc.doc.Find(button).Attr("data-url")
|
req := NewRequest(t, "GET", branchesLink)
|
||||||
if !assert.True(t, exists, "The template has changed") {
|
MakeRequest(t, req, http.StatusOK)
|
||||||
t.Skip()
|
})
|
||||||
}
|
|
||||||
|
|
||||||
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
t.Run("Delete branch", func(t *testing.T) {
|
||||||
"_csrf": htmlDoc.GetCSRF(),
|
link := fmt.Sprintf("/%s/branches/delete?name=%s", repo1.FullName(), branch3.Name)
|
||||||
|
req := NewRequestWithValues(t, "POST", link, map[string]string{
|
||||||
|
"_csrf": GetCSRF(t, session, branchesLink),
|
||||||
})
|
})
|
||||||
session.MakeRequest(t, req, http.StatusOK)
|
session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
flashCookie := session.GetCookie(gitea_context.CookieNameFlash)
|
||||||
|
assert.NotNil(t, flashCookie)
|
||||||
|
assert.Contains(t, flashCookie.Value, "success%3DBranch%2B%2522branch2%2522%2Bhas%2Bbeen%2Bdeleted.")
|
||||||
|
|
||||||
url, err := url.Parse(link)
|
assert.True(t, unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 3, RepoID: repo1.ID}).IsDeleted)
|
||||||
assert.NoError(t, err)
|
})
|
||||||
req = NewRequest(t, "GET", "/user2/repo1/branches")
|
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
|
||||||
|
|
||||||
return NewHTMLParser(t, resp.Body), url.Query().Get("name")
|
t.Run("Restore branch", func(t *testing.T) {
|
||||||
|
link := fmt.Sprintf("/%s/branches/restore?branch_id=%d&name=%s", repo1.FullName(), branch3.ID, branch3.Name)
|
||||||
|
req := NewRequestWithValues(t, "POST", link, map[string]string{
|
||||||
|
"_csrf": GetCSRF(t, session, branchesLink),
|
||||||
|
})
|
||||||
|
session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
flashCookie := session.GetCookie(gitea_context.CookieNameFlash)
|
||||||
|
assert.NotNil(t, flashCookie)
|
||||||
|
assert.Contains(t, flashCookie.Value, "success%3DBranch%2B%2522branch2%2522%2Bhas%2Bbeen%2Brestored")
|
||||||
|
|
||||||
|
assert.False(t, unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 3, RepoID: repo1.ID}).IsDeleted)
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
git_model "code.gitea.io/gitea/models/git"
|
||||||
|
"code.gitea.io/gitea/models/unittest"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/test"
|
"code.gitea.io/gitea/modules/test"
|
||||||
"code.gitea.io/gitea/modules/translation"
|
"code.gitea.io/gitea/modules/translation"
|
||||||
|
@ -47,12 +49,14 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) {
|
||||||
CreateRelease string
|
CreateRelease string
|
||||||
FlashMessage string
|
FlashMessage string
|
||||||
ExpectedStatus int
|
ExpectedStatus int
|
||||||
|
CheckBranch bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
OldRefSubURL: "branch/master",
|
OldRefSubURL: "branch/master",
|
||||||
NewBranch: "feature/test1",
|
NewBranch: "feature/test1",
|
||||||
ExpectedStatus: http.StatusSeeOther,
|
ExpectedStatus: http.StatusSeeOther,
|
||||||
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test1"),
|
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test1"),
|
||||||
|
CheckBranch: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
OldRefSubURL: "branch/master",
|
OldRefSubURL: "branch/master",
|
||||||
|
@ -65,6 +69,7 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) {
|
||||||
NewBranch: "feature=test1",
|
NewBranch: "feature=test1",
|
||||||
ExpectedStatus: http.StatusSeeOther,
|
ExpectedStatus: http.StatusSeeOther,
|
||||||
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature=test1"),
|
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature=test1"),
|
||||||
|
CheckBranch: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
OldRefSubURL: "branch/master",
|
OldRefSubURL: "branch/master",
|
||||||
|
@ -94,6 +99,7 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) {
|
||||||
NewBranch: "feature/test3",
|
NewBranch: "feature/test3",
|
||||||
ExpectedStatus: http.StatusSeeOther,
|
ExpectedStatus: http.StatusSeeOther,
|
||||||
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test3"),
|
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test3"),
|
||||||
|
CheckBranch: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
OldRefSubURL: "branch/master",
|
OldRefSubURL: "branch/master",
|
||||||
|
@ -108,10 +114,15 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) {
|
||||||
CreateRelease: "v1.0.1",
|
CreateRelease: "v1.0.1",
|
||||||
ExpectedStatus: http.StatusSeeOther,
|
ExpectedStatus: http.StatusSeeOther,
|
||||||
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test4"),
|
FlashMessage: translation.NewLocale("en-US").Tr("repo.branch.create_success", "feature/test4"),
|
||||||
|
CheckBranch: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
|
||||||
session := loginUser(t, "user2")
|
session := loginUser(t, "user2")
|
||||||
|
for _, test := range tests {
|
||||||
|
if test.CheckBranch {
|
||||||
|
unittest.AssertNotExistsBean(t, &git_model.Branch{RepoID: 1, Name: test.NewBranch})
|
||||||
|
}
|
||||||
if test.CreateRelease != "" {
|
if test.CreateRelease != "" {
|
||||||
createNewRelease(t, session, "/user2/repo1", test.CreateRelease, test.CreateRelease, false, false)
|
createNewRelease(t, session, "/user2/repo1", test.CreateRelease, test.CreateRelease, false, false)
|
||||||
}
|
}
|
||||||
|
@ -125,6 +136,9 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) {
|
||||||
test.FlashMessage,
|
test.FlashMessage,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
if test.CheckBranch {
|
||||||
|
unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: 1, Name: test.NewBranch})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue