all: only copy files relevant to the Go compiler
diff --git a/fetch.go b/fetch.go index 410e321..434274e 100644 --- a/fetch.go +++ b/fetch.go
@@ -121,7 +121,7 @@ dst := filepath.Join(vendorDir(), dep.Importpath) src := filepath.Join(wc.Dir(), dep.Path) - if err := fileutils.Copypath(dst, src); err != nil { + if err := fileutils.Copypath(dst, src, true); err != nil { return err }
diff --git a/fileutils/fileutils.go b/fileutils/fileutils.go index 7a3ead3..a4033ba 100644 --- a/fileutils/fileutils.go +++ b/fileutils/fileutils.go
@@ -10,18 +10,32 @@ "strings" ) -const debugCopypath = false -const debugCopyfile = false +// https://golang.org/cmd/go/#hdr-File_types +var goFileTypes = []string{ + ".go", + ".c", ".h", + ".cc", ".cpp", ".cxx", ".hh", ".hpp", ".hxx", + ".m", + ".s", ".S", + ".swig", ".swigcxx", + ".syso", +} -// Copypath copies the contents of src to dst, excluding any file or -// directory that starts with a period. -func Copypath(dst string, src string) error { +// 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 bool) error { err := filepath.Walk(src, func(path string, info os.FileInfo, err error) error { if err != nil { return err } - if strings.HasPrefix(filepath.Base(path), ".") { + // 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 } @@ -32,6 +46,17 @@ return nil } + relevantFile := false + for _, ext := range goFileTypes { + if strings.HasSuffix(name, ext) { + relevantFile = true + break + } + } + if !relevantFile { + return nil + } + dst := filepath.Join(dst, path[len(src):]) if info.Mode()&os.ModeSymlink != 0 { @@ -62,9 +87,6 @@ return fmt.Errorf("copyfile: create(%q): %v", dst, err) } defer w.Close() - if debugCopyfile { - fmt.Printf("copyfile(dst: %v, src: %v)\n", dst, src) - } _, err = io.Copy(w, r) return err } @@ -80,9 +102,6 @@ if err := os.Symlink(target, dst); err != nil { return fmt.Errorf("copylink: symlink: %v", err) } - if debugCopyfile { - fmt.Printf("copylink(dst: %v, src: %v, tgt: %s)\n", dst, src, target) - } return nil }
diff --git a/restore.go b/restore.go index 2765e5f..81d338d 100644 --- a/restore.go +++ b/restore.go
@@ -116,7 +116,7 @@ } } - if err := fileutils.Copypath(dst, src); err != nil { + if err := fileutils.Copypath(dst, src, true); err != nil { return err }
diff --git a/update.go b/update.go index 5c13134..e1f261d 100644 --- a/update.go +++ b/update.go
@@ -106,7 +106,7 @@ dst := filepath.Join(vendorDir(), filepath.FromSlash(dep.Importpath)) src := filepath.Join(wc.Dir(), dep.Path) - if err := fileutils.Copypath(dst, src); err != nil { + if err := fileutils.Copypath(dst, src, true); err != nil { return err }