mirror of
https://github.com/go-gitea/gitea
synced 2024-09-19 10:16:03 +00:00
31 lines
934 B
Go
31 lines
934 B
Go
|
package gitignore
|
||
|
|
||
|
// Matcher defines a global multi-pattern matcher for gitignore patterns
|
||
|
type Matcher interface {
|
||
|
// Match matches patterns in the order of priorities. As soon as an inclusion or
|
||
|
// exclusion is found, not further matching is performed.
|
||
|
Match(path []string, isDir bool) bool
|
||
|
}
|
||
|
|
||
|
// NewMatcher constructs a new global matcher. Patterns must be given in the order of
|
||
|
// increasing priority. That is most generic settings files first, then the content of
|
||
|
// the repo .gitignore, then content of .gitignore down the path or the repo and then
|
||
|
// the content command line arguments.
|
||
|
func NewMatcher(ps []Pattern) Matcher {
|
||
|
return &matcher{ps}
|
||
|
}
|
||
|
|
||
|
type matcher struct {
|
||
|
patterns []Pattern
|
||
|
}
|
||
|
|
||
|
func (m *matcher) Match(path []string, isDir bool) bool {
|
||
|
n := len(m.patterns)
|
||
|
for i := n - 1; i >= 0; i-- {
|
||
|
if match := m.patterns[i].Match(path, isDir); match > NoMatch {
|
||
|
return match == Exclude
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|