mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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
2 changed files with 22 additions and 12 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue