|
|
@@ -206,22 +206,28 @@ func parseIgnoreFile(fd io.Reader, currentFile string, seen map[string]bool) ([]
|
|
|
include = false
|
|
|
}
|
|
|
|
|
|
+ flags := fnmatch.PathName
|
|
|
+ if strings.HasPrefix(line, "(?i)") {
|
|
|
+ line = line[4:]
|
|
|
+ flags |= fnmatch.CaseFold
|
|
|
+ }
|
|
|
+
|
|
|
if strings.HasPrefix(line, "/") {
|
|
|
// Pattern is rooted in the current dir only
|
|
|
- exp, err := fnmatch.Convert(line[1:], fnmatch.PathName)
|
|
|
+ exp, err := fnmatch.Convert(line[1:], flags)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Invalid pattern %q in ignore file", line)
|
|
|
}
|
|
|
patterns = append(patterns, Pattern{exp, include})
|
|
|
} else if strings.HasPrefix(line, "**/") {
|
|
|
// Add the pattern as is, and without **/ so it matches in current dir
|
|
|
- exp, err := fnmatch.Convert(line, fnmatch.PathName)
|
|
|
+ exp, err := fnmatch.Convert(line, flags)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Invalid pattern %q in ignore file", line)
|
|
|
}
|
|
|
patterns = append(patterns, Pattern{exp, include})
|
|
|
|
|
|
- exp, err = fnmatch.Convert(line[3:], fnmatch.PathName)
|
|
|
+ exp, err = fnmatch.Convert(line[3:], flags)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Invalid pattern %q in ignore file", line)
|
|
|
}
|
|
|
@@ -236,13 +242,13 @@ func parseIgnoreFile(fd io.Reader, currentFile string, seen map[string]bool) ([]
|
|
|
} else {
|
|
|
// Path name or pattern, add it so it matches files both in
|
|
|
// current directory and subdirs.
|
|
|
- exp, err := fnmatch.Convert(line, fnmatch.PathName)
|
|
|
+ exp, err := fnmatch.Convert(line, flags)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Invalid pattern %q in ignore file", line)
|
|
|
}
|
|
|
patterns = append(patterns, Pattern{exp, include})
|
|
|
|
|
|
- exp, err = fnmatch.Convert("**/"+line, fnmatch.PathName)
|
|
|
+ exp, err = fnmatch.Convert("**/"+line, flags)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("Invalid pattern %q in ignore file", line)
|
|
|
}
|