// 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 models import ( "fmt" "strings" "code.gitea.io/gitea/modules/log" ) // UnitType is Unit's Type type UnitType int // Enumerate all the unit types const ( UnitTypeCode UnitType = iota + 1 // 1 code UnitTypeIssues // 2 issues UnitTypePullRequests // 3 PRs UnitTypeReleases // 4 Releases UnitTypeWiki // 5 Wiki UnitTypeExternalWiki // 6 ExternalWiki UnitTypeExternalTracker // 7 ExternalTracker ) // Value returns integer value for unit type func (u UnitType) Value() int { return int(u) } func (u UnitType) String() string { switch u { case UnitTypeCode: return "UnitTypeCode" case UnitTypeIssues: return "UnitTypeIssues" case UnitTypePullRequests: return "UnitTypePullRequests" case UnitTypeReleases: return "UnitTypeReleases" case UnitTypeWiki: return "UnitTypeWiki" case UnitTypeExternalWiki: return "UnitTypeExternalWiki" case UnitTypeExternalTracker: return "UnitTypeExternalTracker" } return fmt.Sprintf("Unknown UnitType %d", u) } // ColorFormat provides a ColorFormatted version of this UnitType func (u UnitType) ColorFormat(s fmt.State) { log.ColorFprintf(s, "%d:%s", log.NewColoredIDValue(u), u) } var ( // allRepUnitTypes contains all the unit types allRepUnitTypes = []UnitType{ UnitTypeCode, UnitTypeIssues, UnitTypePullRequests, UnitTypeReleases, UnitTypeWiki, UnitTypeExternalWiki, UnitTypeExternalTracker, } // defaultRepoUnits contains the default unit types defaultRepoUnits = []UnitType{ UnitTypeCode, UnitTypeIssues, UnitTypePullRequests, UnitTypeReleases, UnitTypeWiki, } // MustRepoUnits contains the units could not be disabled currently MustRepoUnits = []UnitType{ UnitTypeCode, UnitTypeReleases, } ) // Unit is a section of one repository type Unit struct { Type UnitType NameKey string URI string DescKey string Idx int } // CanDisable returns if this unit could be disabled. func (u *Unit) CanDisable() bool { return true } // IsLessThan compares order of two units func (u Unit) IsLessThan(unit Unit) bool { if (u.Type == UnitTypeExternalTracker || u.Type == UnitTypeExternalWiki) && unit.Type != UnitTypeExternalTracker && unit.Type != UnitTypeExternalWiki { return false } return u.Idx < unit.Idx } // Enumerate all the units var ( UnitCode = Unit{ UnitTypeCode, "repo.code", "/", "repo.code.desc", 0, } UnitIssues = Unit{ UnitTypeIssues, "repo.issues", "/issues", "repo.issues.desc", 1, } UnitExternalTracker = Unit{ UnitTypeExternalTracker, "repo.ext_issues", "/issues", "repo.ext_issues.desc", 1, } UnitPullRequests = Unit{ UnitTypePullRequests, "repo.pulls", "/pulls", "repo.pulls.desc", 2, } UnitReleases = Unit{ UnitTypeReleases, "repo.releases", "/releases", "repo.releases.desc", 3, } UnitWiki = Unit{ UnitTypeWiki, "repo.wiki", "/wiki", "repo.wiki.desc", 4, } UnitExternalWiki = Unit{ UnitTypeExternalWiki, "repo.ext_wiki", "/wiki", "repo.ext_wiki.desc", 4, } // Units contains all the units Units = map[UnitType]Unit{ UnitTypeCode: UnitCode, UnitTypeIssues: UnitIssues, UnitTypeExternalTracker: UnitExternalTracker, UnitTypePullRequests: UnitPullRequests, UnitTypeReleases: UnitReleases, UnitTypeWiki: UnitWiki, UnitTypeExternalWiki: UnitExternalWiki, } ) // FindUnitTypes give the unit key name and return unit func FindUnitTypes(nameKeys ...string) (res []UnitType) { for _, key := range nameKeys { for t, u := range Units { if strings.EqualFold(key, u.NameKey) { res = append(res, t) break } } } return }