mirror of
https://gitea.com/gitea/tea.git
synced 2024-06-02 01:31:23 +05:30
6cff3b1cc7
Merge branch 'master' into vendor-migrate-go-git Merge branch 'master' into vendor-migrate-go-git migrate src-d/go-git -> go-git/go-git Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/128 Reviewed-by: techknowlogick <techknowlogick@gitea.io> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
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
|
|
}
|