diff options
author | Lauris BH <lauris@nix.lv> | 2017-07-17 05:04:43 +0300 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-07-17 10:04:43 +0800 |
commit | f33e6ae09ec27e898bb8f2cc44d587ea3b8e0dee (patch) | |
tree | 2c6a268356fcb5fd73ee468055869b129b14c6ed /models/migrations/v38.go | |
parent | 047a67a90b455a077e8b6f6deaad6b7ec4b50810 (diff) | |
download | gitea-f33e6ae09ec27e898bb8f2cc44d587ea3b8e0dee.tar.gz gitea-f33e6ae09ec27e898bb8f2cc44d587ea3b8e0dee.zip |
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
Diffstat (limited to 'models/migrations/v38.go')
-rw-r--r-- | models/migrations/v38.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/models/migrations/v38.go b/models/migrations/v38.go new file mode 100644 index 0000000000..69c346335e --- /dev/null +++ b/models/migrations/v38.go @@ -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 +} |