From e7911ad9ea38eaf8707b7247a5ac96bc81de856c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 23 Mar 2017 15:46:03 +0100 Subject: build: unify vendor skipping logic This fixes a recent bug where 'make geth' built everything instead of just geth. --- internal/build/util.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'internal/build/util.go') diff --git a/internal/build/util.go b/internal/build/util.go index 4df7b9138..44f6760b9 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -26,6 +26,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strings" "text/template" ) @@ -136,3 +137,30 @@ func CopyFile(dst, src string, mode os.FileMode) { log.Fatal(err) } } + +// ExpandPackagesNoVendor expands a cmd/go import path pattern, skipping +// vendored packages. +func ExpandPackagesNoVendor(patterns []string) []string { + expand := false + for _, pkg := range patterns { + if strings.Contains(pkg, "...") { + expand = true + } + } + if expand { + args := append([]string{"list"}, patterns...) + cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) + out, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("package listing failed: %v\n%s", err, string(out)) + } + var packages []string + for _, line := range strings.Split(string(out), "\n") { + if !strings.Contains(line, "/vendor/") { + packages = append(packages, strings.TrimSpace(line)) + } + } + return packages + } + return patterns +} -- cgit v1.2.3