0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2024-12-16 21:56:37 -05:00
zot/pkg/retention/matcher.go

40 lines
851 B
Go
Raw Normal View History

package retention
import "regexp"
type RegexMatcher struct {
compiled map[string]*regexp.Regexp
}
func NewRegexMatcher() *RegexMatcher {
return &RegexMatcher{
make(map[string]*regexp.Regexp, 0),
}
}
// MatchesListOfRegex is used by retention, it return true if list of regexes is empty.
func (r *RegexMatcher) MatchesListOfRegex(name string, regexes []string) bool {
if len(regexes) == 0 {
// empty regexes matches everything in retention logic
return true
}
for _, regex := range regexes {
if tagReg, ok := r.compiled[regex]; ok {
if tagReg.MatchString(name) {
return true
}
} else {
// all are compilable because they are checked at startup
if tagReg, err := regexp.Compile(regex); err == nil {
r.compiled[regex] = tagReg
if tagReg.MatchString(name) {
return true
}
}
}
}
return false
}