summaryrefslogtreecommitdiffstats
path: root/tests/integration
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2024-05-30 15:04:42 +0800
committerGitHub <noreply@github.com>2024-05-30 07:04:42 +0000
commite8c776c79384c1c0a4d707ce5084b27347703848 (patch)
tree8a0e72ec8c018239ef8c02105a69d326bc28b000 /tests/integration
parentcc64d4d2b23fd98f3f8655eff58d810ffaf4bcae (diff)
downloadgitea-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.go18
-rw-r--r--tests/integration/git_push_test.go35
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++ {