|
|
|
@ -138,6 +138,19 @@ func CopyFile(dst, src string, mode os.FileMode) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GoTool returns the command that runs a go tool. This uses go from GOROOT instead of PATH
|
|
|
|
|
// so that go commands executed by build use the same version of Go as the 'host' that runs
|
|
|
|
|
// build code. e.g.
|
|
|
|
|
//
|
|
|
|
|
// /usr/lib/go-1.8/bin/go run build/ci.go ...
|
|
|
|
|
//
|
|
|
|
|
// runs using go 1.8 and invokes go 1.8 tools from the same GOROOT. This is also important
|
|
|
|
|
// because runtime.Version checks on the host should match the tools that are run.
|
|
|
|
|
func GoTool(tool string, args ...string) *exec.Cmd { |
|
|
|
|
args = append([]string{tool}, args...) |
|
|
|
|
return exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// ExpandPackagesNoVendor expands a cmd/go import path pattern, skipping
|
|
|
|
|
// vendored packages.
|
|
|
|
|
func ExpandPackagesNoVendor(patterns []string) []string { |
|
|
|
@ -148,8 +161,7 @@ func ExpandPackagesNoVendor(patterns []string) []string { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if expand { |
|
|
|
|
args := append([]string{"list"}, patterns...) |
|
|
|
|
cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) |
|
|
|
|
cmd := GoTool("list", patterns...) |
|
|
|
|
out, err := cmd.CombinedOutput() |
|
|
|
|
if err != nil { |
|
|
|
|
log.Fatalf("package listing failed: %v\n%s", err, string(out)) |
|
|
|
|