From eb14b2049f735e07f7256865c9333e9af45d3c49 Mon Sep 17 00:00:00 2001 From: Elliott Beach Date: Mon, 11 Sep 2017 10:13:31 -0500 Subject: [PATCH] add support for go1.8 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 c5e261ce..9ac9f63c 100644 --- a/cobra/cmd/helpers.go +++ b/cobra/cmd/helpers.go @@ -21,6 +21,7 @@ import ( "path/filepath" "strings" "text/template" + "os/exec" ) var cmdDirs = [...]string{"cmd", "cmds", "command", "commands"} @@ -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 {