code.gitea.io/gitea@v1.21.7/models/migrations/v1_8/v76.go (about)

     1  // Copyright 2018 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package v1_8 //nolint
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"code.gitea.io/gitea/modules/timeutil"
    10  
    11  	"xorm.io/xorm"
    12  )
    13  
    14  func AddPullRequestRebaseWithMerge(x *xorm.Engine) error {
    15  	// RepoUnit describes all units of a repository
    16  	type RepoUnit struct {
    17  		ID          int64
    18  		RepoID      int64              `xorm:"INDEX(s)"`
    19  		Type        int                `xorm:"INDEX(s)"`
    20  		Config      map[string]any     `xorm:"JSON"`
    21  		CreatedUnix timeutil.TimeStamp `xorm:"INDEX CREATED"`
    22  	}
    23  
    24  	const (
    25  		v16UnitTypeCode            = iota + 1 // 1 code
    26  		v16UnitTypeIssues                     // 2 issues
    27  		v16UnitTypePRs                        // 3 PRs
    28  		v16UnitTypeCommits                    // 4 Commits
    29  		v16UnitTypeReleases                   // 5 Releases
    30  		v16UnitTypeWiki                       // 6 Wiki
    31  		v16UnitTypeSettings                   // 7 Settings
    32  		v16UnitTypeExternalWiki               // 8 ExternalWiki
    33  		v16UnitTypeExternalTracker            // 9 ExternalTracker
    34  	)
    35  
    36  	sess := x.NewSession()
    37  	defer sess.Close()
    38  	if err := sess.Begin(); err != nil {
    39  		return err
    40  	}
    41  
    42  	// Updating existing issue units
    43  	units := make([]*RepoUnit, 0, 100)
    44  	if err := sess.Where("`type` = ?", v16UnitTypePRs).Find(&units); err != nil {
    45  		return fmt.Errorf("Query repo units: %w", err)
    46  	}
    47  	for _, unit := range units {
    48  		if unit.Config == nil {
    49  			unit.Config = make(map[string]any)
    50  		}
    51  		// Allow the new merge style if all other merge styles are allowed
    52  		allowMergeRebase := true
    53  
    54  		if allowMerge, ok := unit.Config["AllowMerge"]; ok {
    55  			allowMergeRebase = allowMergeRebase && allowMerge.(bool)
    56  		}
    57  
    58  		if allowRebase, ok := unit.Config["AllowRebase"]; ok {
    59  			allowMergeRebase = allowMergeRebase && allowRebase.(bool)
    60  		}
    61  
    62  		if allowSquash, ok := unit.Config["AllowSquash"]; ok {
    63  			allowMergeRebase = allowMergeRebase && allowSquash.(bool)
    64  		}
    65  
    66  		if _, ok := unit.Config["AllowRebaseMerge"]; !ok {
    67  			unit.Config["AllowRebaseMerge"] = allowMergeRebase
    68  		}
    69  		if _, err := sess.ID(unit.ID).Cols("config").Update(unit); err != nil {
    70  			return err
    71  		}
    72  	}
    73  	return sess.Commit()
    74  }