Handle multiple case insensitivity prefixes in ignores (fixes #2134)

This commit is contained in:
Jakob Borg 2015-08-08 11:53:14 +02:00
parent 9b6681d543
commit e312fdd4f8
2 changed files with 5 additions and 3 deletions

View File

@ -38,9 +38,10 @@ func Convert(pattern string, flags int) (*regexp.Regexp, error) {
}
}
// Support case insensitive ignores
ignore := strings.TrimPrefix(pattern, "(?i)")
if ignore != pattern {
// Support case insensitive ignores. We do the loop because we may in some
// circumstances end up with multiple insensitivity prefixes
// ("(?i)(?i)foo"), which should be accepted.
for ignore := strings.TrimPrefix(pattern, "(?i)"); ignore != pattern; ignore = strings.TrimPrefix(pattern, "(?i)") {
flags |= CaseFold
pattern = ignore
}

View File

@ -54,6 +54,7 @@ var testcases = []testcase{
{"foo.txt", "foo.TXT", CaseFold, true},
{"(?i)foo.txt", "foo.TXT", 0, true},
{"(?i)(?i)foo.txt", "foo.TXT", 0, true}, // repeated prefix should be fine
{"(?i)**foo.txt", "/dev/tmp/foo.TXT", 0, true},
{"(?i)!**foo.txt", "/dev/tmp/foo.TXT", 0, false},