summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2023-12-29 16:47:02 +0800
committerGitHub <noreply@github.com>2023-12-29 08:47:02 +0000
commitff565a787f5cf1193bb60560688cabe6d6d33ef4 (patch)
tree473332fbb5b9d1fc5ab1e3c0b941ebca6b937d72
parentf7cca2a290f14d56702ad807491bb49b17045c11 (diff)
downloadgitea-ff565a787f5cf1193bb60560688cabe6d6d33ef4.tar.gz
gitea-ff565a787f5cf1193bb60560688cabe6d6d33ef4.zip
Remove unnecessary syncbranchToDB with tests (#28624) (#28629)
Replace #28625 Backport #28624 by lunny #28361 introduced `syncBranchToDB` in `CreateNewBranchFromCommit`. This PR will revert the change because it's unnecessary. Every push will already be checked by `syncBranchToDB`. This PR also created a test to ensure it's right.
-rw-r--r--services/repository/branch.go29
-rw-r--r--tests/integration/api_branch_test.go36
2 files changed, 45 insertions, 20 deletions
diff --git a/services/repository/branch.go b/services/repository/branch.go
index d56a0660c6..d8b3b81da8 100644
--- a/services/repository/branch.go
+++ b/services/repository/branch.go
@@ -281,28 +281,17 @@ func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo
return err
}
- return db.WithTx(ctx, func(ctx context.Context) error {
- commit, err := gitRepo.GetCommit(commitID)
- if err != nil {
- return err
- }
- // database operation should be done before git operation so that we can rollback if git operation failed
- if err := syncBranchToDB(ctx, repo.ID, doer.ID, branchName, commit); err != nil {
+ if err := git.Push(ctx, repo.RepoPath(), git.PushOptions{
+ Remote: repo.RepoPath(),
+ Branch: fmt.Sprintf("%s:%s%s", commitID, git.BranchPrefix, branchName),
+ Env: repo_module.PushingEnvironment(doer, repo),
+ }); err != nil {
+ if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) {
return err
}
-
- if err := git.Push(ctx, repo.RepoPath(), git.PushOptions{
- Remote: repo.RepoPath(),
- Branch: fmt.Sprintf("%s:%s%s", commitID, git.BranchPrefix, branchName),
- Env: repo_module.PushingEnvironment(doer, repo),
- }); err != nil {
- if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) {
- return err
- }
- return fmt.Errorf("push: %w", err)
- }
- return nil
- })
+ return fmt.Errorf("push: %w", err)
+ }
+ return nil
}
// RenameBranch rename a branch
diff --git a/tests/integration/api_branch_test.go b/tests/integration/api_branch_test.go
index bc026c117f..d90d3422dd 100644
--- a/tests/integration/api_branch_test.go
+++ b/tests/integration/api_branch_test.go
@@ -9,6 +9,8 @@ import (
"testing"
auth_model "code.gitea.io/gitea/models/auth"
+ "code.gitea.io/gitea/models/db"
+ git_model "code.gitea.io/gitea/models/git"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
@@ -212,3 +214,37 @@ func TestAPIBranchProtection(t *testing.T) {
testAPIDeleteBranch(t, "master", http.StatusForbidden)
testAPIDeleteBranch(t, "branch2", http.StatusNoContent)
}
+
+func TestAPICreateBranchWithSyncBranches(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ branches, err := git_model.FindBranches(db.DefaultContext, git_model.FindBranchOptions{
+ RepoID: 1,
+ })
+ assert.NoError(t, err)
+ assert.Len(t, branches, 4)
+
+ // make a broke repository with no branch on database
+ _, err = db.DeleteByBean(db.DefaultContext, git_model.Branch{RepoID: 1})
+ assert.NoError(t, err)
+
+ onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
+ ctx := NewAPITestContext(t, "user2", "repo1", auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeWriteUser)
+ giteaURL.Path = ctx.GitPath()
+
+ testAPICreateBranch(t, ctx.Session, "user2", "repo1", "", "new_branch", http.StatusCreated)
+ })
+
+ branches, err = git_model.FindBranches(db.DefaultContext, git_model.FindBranchOptions{
+ RepoID: 1,
+ })
+ assert.NoError(t, err)
+ assert.Len(t, branches, 5)
+
+ branches, err = git_model.FindBranches(db.DefaultContext, git_model.FindBranchOptions{
+ RepoID: 1,
+ Keyword: "new_branch",
+ })
+ assert.NoError(t, err)
+ assert.Len(t, branches, 1)
+}