diff options
author | Giteabot <teabot@gitea.io> | 2024-05-30 15:04:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-30 07:04:42 +0000 |
commit | e8c776c79384c1c0a4d707ce5084b27347703848 (patch) | |
tree | 8a0e72ec8c018239ef8c02105a69d326bc28b000 /tests/integration | |
parent | cc64d4d2b23fd98f3f8655eff58d810ffaf4bcae (diff) | |
download | gitea-e8c776c79384c1c0a4d707ce5084b27347703848.tar.gz gitea-e8c776c79384c1c0a4d707ce5084b27347703848.zip |
Fix push multiple branches error with tests (#31151) (#31153)
Backport #31151 by @lunny
Fix #31140
The previous logic is wrong when pushing multiple branches. After first
branch updated, it will ignore left other branches sync operations.
As a workaround for the repositories, just push a new commit after the
patch applied will fix the repositories status.
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'tests/integration')
-rw-r--r-- | tests/integration/git_helper_for_declarative_test.go | 18 | ||||
-rw-r--r-- | tests/integration/git_push_test.go | 35 |
2 files changed, 53 insertions, 0 deletions
diff --git a/tests/integration/git_helper_for_declarative_test.go b/tests/integration/git_helper_for_declarative_test.go index 77fe07128e..d1d935da4f 100644 --- a/tests/integration/git_helper_for_declarative_test.go +++ b/tests/integration/git_helper_for_declarative_test.go @@ -160,6 +160,24 @@ func doGitPushTestRepositoryFail(dstPath string, args ...string) func(*testing.T } } +func doGitAddSomeCommits(dstPath, branch string) func(*testing.T) { + return func(t *testing.T) { + doGitCheckoutBranch(dstPath, branch)(t) + + assert.NoError(t, os.WriteFile(filepath.Join(dstPath, fmt.Sprintf("file-%s.txt", branch)), []byte(fmt.Sprintf("file %s", branch)), 0o644)) + assert.NoError(t, git.AddChanges(dstPath, true)) + signature := git.Signature{ + Email: "test@test.test", + Name: "test", + } + assert.NoError(t, git.CommitChanges(dstPath, git.CommitChangesOptions{ + Committer: &signature, + Author: &signature, + Message: fmt.Sprintf("update %s", branch), + })) + } +} + func doGitCreateBranch(dstPath, branch string) func(*testing.T) { return func(t *testing.T) { _, _, err := git.NewCommand(git.DefaultContext, "checkout", "-b").AddDynamicArguments(branch).RunStdString(&git.RunOpts{Dir: dstPath}) diff --git a/tests/integration/git_push_test.go b/tests/integration/git_push_test.go index b37fb02444..da254fc88f 100644 --- a/tests/integration/git_push_test.go +++ b/tests/integration/git_push_test.go @@ -37,6 +37,41 @@ func testGitPush(t *testing.T, u *url.URL) { }) }) + t.Run("Push branches exists", func(t *testing.T) { + runTestGitPush(t, u, func(t *testing.T, gitPath string) (pushed, deleted []string) { + for i := 0; i < 10; i++ { + branchName := fmt.Sprintf("branch-%d", i) + if i < 5 { + pushed = append(pushed, branchName) + } + doGitCreateBranch(gitPath, branchName)(t) + } + // only push master and the first 5 branches + pushed = append(pushed, "master") + args := append([]string{"origin"}, pushed...) + doGitPushTestRepository(gitPath, args...)(t) + + pushed = pushed[:0] + // do some changes for the first 5 branches created above + for i := 0; i < 5; i++ { + branchName := fmt.Sprintf("branch-%d", i) + pushed = append(pushed, branchName) + + doGitAddSomeCommits(gitPath, branchName)(t) + } + + for i := 5; i < 10; i++ { + pushed = append(pushed, fmt.Sprintf("branch-%d", i)) + } + pushed = append(pushed, "master") + + // push all, so that master are not chagned + doGitPushTestRepository(gitPath, "origin", "--all")(t) + + return pushed, deleted + }) + }) + t.Run("Push branches one by one", func(t *testing.T) { runTestGitPush(t, u, func(t *testing.T, gitPath string) (pushed, deleted []string) { for i := 0; i < 100; i++ { |