127 lines
2.5 KiB
Go
127 lines
2.5 KiB
Go
package filepathfilter_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/git-lfs/git-lfs/filepathfilter"
|
|
"github.com/git-lfs/git-lfs/tools"
|
|
)
|
|
|
|
func BenchmarkFilterSimplePath(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
filter := filepathfilter.New([]string{"lfs"}, nil)
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
filter.Allows(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkPatternSimplePath(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
pattern := filepathfilter.NewPattern("lfs")
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
pattern.Match(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkFilterSimpleExtension(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
filter := filepathfilter.New([]string{"*.go"}, nil)
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
filter.Allows(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkPatternSimpleExtension(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
pattern := filepathfilter.NewPattern("*.go")
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
pattern.Match(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkFilterComplexExtension(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
filter := filepathfilter.New([]string{"*.travis.yml"}, nil)
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
filter.Allows(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkPatternComplexExtension(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
pattern := filepathfilter.NewPattern("*.travis.yml")
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
pattern.Match(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkFilterDoubleAsterisk(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
filter := filepathfilter.New([]string{"**/README.md"}, nil)
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
filter.Allows(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkPatternDoubleAsterisk(b *testing.B) {
|
|
files := benchmarkTree(b)
|
|
pattern := filepathfilter.NewPattern("**/README.md")
|
|
for i := 0; i < b.N; i++ {
|
|
for _, f := range files {
|
|
pattern.Match(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
var (
|
|
benchmarkFiles []string
|
|
benchmarkMu sync.Mutex
|
|
)
|
|
|
|
func benchmarkTree(b *testing.B) []string {
|
|
benchmarkMu.Lock()
|
|
defer benchmarkMu.Unlock()
|
|
|
|
if benchmarkFiles != nil {
|
|
return benchmarkFiles
|
|
}
|
|
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
|
|
hasErrors := false
|
|
tools.FastWalkGitRepo(filepath.Dir(wd), func(parent string, info os.FileInfo, err error) {
|
|
if err != nil {
|
|
hasErrors = true
|
|
b.Error(err)
|
|
return
|
|
}
|
|
benchmarkFiles = append(benchmarkFiles, filepath.Join(parent, info.Name()))
|
|
})
|
|
|
|
if hasErrors {
|
|
b.Fatal("has errors :(")
|
|
}
|
|
|
|
return benchmarkFiles
|
|
}
|