| 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 |
| } |