Improve sync fork behavior (#33319)
Fix #33271 Suppose there is a `branch-a` in fork repo: 1. if `branch-a` exists in base repo: try to sync `base:branch-a` to `fork:branch-a` 2. if `branch-a` doesn't exist in base repo: try to sync `base:main` to `fork:branch-a`
This commit is contained in:
parent
6073e2f1bb
commit
39de2955fd
6 changed files with 109 additions and 26 deletions
|
@ -60,25 +60,54 @@ func TestRepoMergeUpstream(t *testing.T) {
|
|||
|
||||
t.Run("HeadBeforeBase", func(t *testing.T) {
|
||||
// add a file in base repo
|
||||
sessionBaseUser := loginUser(t, baseUser.Name)
|
||||
require.NoError(t, createOrReplaceFileInBranch(baseUser, baseRepo, "new-file.txt", "master", "test-content-1"))
|
||||
|
||||
// the repo shows a prompt to "sync fork"
|
||||
var mergeUpstreamLink string
|
||||
require.Eventually(t, func() bool {
|
||||
resp := session.MakeRequest(t, NewRequestf(t, "GET", "/%s/test-repo-fork/src/branch/fork-branch", forkUser.Name), http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
mergeUpstreamLink = queryMergeUpstreamButtonLink(htmlDoc)
|
||||
if mergeUpstreamLink == "" {
|
||||
return false
|
||||
}
|
||||
respMsg, _ := htmlDoc.Find(".ui.message:not(.positive)").Html()
|
||||
return strings.Contains(respMsg, `This branch is 1 commit behind <a href="/user2/repo1/src/branch/master">user2/repo1:master</a>`)
|
||||
}, 5*time.Second, 100*time.Millisecond)
|
||||
t.Run("DetectDefaultBranch", func(t *testing.T) {
|
||||
// the repo shows a prompt to "sync fork" (defaults to the default branch)
|
||||
require.Eventually(t, func() bool {
|
||||
resp := session.MakeRequest(t, NewRequestf(t, "GET", "/%s/test-repo-fork/src/branch/fork-branch", forkUser.Name), http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
mergeUpstreamLink = queryMergeUpstreamButtonLink(htmlDoc)
|
||||
if mergeUpstreamLink == "" {
|
||||
return false
|
||||
}
|
||||
respMsg, _ := htmlDoc.Find(".ui.message:not(.positive)").Html()
|
||||
return strings.Contains(respMsg, `This branch is 1 commit behind <a href="/user2/repo1/src/branch/master">user2/repo1:master</a>`)
|
||||
}, 5*time.Second, 100*time.Millisecond)
|
||||
})
|
||||
|
||||
t.Run("DetectSameBranch", func(t *testing.T) {
|
||||
// if the fork-branch name also exists in the base repo, then use that branch instead
|
||||
req = NewRequestWithValues(t, "POST", "/user2/repo1/branches/_new/branch/master", map[string]string{
|
||||
"_csrf": GetUserCSRFToken(t, sessionBaseUser),
|
||||
"new_branch_name": "fork-branch",
|
||||
})
|
||||
sessionBaseUser.MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
require.Eventually(t, func() bool {
|
||||
resp := session.MakeRequest(t, NewRequestf(t, "GET", "/%s/test-repo-fork/src/branch/fork-branch", forkUser.Name), http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
mergeUpstreamLink = queryMergeUpstreamButtonLink(htmlDoc)
|
||||
if mergeUpstreamLink == "" {
|
||||
return false
|
||||
}
|
||||
respMsg, _ := htmlDoc.Find(".ui.message:not(.positive)").Html()
|
||||
return strings.Contains(respMsg, `This branch is 1 commit behind <a href="/user2/repo1/src/branch/fork-branch">user2/repo1:fork-branch</a>`)
|
||||
}, 5*time.Second, 100*time.Millisecond)
|
||||
})
|
||||
|
||||
// click the "sync fork" button
|
||||
req = NewRequestWithValues(t, "POST", mergeUpstreamLink, map[string]string{"_csrf": GetUserCSRFToken(t, session)})
|
||||
session.MakeRequest(t, req, http.StatusOK)
|
||||
checkFileContent("fork-branch", "test-content-1")
|
||||
|
||||
// delete the "fork-branch" from the base repo
|
||||
req = NewRequestWithValues(t, "POST", "/user2/repo1/branches/delete?name=fork-branch", map[string]string{
|
||||
"_csrf": GetUserCSRFToken(t, sessionBaseUser),
|
||||
})
|
||||
sessionBaseUser.MakeRequest(t, req, http.StatusOK)
|
||||
})
|
||||
|
||||
t.Run("BaseChangeAfterHeadChange", func(t *testing.T) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue