fix: show "merge" form for empty PR (#39640)

fix #39637
This commit is contained in:
wxiaoguang authored and GitHub committed 2026-10-06 17:28:28 +00:00
1 parent 20ea3e204d
commit 26475404d4
2 files changed
+21 -2

No files matched your search

+2 -2
View File
@@ -112,7 +112,7 @@ func (prInfo *pullRequestViewInfo) prepareMergeBoxFormProps(ctx *context.Context
// if this pr can be merged now, then hide the auto merge // if this pr can be merged now, then hide the auto merge
generalHideAutoMerge := prInfo.MergeBoxData.canMergeNow && allOverridableChecksOk generalHideAutoMerge := prInfo.MergeBoxData.canMergeNow && allOverridableChecksOk
var mergeStyles []any var mergeStyles []any
if pull.IsStatusMergeable() { if pull.IsStatusMergeable() || pull.IsEmpty() {
mergeStyles = []any{ mergeStyles = []any{
map[string]any{ map[string]any{
"name": "merge", "name": "merge",
@@ -176,7 +176,7 @@ func (prInfo *pullRequestViewInfo) prepareMergeBoxFormProps(ctx *context.Context
if len(mergeStyles) > 0 { if len(mergeStyles) > 0 {
mergeFormProps["mergeStyles"] = mergeStyles mergeFormProps["mergeStyles"] = mergeStyles
prInfo.MergeBoxData.MergeFormProps = mergeFormProps prInfo.MergeBoxData.MergeFormProps = mergeFormProps
} else if pull.IsStatusMergeable() { } else if pull.IsStatusMergeable() || pull.IsEmpty() {
// no merge style was set in repo setting // no merge style was set in repo setting
prInfo.MergeBoxData.infoCommitBlockers.AddInfoItem( prInfo.MergeBoxData.infoCommitBlockers.AddInfoItem(
svg.RenderHTML("octicon-x", 16, "tw-text-red"), svg.RenderHTML("octicon-x", 16, "tw-text-red"),
+19
View File
@@ -17,12 +17,14 @@ import (
repo_model "gitea.dev/models/repo" repo_model "gitea.dev/models/repo"
"gitea.dev/models/unittest" "gitea.dev/models/unittest"
"gitea.dev/modules/commitstatus" "gitea.dev/modules/commitstatus"
"gitea.dev/modules/json"
"gitea.dev/modules/setting" "gitea.dev/modules/setting"
api "gitea.dev/modules/structs" api "gitea.dev/modules/structs"
"gitea.dev/modules/test" "gitea.dev/modules/test"
"gitea.dev/services/pull" "gitea.dev/services/pull"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
func TestPullCreate_CommitStatus(t *testing.T) { func TestPullCreate_CommitStatus(t *testing.T) {
@@ -134,6 +136,23 @@ func TestPullCreate_EmptyChangesWithDifferentCommits(t *testing.T) {
text := strings.TrimSpace(doc.doc.Find(".merge-section").Text()) text := strings.TrimSpace(doc.doc.Find(".merge-section").Text())
assert.Contains(t, text, "The changes on this branch are already on the target branch. This will be an empty commit.") assert.Contains(t, text, "The changes on this branch are already on the target branch. This will be an empty commit.")
assert.Contains(t, text, "This pull request can be merged automatically.") assert.Contains(t, text, "This pull request can be merged automatically.")
mergeFormProps, exists := doc.doc.Find("#pull-request-merge-form").Attr("data-merge-form-props")
require.True(t, exists)
var mergeForm struct {
EmptyCommit bool `json:"emptyCommit"`
CanMergeNow bool `json:"canMergeNow"`
MergeStyles []struct {
Name string `json:"name"`
Allowed bool `json:"allowed"`
} `json:"mergeStyles"`
}
require.NoError(t, json.Unmarshal([]byte(mergeFormProps), &mergeForm))
assert.True(t, mergeForm.EmptyCommit)
assert.True(t, mergeForm.CanMergeNow)
assert.Contains(t, mergeForm.MergeStyles, struct {
Name string `json:"name"`
Allowed bool `json:"allowed"`
}{Name: "merge", Allowed: true})
}) })
} }