Skip to content

Commit 5184c83

Browse files
authored
Add config option to disable "Update branch by rebase" (#18745)
1 parent 3c72016 commit 5184c83

File tree

10 files changed

+31
-2
lines changed

10 files changed

+31
-2
lines changed

models/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ func CreateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_
521521
units = append(units, repo_model.RepoUnit{
522522
RepoID: repo.ID,
523523
Type: tp,
524-
Config: &repo_model.PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, DefaultMergeStyle: repo_model.MergeStyleMerge},
524+
Config: &repo_model.PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, DefaultMergeStyle: repo_model.MergeStyleMerge, AllowRebaseUpdate: true},
525525
})
526526
} else {
527527
units = append(units, repo_model.RepoUnit{

models/repo/repo_unit.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,15 @@ type PullRequestsConfig struct {
115115
AllowSquash bool
116116
AllowManualMerge bool
117117
AutodetectManualMerge bool
118+
AllowRebaseUpdate bool
118119
DefaultDeleteBranchAfterMerge bool
119120
DefaultMergeStyle MergeStyle
120121
}
121122

122123
// FromDB fills up a PullRequestsConfig from serialized format.
123124
func (cfg *PullRequestsConfig) FromDB(bs []byte) error {
125+
// AllowRebaseUpdate = true as default for existing PullRequestConfig in DB
126+
cfg.AllowRebaseUpdate = true
124127
return json.UnmarshalHandleDoubleEncode(bs, &cfg)
125128
}
126129

modules/structs/repo.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ type EditRepoOption struct {
177177
AllowManualMerge *bool `json:"allow_manual_merge,omitempty"`
178178
// either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
179179
AutodetectManualMerge *bool `json:"autodetect_manual_merge,omitempty"`
180+
// either `true` to allow updating pull request branch by rebase, or `false` to prevent it. `has_pull_requests` must be `true`.
181+
AllowRebaseUpdate *bool `json:"allow_rebase_update,omitempty"`
180182
// set to `true` to delete pr branch after merge by default
181183
DefaultDeleteBranchAfterMerge *bool `json:"default_delete_branch_after_merge,omitempty"`
182184
// set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", or "squash". `has_pull_requests` must be `true`.

options/locale/locale_en-US.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,7 @@ settings.pulls.allow_rebase_merge_commit = Enable Rebasing with explicit merge c
17861786
settings.pulls.allow_squash_commits = Enable Squashing to Merge Commits
17871787
settings.pulls.allow_manual_merge = Enable Mark PR as manually merged
17881788
settings.pulls.enable_autodetect_manual_merge = Enable autodetect manual merge (Note: In some special cases, misjudgments can occur)
1789+
settings.pulls.allow_rebase_update = Enable updating pull request branch by rebase
17891790
settings.pulls.default_delete_branch_after_merge = Delete pull request branch after merge by default
17901791
settings.projects_desc = Enable Repository Projects
17911792
settings.admin_settings = Administrator Settings

routers/api/v1/repo/repo.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
860860
AllowSquash: true,
861861
AllowManualMerge: true,
862862
AutodetectManualMerge: false,
863+
AllowRebaseUpdate: true,
863864
DefaultDeleteBranchAfterMerge: false,
864865
DefaultMergeStyle: repo_model.MergeStyleMerge,
865866
}
@@ -888,6 +889,9 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
888889
if opts.AutodetectManualMerge != nil {
889890
config.AutodetectManualMerge = *opts.AutodetectManualMerge
890891
}
892+
if opts.AllowRebaseUpdate != nil {
893+
config.AllowRebaseUpdate = *opts.AllowRebaseUpdate
894+
}
891895
if opts.DefaultDeleteBranchAfterMerge != nil {
892896
config.DefaultDeleteBranchAfterMerge = *opts.DefaultDeleteBranchAfterMerge
893897
}

routers/web/repo/setting.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ func SettingsPost(ctx *context.Context) {
472472
AllowSquash: form.PullsAllowSquash,
473473
AllowManualMerge: form.PullsAllowManualMerge,
474474
AutodetectManualMerge: form.EnableAutodetectManualMerge,
475+
AllowRebaseUpdate: form.PullsAllowRebaseUpdate,
475476
DefaultDeleteBranchAfterMerge: form.DefaultDeleteBranchAfterMerge,
476477
DefaultMergeStyle: repo_model.MergeStyle(form.PullsDefaultMergeStyle),
477478
},

services/forms/repo_form.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ type RepoSettingForm struct {
151151
PullsAllowManualMerge bool
152152
PullsDefaultMergeStyle string
153153
EnableAutodetectManualMerge bool
154+
PullsAllowRebaseUpdate bool
154155
DefaultDeleteBranchAfterMerge bool
155156
EnableTimetracker bool
156157
AllowOnlyContributorsToTrackTime bool

services/pull/update.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"code.gitea.io/gitea/models"
1212
repo_model "code.gitea.io/gitea/models/repo"
13+
"code.gitea.io/gitea/models/unit"
1314
user_model "code.gitea.io/gitea/models/user"
1415
"code.gitea.io/gitea/modules/git"
1516
"code.gitea.io/gitea/modules/log"
@@ -97,7 +98,12 @@ func IsUserAllowedToUpdate(pull *models.PullRequest, user *user_model.User) (mer
9798

9899
// can't do rebase on protected branch because need force push
99100
if pr.ProtectedBranch == nil {
100-
rebaseAllowed = true
101+
prUnit, err := pr.BaseRepo.GetUnit(unit.TypePullRequests)
102+
if err != nil {
103+
log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err)
104+
return false, false, err
105+
}
106+
rebaseAllowed = prUnit.PullRequestsConfig().AllowRebaseUpdate
101107
}
102108

103109
// Update function need push permission

templates/repo/settings/options.tmpl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,12 @@
448448
<label>{{.i18n.Tr "repo.settings.pulls.enable_autodetect_manual_merge"}}</label>
449449
</div>
450450
</div>
451+
<div class="field">
452+
<div class="ui checkbox">
453+
<input name="pulls_allow_rebase_update" type="checkbox" {{if or (not $pullRequestEnabled) ($prUnit.PullRequestsConfig.AllowRebaseUpdate)}}checked{{end}}>
454+
<label>{{.i18n.Tr "repo.settings.pulls.allow_rebase_update"}}</label>
455+
</div>
456+
</div>
451457
<div class="field">
452458
<div class="ui checkbox">
453459
<input name="default_delete_branch_after_merge" type="checkbox" {{if or (not $pullRequestEnabled) ($prUnit.PullRequestsConfig.DefaultDeleteBranchAfterMerge)}}checked{{end}}>

templates/swagger/v1_json.tmpl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14809,6 +14809,11 @@
1480914809
"type": "boolean",
1481014810
"x-go-name": "AllowRebaseMerge"
1481114811
},
14812+
"allow_rebase_update": {
14813+
"description": "either `true` to allow updating pull request branch by rebase, or `false` to prevent it. `has_pull_requests` must be `true`.",
14814+
"type": "boolean",
14815+
"x-go-name": "AllowRebaseUpdate"
14816+
},
1481214817
"allow_squash_merge": {
1481314818
"description": "either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.",
1481414819
"type": "boolean",

0 commit comments

Comments
 (0)