Correctly handle (?i) in ignores (fixes #1953)

This commit is contained in:
Jakob Borg
2015-09-02 20:54:18 +02:00
parent 70b37dc469
commit e3e1036dda
4 changed files with 21 additions and 27 deletions

View File

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