Skip to content

Commit e22862e

Browse files
committed
Automerge supports deleting branch automatically after merging
1 parent 7cf611d commit e22862e

File tree

7 files changed

+50
-17
lines changed

7 files changed

+50
-17
lines changed

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,8 @@ var migrations = []Migration{
605605
NewMigration("Add Repository Licenses", v1_23.AddRepositoryLicenses),
606606
// v306 -> v307
607607
NewMigration("Add BlockAdminMergeOverride to ProtectedBranch", v1_23.AddBlockAdminMergeOverrideBranchProtection),
608+
// v307 -> v308
609+
NewMigration("Add DeleteBranchAfterMerge to AutoMerge", v1_23.AddDeleteBranchAfterMergeForAutoMerge),
608610
}
609611

610612
// GetCurrentDBVersion returns the current db version

models/migrations/v1_23/v307.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_23 //nolint
5+
6+
import (
7+
"code.gitea.io/gitea/modules/timeutil"
8+
9+
"xorm.io/xorm"
10+
)
11+
12+
type pullAutoMerge struct {
13+
ID int64 `xorm:"pk autoincr"`
14+
PullID int64 `xorm:"UNIQUE"`
15+
DoerID int64 `xorm:"INDEX NOT NULL"`
16+
MergeStyle string `xorm:"varchar(30)"`
17+
Message string `xorm:"LONGTEXT"`
18+
DeleteBranchAfterMerge bool
19+
CreatedUnix timeutil.TimeStamp `xorm:"created"`
20+
}
21+
22+
// TableName return database table name for xorm
23+
func (pullAutoMerge) TableName() string {
24+
return "pull_auto_merge"
25+
}
26+
27+
func AddDeleteBranchAfterMergeForAutoMerge(x *xorm.Engine) error {
28+
return x.Sync(new(pullAutoMerge))
29+
}

models/pull/automerge.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ import (
1515

1616
// AutoMerge represents a pull request scheduled for merging when checks succeed
1717
type AutoMerge struct {
18-
ID int64 `xorm:"pk autoincr"`
19-
PullID int64 `xorm:"UNIQUE"`
20-
DoerID int64 `xorm:"INDEX NOT NULL"`
21-
Doer *user_model.User `xorm:"-"`
22-
MergeStyle repo_model.MergeStyle `xorm:"varchar(30)"`
23-
Message string `xorm:"LONGTEXT"`
24-
CreatedUnix timeutil.TimeStamp `xorm:"created"`
18+
ID int64 `xorm:"pk autoincr"`
19+
PullID int64 `xorm:"UNIQUE"`
20+
DoerID int64 `xorm:"INDEX NOT NULL"`
21+
Doer *user_model.User `xorm:"-"`
22+
MergeStyle repo_model.MergeStyle `xorm:"varchar(30)"`
23+
Message string `xorm:"LONGTEXT"`
24+
DeleteBranchAfterMerge bool
25+
CreatedUnix timeutil.TimeStamp `xorm:"created"`
2526
}
2627

2728
// TableName return database table name for xorm
@@ -49,7 +50,7 @@ func IsErrAlreadyScheduledToAutoMerge(err error) bool {
4950
}
5051

5152
// ScheduleAutoMerge schedules a pull request to be merged when all checks succeed
52-
func ScheduleAutoMerge(ctx context.Context, doer *user_model.User, pullID int64, style repo_model.MergeStyle, message string) error {
53+
func ScheduleAutoMerge(ctx context.Context, doer *user_model.User, pullID int64, style repo_model.MergeStyle, message string, deleteBranchAfterMerge bool) error {
5354
// Check if we already have a merge scheduled for that pull request
5455
if exists, _, err := GetScheduledMergeByPullID(ctx, pullID); err != nil {
5556
return err
@@ -58,10 +59,11 @@ func ScheduleAutoMerge(ctx context.Context, doer *user_model.User, pullID int64,
5859
}
5960

6061
_, err := db.GetEngine(ctx).Insert(&AutoMerge{
61-
DoerID: doer.ID,
62-
PullID: pullID,
63-
MergeStyle: style,
64-
Message: message,
62+
DoerID: doer.ID,
63+
PullID: pullID,
64+
MergeStyle: style,
65+
Message: message,
66+
DeleteBranchAfterMerge: deleteBranchAfterMerge,
6567
})
6668
return err
6769
}

routers/api/v1/repo/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1000,7 +1000,7 @@ func MergePullRequest(ctx *context.APIContext) {
10001000
}
10011001

10021002
if form.MergeWhenChecksSucceed {
1003-
scheduled, err := automerge.ScheduleAutoMerge(ctx, ctx.Doer, pr, repo_model.MergeStyle(form.Do), message)
1003+
scheduled, err := automerge.ScheduleAutoMerge(ctx, ctx.Doer, pr, repo_model.MergeStyle(form.Do), message, form.DeleteBranchAfterMerge)
10041004
if err != nil {
10051005
if pull_model.IsErrAlreadyScheduledToAutoMerge(err) {
10061006
ctx.Error(http.StatusConflict, "ScheduleAutoMerge", err)

routers/web/repo/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ func MergePullRequest(ctx *context.Context) {
10971097
// delete all scheduled auto merges
10981098
_ = pull_model.DeleteScheduledAutoMerge(ctx, pr.ID)
10991099
// schedule auto merge
1100-
scheduled, err := automerge.ScheduleAutoMerge(ctx, ctx.Doer, pr, repo_model.MergeStyle(form.Do), message)
1100+
scheduled, err := automerge.ScheduleAutoMerge(ctx, ctx.Doer, pr, repo_model.MergeStyle(form.Do), message, form.DeleteBranchAfterMerge)
11011101
if err != nil {
11021102
ctx.ServerError("ScheduleAutoMerge", err)
11031103
return

services/automerge/automerge.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ func addToQueue(pr *issues_model.PullRequest, sha string) {
6363
}
6464

6565
// ScheduleAutoMerge if schedule is false and no error, pull can be merged directly
66-
func ScheduleAutoMerge(ctx context.Context, doer *user_model.User, pull *issues_model.PullRequest, style repo_model.MergeStyle, message string) (scheduled bool, err error) {
66+
func ScheduleAutoMerge(ctx context.Context, doer *user_model.User, pull *issues_model.PullRequest, style repo_model.MergeStyle, message string, deleteBranchAfterMerge bool) (scheduled bool, err error) {
6767
err = db.WithTx(ctx, func(ctx context.Context) error {
68-
if err := pull_model.ScheduleAutoMerge(ctx, doer, pull.ID, style, message); err != nil {
68+
if err := pull_model.ScheduleAutoMerge(ctx, doer, pull.ID, style, message, deleteBranchAfterMerge); err != nil {
6969
return err
7070
}
7171
scheduled = true

web_src/js/components/PullRequestMergeForm.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export default {
130130
{{ mergeForm.textCancel }}
131131
</button>
132132

133-
<div class="ui checkbox tw-ml-1" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed">
133+
<div class="ui checkbox tw-ml-1" v-if="mergeForm.isPullBranchDeletable">
134134
<input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge">
135135
<label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label>
136136
</div>

0 commit comments

Comments
 (0)