lib/ignore: Match directory contents for patterns ending in / (fixes #3639)

Appends "**" to patterns with a terminal slash, so that directory
contents are ignored, but not the directory itself.
This commit is contained in:
Tim Howes 2016-10-04 08:12:55 +09:00 committed by Jakob Borg
parent 2a2177e7fa
commit fe9c2b9857
2 changed files with 20 additions and 1 deletions

View File

@ -345,7 +345,7 @@ func parseIgnoreFile(fd io.Reader, currentFile string, seen map[string]bool) ([]
case strings.HasSuffix(line, "/**"):
err = addPattern(line)
case strings.HasSuffix(line, "/"):
err = addPattern(line)
err = addPattern(line + "**")
default:
err = addPattern(line)
if err == nil {

View File

@ -718,3 +718,22 @@ func TestIssue3174(t *testing.T) {
t.Error("Should match")
}
}
func TestIssue3639(t *testing.T) {
stignore := `
foo/
`
pats := New(true)
err := pats.Parse(bytes.NewBufferString(stignore), ".stignore")
if err != nil {
t.Fatal(err)
}
if !pats.Match("foo/bar").IsIgnored() {
t.Error("Should match 'foo/bar'")
}
if pats.Match("foo").IsIgnored() {
t.Error("Should not match 'foo'")
}
}