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
 		}
 
