From e5f66de850af3302fbe378c8acded2b0fa55472c Mon Sep 17 00:00:00 2001 From: Elliott Beach Date: Fri, 29 Sep 2017 11:16:12 -0500 Subject: [PATCH] Support default value of $GOPATH (#532) Add support for go1.8 of blank $GOPATH --- cobra/cmd/helpers.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/cobra/cmd/helpers.go b/cobra/cmd/helpers.go index c5e261c..e5b37ec 100644 --- a/cobra/cmd/helpers.go +++ b/cobra/cmd/helpers.go @@ -18,6 +18,7 @@ import ( "fmt" "io" "os" + "os/exec" "path/filepath" "strings" "text/template" @@ -31,7 +32,27 @@ func init() { envGoPath := os.Getenv("GOPATH") goPaths := filepath.SplitList(envGoPath) if len(goPaths) == 0 { - er("$GOPATH is not set") + // Adapted from https://github.com/Masterminds/glide/pull/798/files. + // As of Go 1.8 the GOPATH is no longer required to be set. Instead there + // is a default value. If there is no GOPATH check for the default value. + // Note, checking the GOPATH first to avoid invoking the go toolchain if + // possible. + + goExecutable := os.Getenv("COBRA_GO_EXECUTABLE") + if len(goExecutable) <= 0 { + goExecutable = "go" + } + + out, err := exec.Command(goExecutable, "env", "GOPATH").Output() + if err != nil { + er(err) + } + + toolchainGoPath := strings.TrimSpace(string(out)) + goPaths = filepath.SplitList(toolchainGoPath) + if len(goPaths) == 0 { + er("$GOPATH is not set") + } } srcPaths = make([]string, 0, len(goPaths)) for _, goPath := range goPaths {