mirror of
https://github.com/golang/go
synced 2024-11-22 20:50:05 -07:00
cmd/go/internal/bug: use envcmd instead of go env
Add the printGoEnv function to print the go environment variables, using the envcmd package instead of invoking go env. Add the PrintEnv function to the envcmd package, to avoid duplicating code. Updates #45803 Change-Id: I38d5b936c0ebb16e741ffbee4309b95d6d0ecc6c Reviewed-on: https://go-review.googlesource.com/c/go/+/314230 Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Michael Matloob <matloob@golang.org> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
5c69cb2a5b
commit
12af403624
@ -20,6 +20,7 @@ import (
|
|||||||
|
|
||||||
"cmd/go/internal/base"
|
"cmd/go/internal/base"
|
||||||
"cmd/go/internal/cfg"
|
"cmd/go/internal/cfg"
|
||||||
|
"cmd/go/internal/envcmd"
|
||||||
"cmd/go/internal/web"
|
"cmd/go/internal/web"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -90,17 +91,20 @@ func printEnvDetails(w io.Writer) {
|
|||||||
fmt.Fprintf(w, "### What operating system and processor architecture are you using (`go env`)?\n\n")
|
fmt.Fprintf(w, "### What operating system and processor architecture are you using (`go env`)?\n\n")
|
||||||
fmt.Fprintf(w, "<details><summary><code>go env</code> Output</summary><br><pre>\n")
|
fmt.Fprintf(w, "<details><summary><code>go env</code> Output</summary><br><pre>\n")
|
||||||
fmt.Fprintf(w, "$ go env\n")
|
fmt.Fprintf(w, "$ go env\n")
|
||||||
goexe, err := os.Executable()
|
printGoEnv(w)
|
||||||
if err != nil {
|
|
||||||
goexe = filepath.Join(runtime.GOROOT(), "bin/go")
|
|
||||||
}
|
|
||||||
printCmdOut(w, "", goexe, "env")
|
|
||||||
printGoDetails(w)
|
printGoDetails(w)
|
||||||
printOSDetails(w)
|
printOSDetails(w)
|
||||||
printCDetails(w)
|
printCDetails(w)
|
||||||
fmt.Fprintf(w, "</pre></details>\n\n")
|
fmt.Fprintf(w, "</pre></details>\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printGoEnv(w io.Writer) {
|
||||||
|
env := envcmd.MkEnv()
|
||||||
|
env = append(env, envcmd.ExtraEnvVars()...)
|
||||||
|
env = append(env, envcmd.ExtraEnvVarsCostly()...)
|
||||||
|
envcmd.PrintEnv(w, env)
|
||||||
|
}
|
||||||
|
|
||||||
func printGoDetails(w io.Writer) {
|
func printGoDetails(w io.Writer) {
|
||||||
printCmdOut(w, "GOROOT/bin/go version: ", filepath.Join(runtime.GOROOT(), "bin/go"), "version")
|
printCmdOut(w, "GOROOT/bin/go version: ", filepath.Join(runtime.GOROOT(), "bin/go"), "version")
|
||||||
printCmdOut(w, "GOROOT/bin/go tool compile -V: ", filepath.Join(runtime.GOROOT(), "bin/go"), "tool", "compile", "-V")
|
printCmdOut(w, "GOROOT/bin/go tool compile -V: ", filepath.Join(runtime.GOROOT(), "bin/go"), "tool", "compile", "-V")
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/build"
|
"go/build"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
@ -347,27 +348,32 @@ func runEnv(ctx context.Context, cmd *base.Command, args []string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrintEnv(os.Stdout, env)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrintEnv prints the environment variables to w.
|
||||||
|
func PrintEnv(w io.Writer, env []cfg.EnvVar) {
|
||||||
for _, e := range env {
|
for _, e := range env {
|
||||||
if e.Name != "TERM" {
|
if e.Name != "TERM" {
|
||||||
switch runtime.GOOS {
|
switch runtime.GOOS {
|
||||||
default:
|
default:
|
||||||
fmt.Printf("%s=\"%s\"\n", e.Name, e.Value)
|
fmt.Fprintf(w, "%s=\"%s\"\n", e.Name, e.Value)
|
||||||
case "plan9":
|
case "plan9":
|
||||||
if strings.IndexByte(e.Value, '\x00') < 0 {
|
if strings.IndexByte(e.Value, '\x00') < 0 {
|
||||||
fmt.Printf("%s='%s'\n", e.Name, strings.ReplaceAll(e.Value, "'", "''"))
|
fmt.Fprintf(w, "%s='%s'\n", e.Name, strings.ReplaceAll(e.Value, "'", "''"))
|
||||||
} else {
|
} else {
|
||||||
v := strings.Split(e.Value, "\x00")
|
v := strings.Split(e.Value, "\x00")
|
||||||
fmt.Printf("%s=(", e.Name)
|
fmt.Fprintf(w, "%s=(", e.Name)
|
||||||
for x, s := range v {
|
for x, s := range v {
|
||||||
if x > 0 {
|
if x > 0 {
|
||||||
fmt.Printf(" ")
|
fmt.Fprintf(w, " ")
|
||||||
}
|
}
|
||||||
fmt.Printf("%s", s)
|
fmt.Fprintf(w, "%s", s)
|
||||||
}
|
}
|
||||||
fmt.Printf(")\n")
|
fmt.Fprintf(w, ")\n")
|
||||||
}
|
}
|
||||||
case "windows":
|
case "windows":
|
||||||
fmt.Printf("set %s=%s\n", e.Name, e.Value)
|
fmt.Fprintf(w, "set %s=%s\n", e.Name, e.Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user