lib/ignore: Correct case insensitive matching on Mac/Windows

There was a bug in that we only did the lowercase folding when the
pattern had an explicit (?i), which is not the case on Windows/Mac
necessarily.
This commit is contained in:
Jakob Borg 2016-04-05 06:35:51 +00:00
parent b678b4e048
commit 181939c841
2 changed files with 30 additions and 1 deletions

View File

@ -229,8 +229,12 @@ func parseIgnoreFile(fd io.Reader, currentFile string, seen map[string]bool) ([]
} }
if strings.HasPrefix(line, "(?i)") { if strings.HasPrefix(line, "(?i)") {
line = strings.ToLower(line[4:])
pattern.foldCase = true pattern.foldCase = true
line = line[4:]
}
if pattern.foldCase {
line = strings.ToLower(line)
} }
var err error var err error

View File

@ -531,3 +531,28 @@ func TestWindowsPatterns(t *testing.T) {
} }
} }
} }
func TestAutomaticCaseInsensitivity(t *testing.T) {
// We should do case insensitive matching by default on some platforms.
if runtime.GOOS != "windows" && runtime.GOOS != "darwin" {
t.Skip("Windows/Mac specific test")
return
}
stignore := `
A/B
c/d
`
pats := New(true)
err := pats.Parse(bytes.NewBufferString(stignore), ".stignore")
if err != nil {
t.Fatal(err)
}
tests := []string{`a/B`, `C/d`}
for _, pat := range tests {
if !pats.Match(pat) {
t.Errorf("Should match %s", pat)
}
}
}