| 128 | } |
| 129 | |
| 130 | func NewDockerPatternMatcher(repoRoot string, patterns []string) (*dockerPathMatcher, error) { |
| 131 | absRoot, err := filepath.Abs(repoRoot) |
| 132 | if err != nil { |
| 133 | return nil, err |
| 134 | } |
| 135 | |
| 136 | // Check if "*" is present in patterns |
| 137 | hasAllPattern := slices.Contains(patterns, "*") |
| 138 | if hasAllPattern { |
| 139 | // Remove all non-exclusion patterns (those that don't start with '!') |
| 140 | patterns = slices.DeleteFunc(patterns, func(p string) bool { |
| 141 | return p != "" && p[0] != '!' // Only keep exclusion patterns |
| 142 | }) |
| 143 | } |
| 144 | |
| 145 | pm, err := patternmatcher.New(absPatterns(absRoot, patterns)) |
| 146 | if err != nil { |
| 147 | return nil, err |
| 148 | } |
| 149 | |
| 150 | return &dockerPathMatcher{ |
| 151 | repoRoot: absRoot, |
| 152 | matcher: pm, |
| 153 | }, nil |
| 154 | } |
| 155 | |
| 156 | func readDockerignorePatterns(r io.Reader) ([]string, error) { |
| 157 | patterns, err := ignorefile.ReadAll(r) |