Don't check ignored files for imports - closes #63
diff --git a/fetch.go b/fetch.go
index 089a1ac..129e1fe 100644
--- a/fetch.go
+++ b/fetch.go
@@ -229,7 +229,7 @@
return fmt.Errorf("unable to derive the root repo import path")
}
rootRepoPath := strings.TrimRight(strings.TrimSuffix(dep.Importpath, dep.Path), "/")
- deps, err := vendor.ParseImports(src, wc.Dir(), rootRepoPath)
+ deps, err := vendor.ParseImports(src, wc.Dir(), rootRepoPath, tests, all)
if err != nil {
return fmt.Errorf("failed to parse imports: %s", err)
}
diff --git a/fileutils/fileutils.go b/fileutils/fileutils.go
index 5584de7..da0db9e 100644
--- a/fileutils/fileutils.go
+++ b/fileutils/fileutils.go
@@ -26,6 +26,53 @@
"LICENSE", "LICENCE", "UNLICENSE", "COPYING", "COPYRIGHT",
}
+func ShouldSkip(path string, info os.FileInfo, tests, all bool) bool {
+ name := filepath.Base(path)
+
+ relevantFile := false
+ for _, ext := range goFileTypes {
+ if strings.HasSuffix(name, ext) {
+ relevantFile = true
+ break
+ }
+ }
+
+ testdata := false
+ for _, n := range strings.Split(filepath.Dir(path), string(filepath.Separator)) {
+ if n == "testdata" || n == "_testdata" {
+ testdata = true
+ }
+ }
+
+ skip := false
+ switch {
+ case all && !(name == ".git" && info.IsDir()) && name != ".bzr" && name != ".hg":
+ skip = false
+
+ // 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
+ }
+
+ return skip
+}
+
// Copypath copies the contents of src to dst, excluding any file that is not
// relevant to the Go compiler.
func Copypath(dst string, src string, tests, all bool) error {
@@ -34,48 +81,7 @@
return err
}
- name := filepath.Base(path)
-
- relevantFile := false
- for _, ext := range goFileTypes {
- if strings.HasSuffix(name, ext) {
- relevantFile = true
- break
- }
- }
-
- testdata := false
- for _, n := range strings.Split(filepath.Dir(path), string(filepath.Separator)) {
- if n == "testdata" || n == "_testdata" {
- testdata = true
- }
- }
-
- skip := false
- switch {
- case all && !(name == ".git" && info.IsDir()) && name != ".bzr" && name != ".hg":
- skip = false
-
- // 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
- }
+ skip := ShouldSkip(path, info, tests, all)
if skip {
if info.IsDir() {
diff --git a/gbvendor/imports.go b/gbvendor/imports.go
index db64a5b..689fdd3 100644
--- a/gbvendor/imports.go
+++ b/gbvendor/imports.go
@@ -12,23 +12,29 @@
"path"
"path/filepath"
"strings"
+
+ "github.com/FiloSottile/gvt/fileutils"
)
// ParseImports parses Go packages from a specific root returning a set of import paths.
// vendorRoot is how deep to go looking for vendor folders, usually the repo root.
// vendorPrefix is the vendorRoot import path.
-func ParseImports(root, vendorRoot, vendorPrefix string) (map[string]bool, error) {
+func ParseImports(root, vendorRoot, vendorPrefix string, tests, all bool) (map[string]bool, error) {
pkgs := make(map[string]bool)
var walkFn = func(p string, info os.FileInfo, err error) error {
- if info.IsDir() {
- name := info.Name()
- if strings.HasPrefix(name, ".") || strings.HasPrefix(name, "_") || name == "testdata" {
+ if err != nil {
+ return err
+ }
+
+ if fileutils.ShouldSkip(p, info, tests, all) {
+ if info.IsDir() {
return filepath.SkipDir
}
return nil
}
- if filepath.Ext(p) != ".go" { // Parse only go source files
+
+ if info.IsDir() || filepath.Ext(p) != ".go" {
return nil
}