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 }