2018-12-27 13:27:08 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"fmt"
2019-08-15 17:46:21 +03:00
"code.gitea.io/gitea/modules/timeutil"
2018-12-27 13:27:08 +03:00
2019-10-17 12:26:49 +03:00
"xorm.io/xorm"
2018-12-27 13:27:08 +03:00
)
func addPullRequestRebaseWithMerge ( x * xorm . Engine ) error {
// RepoUnit describes all units of a repository
type RepoUnit struct {
ID int64
RepoID int64 ` xorm:"INDEX(s)" `
Type int ` xorm:"INDEX(s)" `
Config map [ string ] interface { } ` xorm:"JSON" `
2019-08-15 17:46:21 +03:00
CreatedUnix timeutil . TimeStamp ` xorm:"INDEX CREATED" `
2018-12-27 13:27:08 +03:00
}
2020-01-31 16:42:45 +03:00
const (
v16UnitTypeCode = iota + 1 // 1 code
v16UnitTypeIssues // 2 issues
v16UnitTypePRs // 3 PRs
v16UnitTypeCommits // 4 Commits
v16UnitTypeReleases // 5 Releases
v16UnitTypeWiki // 6 Wiki
v16UnitTypeSettings // 7 Settings
v16UnitTypeExternalWiki // 8 ExternalWiki
v16UnitTypeExternalTracker // 9 ExternalTracker
)
2018-12-27 13:27:08 +03:00
sess := x . NewSession ( )
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return err
}
2021-03-14 21:52:12 +03:00
// Updating existing issue units
2018-12-27 13:27:08 +03:00
units := make ( [ ] * RepoUnit , 0 , 100 )
2020-01-31 16:42:45 +03:00
if err := sess . Where ( "`type` = ?" , v16UnitTypePRs ) . Find ( & units ) ; err != nil {
2018-12-27 13:27:08 +03:00
return fmt . Errorf ( "Query repo units: %v" , err )
}
for _ , unit := range units {
if unit . Config == nil {
unit . Config = make ( map [ string ] interface { } )
}
// Allow the new merge style if all other merge styles are allowed
allowMergeRebase := true
if allowMerge , ok := unit . Config [ "AllowMerge" ] ; ok {
allowMergeRebase = allowMergeRebase && allowMerge . ( bool )
}
if allowRebase , ok := unit . Config [ "AllowRebase" ] ; ok {
allowMergeRebase = allowMergeRebase && allowRebase . ( bool )
}
if allowSquash , ok := unit . Config [ "AllowSquash" ] ; ok {
allowMergeRebase = allowMergeRebase && allowSquash . ( bool )
}
if _ , ok := unit . Config [ "AllowRebaseMerge" ] ; ! ok {
unit . Config [ "AllowRebaseMerge" ] = allowMergeRebase
}
if _ , err := sess . ID ( unit . ID ) . Cols ( "config" ) . Update ( unit ) ; err != nil {
return err
}
}
return sess . Commit ( )
}