ソースを参照

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.
Tim Howes 9 年 前
コミット
fe9c2b9857
2 ファイル変更20 行追加1 行削除
  1. 1 1
      lib/ignore/ignore.go
  2. 19 0
      lib/ignore/ignore_test.go

+ 1 - 1
lib/ignore/ignore.go

@@ -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 {

+ 19 - 0
lib/ignore/ignore_test.go

@@ -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'")
+	}
+}