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 }