2017-02-04 16:53:46 +01:00
|
|
|
// 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
|
|
|
|
|
2018-11-10 20:45:32 +01:00
|
|
|
import (
|
2019-04-22 22:40:51 +02:00
|
|
|
"fmt"
|
2018-11-10 20:45:32 +01:00
|
|
|
"strings"
|
2019-04-22 22:40:51 +02:00
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
2018-11-10 20:45:32 +01:00
|
|
|
)
|
|
|
|
|
2017-02-04 16:53:46 +01:00
|
|
|
// 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
|
2017-07-17 04:04:43 +02:00
|
|
|
UnitTypeReleases // 4 Releases
|
|
|
|
UnitTypeWiki // 5 Wiki
|
|
|
|
UnitTypeExternalWiki // 6 ExternalWiki
|
|
|
|
UnitTypeExternalTracker // 7 ExternalTracker
|
2017-02-04 16:53:46 +01:00
|
|
|
)
|
|
|
|
|
2019-04-25 11:00:34 +02:00
|
|
|
// Value returns integer value for unit type
|
|
|
|
func (u UnitType) Value() int {
|
|
|
|
return int(u)
|
|
|
|
}
|
|
|
|
|
2019-04-22 22:40:51 +02:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2017-05-18 16:54:24 +02:00
|
|
|
var (
|
2019-05-30 17:09:05 +02:00
|
|
|
// AllRepoUnitTypes contains all the unit types
|
|
|
|
AllRepoUnitTypes = []UnitType{
|
2017-05-18 16:54:24 +02:00
|
|
|
UnitTypeCode,
|
|
|
|
UnitTypeIssues,
|
|
|
|
UnitTypePullRequests,
|
|
|
|
UnitTypeReleases,
|
|
|
|
UnitTypeWiki,
|
|
|
|
UnitTypeExternalWiki,
|
|
|
|
UnitTypeExternalTracker,
|
|
|
|
}
|
|
|
|
|
2019-05-30 17:09:05 +02:00
|
|
|
// DefaultRepoUnits contains the default unit types
|
|
|
|
DefaultRepoUnits = []UnitType{
|
2017-05-18 16:54:24 +02:00
|
|
|
UnitTypeCode,
|
|
|
|
UnitTypeIssues,
|
|
|
|
UnitTypePullRequests,
|
|
|
|
UnitTypeReleases,
|
|
|
|
UnitTypeWiki,
|
|
|
|
}
|
|
|
|
|
2017-07-17 04:04:43 +02:00
|
|
|
// MustRepoUnits contains the units could not be disabled currently
|
2017-05-18 16:54:24 +02:00
|
|
|
MustRepoUnits = []UnitType{
|
|
|
|
UnitTypeCode,
|
|
|
|
UnitTypeReleases,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2017-07-17 04:04:43 +02:00
|
|
|
// Unit is a section of one repository
|
2017-02-04 16:53:46 +01:00
|
|
|
type Unit struct {
|
|
|
|
Type UnitType
|
|
|
|
NameKey string
|
|
|
|
URI string
|
|
|
|
DescKey string
|
|
|
|
Idx int
|
|
|
|
}
|
|
|
|
|
2017-05-18 16:54:24 +02:00
|
|
|
// CanDisable returns if this unit could be disabled.
|
|
|
|
func (u *Unit) CanDisable() bool {
|
2017-07-17 04:04:43 +02:00
|
|
|
return true
|
2017-05-18 16:54:24 +02:00
|
|
|
}
|
|
|
|
|
2017-10-01 15:50:56 +02:00
|
|
|
// 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
|
|
|
|
}
|
|
|
|
|
2017-02-04 16:53:46 +01:00
|
|
|
// Enumerate all the units
|
|
|
|
var (
|
|
|
|
UnitCode = Unit{
|
|
|
|
UnitTypeCode,
|
|
|
|
"repo.code",
|
|
|
|
"/",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.code.desc",
|
2017-02-04 16:53:46 +01:00
|
|
|
0,
|
|
|
|
}
|
|
|
|
|
|
|
|
UnitIssues = Unit{
|
|
|
|
UnitTypeIssues,
|
|
|
|
"repo.issues",
|
|
|
|
"/issues",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.issues.desc",
|
2017-02-04 16:53:46 +01:00
|
|
|
1,
|
|
|
|
}
|
|
|
|
|
|
|
|
UnitExternalTracker = Unit{
|
|
|
|
UnitTypeExternalTracker,
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.ext_issues",
|
2017-02-04 16:53:46 +01:00
|
|
|
"/issues",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.ext_issues.desc",
|
2017-02-04 16:53:46 +01:00
|
|
|
1,
|
|
|
|
}
|
|
|
|
|
|
|
|
UnitPullRequests = Unit{
|
|
|
|
UnitTypePullRequests,
|
|
|
|
"repo.pulls",
|
|
|
|
"/pulls",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.pulls.desc",
|
2017-02-04 16:53:46 +01:00
|
|
|
2,
|
|
|
|
}
|
|
|
|
|
|
|
|
UnitReleases = Unit{
|
|
|
|
UnitTypeReleases,
|
|
|
|
"repo.releases",
|
|
|
|
"/releases",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.releases.desc",
|
2017-07-17 04:04:43 +02:00
|
|
|
3,
|
2017-02-04 16:53:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
UnitWiki = Unit{
|
|
|
|
UnitTypeWiki,
|
|
|
|
"repo.wiki",
|
|
|
|
"/wiki",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.wiki.desc",
|
2017-07-17 04:04:43 +02:00
|
|
|
4,
|
2017-02-04 16:53:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
UnitExternalWiki = Unit{
|
|
|
|
UnitTypeExternalWiki,
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.ext_wiki",
|
2017-02-04 16:53:46 +01:00
|
|
|
"/wiki",
|
2017-05-18 16:54:24 +02:00
|
|
|
"repo.ext_wiki.desc",
|
2017-07-17 04:04:43 +02:00
|
|
|
4,
|
2017-02-04 16:53:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Units contains all the units
|
|
|
|
Units = map[UnitType]Unit{
|
|
|
|
UnitTypeCode: UnitCode,
|
|
|
|
UnitTypeIssues: UnitIssues,
|
|
|
|
UnitTypeExternalTracker: UnitExternalTracker,
|
|
|
|
UnitTypePullRequests: UnitPullRequests,
|
|
|
|
UnitTypeReleases: UnitReleases,
|
|
|
|
UnitTypeWiki: UnitWiki,
|
|
|
|
UnitTypeExternalWiki: UnitExternalWiki,
|
|
|
|
}
|
|
|
|
)
|
2018-11-10 20:45:32 +01:00
|
|
|
|
|
|
|
// 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
|
|
|
|
}
|