mirror of
https://github.com/project-zot/zot.git
synced 2024-12-16 21:56:37 -05:00
40 lines
851 B
Go
40 lines
851 B
Go
|
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
|
||
|
}
|