Rule Sort
This commit is contained in:
parent
1837aae03b
commit
a5cc6d3bfc
2 changed files with 31 additions and 5 deletions
|
@ -30,6 +30,7 @@ type ProtectedBranch struct {
|
|||
RepoID int64 `xorm:"UNIQUE(s)"`
|
||||
BranchName string `xorm:"UNIQUE(s)"` // a branch name or a glob match to branch name
|
||||
globRule glob.Glob `xorm:"-"`
|
||||
isPlainName bool `xorm:"-"`
|
||||
CanPush bool `xorm:"NOT NULL DEFAULT false"`
|
||||
EnableWhitelist bool
|
||||
WhitelistUserIDs []int64 `xorm:"JSON TEXT"`
|
||||
|
@ -60,14 +61,19 @@ func init() {
|
|||
db.RegisterModel(new(ProtectedBranch))
|
||||
}
|
||||
|
||||
func (protectBranch *ProtectedBranch) loadGlob() {
|
||||
if protectBranch.globRule == nil {
|
||||
protectBranch.globRule = glob.MustCompile(protectBranch.BranchName, '/')
|
||||
protectBranch.isPlainName = protectBranch.globRule.Match(protectBranch.BranchName)
|
||||
}
|
||||
}
|
||||
|
||||
// Match tests if branchName matches the rule
|
||||
func (protectBranch *ProtectedBranch) Match(branchName string) bool {
|
||||
if strings.EqualFold(protectBranch.BranchName, branchName) {
|
||||
return true
|
||||
}
|
||||
if protectBranch.globRule == nil {
|
||||
protectBranch.globRule = glob.MustCompile(protectBranch.BranchName, '/')
|
||||
}
|
||||
protectBranch.loadGlob()
|
||||
|
||||
return protectBranch.globRule.Match(branchName)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ package git
|
|||
|
||||
import (
|
||||
"context"
|
||||
"sort"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
|
@ -24,11 +25,30 @@ func (rules ProtectedBranchRules) GetFirstMatched(branchName string) *ProtectedB
|
|||
return nil
|
||||
}
|
||||
|
||||
func (rules ProtectedBranchRules) Sort() {
|
||||
sort.Slice(rules, func(i, j int) bool {
|
||||
rules[i].loadGlob()
|
||||
rules[j].loadGlob()
|
||||
if rules[i].isPlainName {
|
||||
if !rules[j].isPlainName {
|
||||
return true
|
||||
}
|
||||
} else if rules[j].isPlainName {
|
||||
return true
|
||||
}
|
||||
return rules[i].CreatedUnix < rules[j].CreatedUnix
|
||||
})
|
||||
}
|
||||
|
||||
// FindRepoProtectedBranchRules load all repository's protected rules
|
||||
func FindRepoProtectedBranchRules(ctx context.Context, repoID int64) (ProtectedBranchRules, error) {
|
||||
var rules []*ProtectedBranch
|
||||
var rules ProtectedBranchRules
|
||||
err := db.GetEngine(ctx).Where("repo_id = ?", repoID).Asc("created_unix").Find(&rules)
|
||||
return rules, err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rules.Sort()
|
||||
return rules, nil
|
||||
}
|
||||
|
||||
// FindAllMatchedBranches find all matched branches
|
||||
|
|
Loading…
Add table
Reference in a new issue