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"))