mirror of
https://github.com/go-gitea/gitea.git
synced 2025-06-20 05:07:16 +02:00
Remove unit types commits and settings (#2161)
* Remove unit types commits and settings * Can not limit units in administrator teams * Limit changing units only to teams with read and write access mode * Small code optimization
This commit is contained in:
@ -124,6 +124,8 @@ var migrations = []Migration{
|
||||
NewMigration("regenerate git hooks", regenerateGitHooks36),
|
||||
// v37 -> v38
|
||||
NewMigration("unescape user full names", unescapeUserFullNames),
|
||||
// v38 -> v39
|
||||
NewMigration("remove commits and settings unit types", removeCommitsUnitType),
|
||||
}
|
||||
|
||||
// Migrate database to current version
|
||||
|
@ -26,15 +26,15 @@ type RepoUnit struct {
|
||||
|
||||
// Enumerate all the unit types
|
||||
const (
|
||||
UnitTypeCode = iota + 1 // 1 code
|
||||
UnitTypeIssues // 2 issues
|
||||
UnitTypePRs // 3 PRs
|
||||
UnitTypeCommits // 4 Commits
|
||||
UnitTypeReleases // 5 Releases
|
||||
UnitTypeWiki // 6 Wiki
|
||||
UnitTypeSettings // 7 Settings
|
||||
UnitTypeExternalWiki // 8 ExternalWiki
|
||||
UnitTypeExternalTracker // 9 ExternalTracker
|
||||
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
|
||||
)
|
||||
|
||||
// Repo describes a repository
|
||||
@ -79,32 +79,32 @@ func addUnitsToTables(x *xorm.Engine) error {
|
||||
|
||||
for _, repo := range repos {
|
||||
for i := 1; i <= 9; i++ {
|
||||
if (i == UnitTypeWiki || i == UnitTypeExternalWiki) && !repo.EnableWiki {
|
||||
if (i == V16UnitTypeWiki || i == V16UnitTypeExternalWiki) && !repo.EnableWiki {
|
||||
continue
|
||||
}
|
||||
if i == UnitTypeExternalWiki && !repo.EnableExternalWiki {
|
||||
if i == V16UnitTypeExternalWiki && !repo.EnableExternalWiki {
|
||||
continue
|
||||
}
|
||||
if i == UnitTypePRs && !repo.EnablePulls {
|
||||
if i == V16UnitTypePRs && !repo.EnablePulls {
|
||||
continue
|
||||
}
|
||||
if (i == UnitTypeIssues || i == UnitTypeExternalTracker) && !repo.EnableIssues {
|
||||
if (i == V16UnitTypeIssues || i == V16UnitTypeExternalTracker) && !repo.EnableIssues {
|
||||
continue
|
||||
}
|
||||
if i == UnitTypeExternalTracker && !repo.EnableExternalTracker {
|
||||
if i == V16UnitTypeExternalTracker && !repo.EnableExternalTracker {
|
||||
continue
|
||||
}
|
||||
|
||||
var config = make(map[string]string)
|
||||
switch i {
|
||||
case UnitTypeExternalTracker:
|
||||
case V16UnitTypeExternalTracker:
|
||||
config["ExternalTrackerURL"] = repo.ExternalTrackerURL
|
||||
config["ExternalTrackerFormat"] = repo.ExternalTrackerFormat
|
||||
if len(repo.ExternalTrackerStyle) == 0 {
|
||||
repo.ExternalTrackerStyle = markdown.IssueNameStyleNumeric
|
||||
}
|
||||
config["ExternalTrackerStyle"] = repo.ExternalTrackerStyle
|
||||
case UnitTypeExternalWiki:
|
||||
case V16UnitTypeExternalWiki:
|
||||
config["ExternalWikiURL"] = repo.ExternalWikiURL
|
||||
}
|
||||
|
||||
|
56
models/migrations/v38.go
Normal file
56
models/migrations/v38.go
Normal file
@ -0,0 +1,56 @@
|
||||
// Copyright 2017 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 (
|
||||
"code.gitea.io/gitea/models"
|
||||
|
||||
"github.com/go-xorm/xorm"
|
||||
)
|
||||
|
||||
func removeCommitsUnitType(x *xorm.Engine) (err error) {
|
||||
// Update team unit types
|
||||
const batchSize = 100
|
||||
for start := 0; ; start += batchSize {
|
||||
teams := make([]*models.Team, 0, batchSize)
|
||||
if err := x.Limit(batchSize, start).Find(&teams); err != nil {
|
||||
return err
|
||||
}
|
||||
if len(teams) == 0 {
|
||||
break
|
||||
}
|
||||
for _, team := range teams {
|
||||
ut := make([]models.UnitType, 0, len(team.UnitTypes))
|
||||
for _, u := range team.UnitTypes {
|
||||
if u < V16UnitTypeCommits {
|
||||
ut = append(ut, u)
|
||||
} else if u > V16UnitTypeSettings {
|
||||
ut = append(ut, u-2)
|
||||
} else if u > V16UnitTypeCommits && u != V16UnitTypeSettings {
|
||||
ut = append(ut, u-1)
|
||||
}
|
||||
}
|
||||
team.UnitTypes = ut
|
||||
if _, err := x.Id(team.ID).Cols("unit_types").Update(team); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete commits and settings unit types
|
||||
if _, err = x.In("`type`", []models.UnitType{V16UnitTypeCommits, V16UnitTypeSettings}).Delete(new(RepoUnit)); err != nil {
|
||||
return err
|
||||
}
|
||||
// Fix renumber unit types that where in enumeration after settings unit type
|
||||
if _, err = x.Where("`type` > ?", V16UnitTypeSettings).Decr("type").Decr("index").Update(new(RepoUnit)); err != nil {
|
||||
return err
|
||||
}
|
||||
// Fix renumber unit types that where in enumeration after commits unit type
|
||||
if _, err = x.Where("`type` > ?", V16UnitTypeCommits).Decr("type").Decr("index").Update(new(RepoUnit)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user