mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	@@ -1086,7 +1086,7 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, overwriteO
 | 
			
		||||
			units = append(units, RepoUnit{
 | 
			
		||||
				RepoID: repo.ID,
 | 
			
		||||
				Type:   tp,
 | 
			
		||||
				Config: &PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true},
 | 
			
		||||
				Config: &PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, DefaultMergeStyle: MergeStyleMerge},
 | 
			
		||||
			})
 | 
			
		||||
		} else {
 | 
			
		||||
			units = append(units, RepoUnit{
 | 
			
		||||
 
 | 
			
		||||
@@ -102,6 +102,7 @@ type PullRequestsConfig struct {
 | 
			
		||||
	AllowSquash               bool
 | 
			
		||||
	AllowManualMerge          bool
 | 
			
		||||
	AutodetectManualMerge     bool
 | 
			
		||||
	DefaultMergeStyle         MergeStyle
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FromDB fills up a PullRequestsConfig from serialized format.
 | 
			
		||||
@@ -125,6 +126,15 @@ func (cfg *PullRequestsConfig) IsMergeStyleAllowed(mergeStyle MergeStyle) bool {
 | 
			
		||||
		mergeStyle == MergeStyleManuallyMerged && cfg.AllowManualMerge
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDefaultMergeStyle returns the default merge style for this pull request
 | 
			
		||||
func (cfg *PullRequestsConfig) GetDefaultMergeStyle() MergeStyle {
 | 
			
		||||
	if len(cfg.DefaultMergeStyle) != 0 {
 | 
			
		||||
		return cfg.DefaultMergeStyle
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return MergeStyleMerge
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AllowedMergeStyleCount returns the total count of allowed merge styles for the PullRequestsConfig
 | 
			
		||||
func (cfg *PullRequestsConfig) AllowedMergeStyleCount() int {
 | 
			
		||||
	count := 0
 | 
			
		||||
 
 | 
			
		||||
@@ -71,6 +71,7 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool)
 | 
			
		||||
	allowRebase := false
 | 
			
		||||
	allowRebaseMerge := false
 | 
			
		||||
	allowSquash := false
 | 
			
		||||
	defaultMergeStyle := models.MergeStyleMerge
 | 
			
		||||
	if unit, err := repo.GetUnit(models.UnitTypePullRequests); err == nil {
 | 
			
		||||
		config := unit.PullRequestsConfig()
 | 
			
		||||
		hasPullRequests = true
 | 
			
		||||
@@ -79,6 +80,7 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool)
 | 
			
		||||
		allowRebase = config.AllowRebase
 | 
			
		||||
		allowRebaseMerge = config.AllowRebaseMerge
 | 
			
		||||
		allowSquash = config.AllowSquash
 | 
			
		||||
		defaultMergeStyle = config.GetDefaultMergeStyle()
 | 
			
		||||
	}
 | 
			
		||||
	hasProjects := false
 | 
			
		||||
	if _, err := repo.GetUnit(models.UnitTypeProjects); err == nil {
 | 
			
		||||
@@ -139,6 +141,7 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool)
 | 
			
		||||
		AllowRebase:               allowRebase,
 | 
			
		||||
		AllowRebaseMerge:          allowRebaseMerge,
 | 
			
		||||
		AllowSquash:               allowSquash,
 | 
			
		||||
		DefaultMergeStyle:         string(defaultMergeStyle),
 | 
			
		||||
		AvatarURL:                 repo.AvatarLink(),
 | 
			
		||||
		Internal:                  !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate,
 | 
			
		||||
		MirrorInterval:            mirrorInterval,
 | 
			
		||||
 
 | 
			
		||||
@@ -140,6 +140,7 @@ type RepoSettingForm struct {
 | 
			
		||||
	PullsAllowRebaseMerge                 bool
 | 
			
		||||
	PullsAllowSquash                      bool
 | 
			
		||||
	PullsAllowManualMerge                 bool
 | 
			
		||||
	PullsDefaultMergeStyle                string
 | 
			
		||||
	EnableAutodetectManualMerge           bool
 | 
			
		||||
	EnableTimetracker                     bool
 | 
			
		||||
	AllowOnlyContributorsToTrackTime      bool
 | 
			
		||||
 
 | 
			
		||||
@@ -89,6 +89,7 @@ type Repository struct {
 | 
			
		||||
	AllowRebase               bool             `json:"allow_rebase"`
 | 
			
		||||
	AllowRebaseMerge          bool             `json:"allow_rebase_explicit"`
 | 
			
		||||
	AllowSquash               bool             `json:"allow_squash_merge"`
 | 
			
		||||
	DefaultMergeStyle         string           `json:"default_merge_style"`
 | 
			
		||||
	AvatarURL                 string           `json:"avatar_url"`
 | 
			
		||||
	Internal                  bool             `json:"internal"`
 | 
			
		||||
	MirrorInterval            string           `json:"mirror_interval"`
 | 
			
		||||
@@ -171,6 +172,8 @@ type EditRepoOption struct {
 | 
			
		||||
	AllowManualMerge *bool `json:"allow_manual_merge,omitempty"`
 | 
			
		||||
	// either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
 | 
			
		||||
	AutodetectManualMerge *bool `json:"autodetect_manual_merge,omitempty"`
 | 
			
		||||
	// set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", or "squash". `has_pull_requests` must be `true`.
 | 
			
		||||
	DefaultMergeStyle *string `json:"default_merge_style,omitempty"`
 | 
			
		||||
	// set to `true` to archive this repository.
 | 
			
		||||
	Archived *bool `json:"archived,omitempty"`
 | 
			
		||||
	// set to a string like `8h30m0s` to set the mirror interval time
 | 
			
		||||
 
 | 
			
		||||
@@ -1791,6 +1791,7 @@ settings.block_on_official_review_requests_desc = Merging will not be possible w
 | 
			
		||||
settings.block_outdated_branch = Block merge if pull request is outdated
 | 
			
		||||
settings.block_outdated_branch_desc = Merging will not be possible when head branch is behind base branch.
 | 
			
		||||
settings.default_branch_desc = Select a default repository branch for pull requests and code commits:
 | 
			
		||||
settings.default_merge_style_desc = Default merge style for pull requests:
 | 
			
		||||
settings.choose_branch = Choose a branch…
 | 
			
		||||
settings.no_protected_branch = There are no protected branches.
 | 
			
		||||
settings.edit_protected_branch = Edit
 | 
			
		||||
 
 | 
			
		||||
@@ -731,6 +731,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
 | 
			
		||||
					AllowSquash:               true,
 | 
			
		||||
					AllowManualMerge:          true,
 | 
			
		||||
					AutodetectManualMerge:     false,
 | 
			
		||||
					DefaultMergeStyle:         models.MergeStyleMerge,
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				config = unit.PullRequestsConfig()
 | 
			
		||||
@@ -757,6 +758,9 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
 | 
			
		||||
			if opts.AutodetectManualMerge != nil {
 | 
			
		||||
				config.AutodetectManualMerge = *opts.AutodetectManualMerge
 | 
			
		||||
			}
 | 
			
		||||
			if opts.DefaultMergeStyle != nil {
 | 
			
		||||
				config.DefaultMergeStyle = models.MergeStyle(*opts.DefaultMergeStyle)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			units = append(units, models.RepoUnit{
 | 
			
		||||
				RepoID: repo.ID,
 | 
			
		||||
 
 | 
			
		||||
@@ -1484,7 +1484,10 @@ func ViewIssue(ctx *context.Context) {
 | 
			
		||||
		// Check correct values and select default
 | 
			
		||||
		if ms, ok := ctx.Data["MergeStyle"].(models.MergeStyle); !ok ||
 | 
			
		||||
			!prConfig.IsMergeStyleAllowed(ms) {
 | 
			
		||||
			if prConfig.AllowMerge {
 | 
			
		||||
			defaultMergeStyle := prConfig.GetDefaultMergeStyle()
 | 
			
		||||
			if prConfig.IsMergeStyleAllowed(defaultMergeStyle) && !ok {
 | 
			
		||||
				ctx.Data["MergeStyle"] = defaultMergeStyle
 | 
			
		||||
			} else if prConfig.AllowMerge {
 | 
			
		||||
				ctx.Data["MergeStyle"] = models.MergeStyleMerge
 | 
			
		||||
			} else if prConfig.AllowRebase {
 | 
			
		||||
				ctx.Data["MergeStyle"] = models.MergeStyleRebase
 | 
			
		||||
 
 | 
			
		||||
@@ -322,6 +322,7 @@ func SettingsPost(ctx *context.Context) {
 | 
			
		||||
					AllowSquash:               form.PullsAllowSquash,
 | 
			
		||||
					AllowManualMerge:          form.PullsAllowManualMerge,
 | 
			
		||||
					AutodetectManualMerge:     form.EnableAutodetectManualMerge,
 | 
			
		||||
					DefaultMergeStyle:         models.MergeStyle(form.PullsDefaultMergeStyle),
 | 
			
		||||
				},
 | 
			
		||||
			})
 | 
			
		||||
		} else if !models.UnitTypePullRequests.UnitGlobalDisabled() {
 | 
			
		||||
 
 | 
			
		||||
@@ -346,6 +346,39 @@
 | 
			
		||||
								<label>{{.i18n.Tr "repo.settings.pulls.enable_autodetect_manual_merge"}}</label>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="field">
 | 
			
		||||
							<p>
 | 
			
		||||
								{{.i18n.Tr "repo.settings.default_merge_style_desc"}}
 | 
			
		||||
							</p>
 | 
			
		||||
							<div class="ui dropdown selection" tabindex="0">
 | 
			
		||||
								<select name="pulls_default_merge_style">
 | 
			
		||||
									<option value="merge" {{if or (not $pullRequestEnabled) (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "merge")}}selected{{end}}>{{.i18n.Tr "repo.pulls.merge_pull_request"}}</option>
 | 
			
		||||
									<option value="rebase" {{if or (not $pullRequestEnabled) (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase")}}selected{{end}}>{{.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}</option>
 | 
			
		||||
									<option value="rebase-merge" {{if or (not $pullRequestEnabled) (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase-merge")}}selected{{end}}>{{.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}</option>
 | 
			
		||||
									<option value="squash" {{if or (not $pullRequestEnabled) (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "squash")}}selected{{end}}>{{.i18n.Tr "repo.pulls.squash_merge_pull_request"}}</option>
 | 
			
		||||
								</select>{{svg "octicon-triangle-down" 14 "dropdown icon"}}
 | 
			
		||||
								<div class="default text">
 | 
			
		||||
									{{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "merge")}}
 | 
			
		||||
										{{.i18n.Tr "repo.pulls.merge_pull_request"}}
 | 
			
		||||
									{{end}}
 | 
			
		||||
									{{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase")}}
 | 
			
		||||
										{{.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}
 | 
			
		||||
									{{end}}
 | 
			
		||||
									{{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase-merge")}}
 | 
			
		||||
										{{.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
 | 
			
		||||
									{{end}}
 | 
			
		||||
									{{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "squash")}}
 | 
			
		||||
										{{.i18n.Tr "repo.pulls.squash_merge_pull_request"}}
 | 
			
		||||
									{{end}}
 | 
			
		||||
								</div>
 | 
			
		||||
								<div class="menu transition hidden" tabindex="-1" style="display: block !important;">
 | 
			
		||||
									<div class="item" data-value="merge">{{.i18n.Tr "repo.pulls.merge_pull_request"}}</div>
 | 
			
		||||
									<div class="item" data-value="rebase">{{.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}</div>
 | 
			
		||||
									<div class="item" data-value="rebase-merge">{{.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}</div>
 | 
			
		||||
									<div class="item" data-value="squash">{{.i18n.Tr "repo.pulls.squash_merge_pull_request"}}</div>
 | 
			
		||||
								</div>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				{{end}}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13626,6 +13626,11 @@
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "DefaultBranch"
 | 
			
		||||
        },
 | 
			
		||||
        "default_merge_style": {
 | 
			
		||||
          "description": "set to a merge style to be used by this repository: \"merge\", \"rebase\", \"rebase-merge\", or \"squash\". `has_pull_requests` must be `true`.",
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "DefaultMergeStyle"
 | 
			
		||||
        },
 | 
			
		||||
        "description": {
 | 
			
		||||
          "description": "a short description of the repository.",
 | 
			
		||||
          "type": "string",
 | 
			
		||||
@@ -15676,6 +15681,10 @@
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "DefaultBranch"
 | 
			
		||||
        },
 | 
			
		||||
        "default_merge_style": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "DefaultMergeStyle"
 | 
			
		||||
        },
 | 
			
		||||
        "description": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "Description"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user