fileutils: copy all files inside a testdata folder
diff --git a/fileutils/fileutils.go b/fileutils/fileutils.go index a4033ba..af05ae9 100644 --- a/fileutils/fileutils.go +++ b/fileutils/fileutils.go
@@ -29,22 +29,7 @@ return err } - // https://golang.org/cmd/go/#hdr-Description_of_package_lists name := filepath.Base(path) - if strings.HasPrefix(name, ".") || - (strings.HasPrefix(name, "_") && name != "_testdata") || - (!tests && name == "_testdata") || - (!tests && name == "testdata") || - (!tests && strings.HasSuffix(name, "_test.go")) { - if info.IsDir() { - return filepath.SkipDir - } - return nil - } - - if info.IsDir() { - return nil - } relevantFile := false for _, ext := range goFileTypes { @@ -53,7 +38,45 @@ break } } - if !relevantFile { + + testdata := false + for _, n := range strings.Split(filepath.Dir(path), string(filepath.Separator)) { + if n == "testdata" || n == "_testdata" { + testdata = true + } + } + + skip := false + switch { + // Include all files in a testdata folder + case tests && testdata: + skip = false + + // https://golang.org/cmd/go/#hdr-Description_of_package_lists + case strings.HasPrefix(name, "."): + skip = true + case strings.HasPrefix(name, "_") && name != "_testdata": + skip = true + + case !tests && name == "_testdata" && info.IsDir(): + skip = true + case !tests && name == "testdata" && info.IsDir(): + skip = true + case !tests && strings.HasSuffix(name, "_test.go") && !info.IsDir(): + skip = true + + case !relevantFile && !info.IsDir(): + skip = true + } + + if skip { + if info.IsDir() { + return filepath.SkipDir + } + return nil + } + + if info.IsDir() { return nil }
diff --git a/fileutils/fileutils_test.go b/fileutils/fileutils_test.go index 24b1af2..69bb60a 100644 --- a/fileutils/fileutils_test.go +++ b/fileutils/fileutils_test.go
@@ -15,7 +15,7 @@ dst := mktemp(t) defer RemoveAll(dst) src := filepath.Join("_testdata", "copyfile") - if err := Copypath(dst, src); err != nil { + if err := Copypath(dst, src, true); err != nil { t.Fatalf("copypath(%s, %s): %v", dst, src, err) } res, err := os.Readlink(filepath.Join(dst, "a", "rick"))