mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
Add ff_only parameter to POST /repos/{owner}/{repo}/merge-upstream (#34770)
The merge-upstream route was so far performing any kind of merge, even those that would create merge commits and thus make your branch diverge from upstream, requiring manual intervention via the git cli to undo the damage. With the new optional parameter ff_only, we can instruct gitea to error out, if a non-fast-forward merge would be performed.
This commit is contained in:
@@ -147,5 +147,37 @@ func TestRepoMergeUpstream(t *testing.T) {
|
||||
return queryMergeUpstreamButtonLink(htmlDoc) == ""
|
||||
}, 5*time.Second, 100*time.Millisecond)
|
||||
})
|
||||
|
||||
t.Run("FastForwardOnly", func(t *testing.T) {
|
||||
// Create a clean branch for fast-forward testing
|
||||
req = NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/test-repo-fork/branches/_new/branch/master", forkUser.Name), map[string]string{
|
||||
"_csrf": GetUserCSRFToken(t, session),
|
||||
"new_branch_name": "ff-test-branch",
|
||||
})
|
||||
session.MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
// Add content to base repository that can be fast-forwarded
|
||||
require.NoError(t, createOrReplaceFileInBranch(baseUser, baseRepo, "ff-test.txt", "master", "ff-content-1"))
|
||||
|
||||
// ff_only=true with fast-forward possible (should succeed)
|
||||
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/test-repo-fork/merge-upstream", forkUser.Name), &api.MergeUpstreamRequest{
|
||||
Branch: "ff-test-branch",
|
||||
FfOnly: true,
|
||||
}).AddTokenAuth(token)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
var mergeResp api.MergeUpstreamResponse
|
||||
DecodeJSON(t, resp, &mergeResp)
|
||||
assert.Equal(t, "fast-forward", mergeResp.MergeStyle)
|
||||
|
||||
// ff_only=true when fast-forward is not possible (should fail)
|
||||
require.NoError(t, createOrReplaceFileInBranch(baseUser, baseRepo, "another-file.txt", "master", "more-content"))
|
||||
|
||||
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/test-repo-fork/merge-upstream", forkUser.Name), &api.MergeUpstreamRequest{
|
||||
Branch: "fork-branch",
|
||||
FfOnly: true,
|
||||
}).AddTokenAuth(token)
|
||||
MakeRequest(t, req, http.StatusBadRequest)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user