aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLE Manh Cuong <cuong.manhle.vn@gmail.com>2018-07-31 01:11:32 +0700
committerBryan C. Mills <bcmills@google.com>2018-08-06 14:12:24 +0000
commit870e12d7bfaea70fb0d743842f5864eb059cb939 (patch)
tree2c8603f9adff6ffcd79e50d4d93f5298bcf8ad37
parent5a720d229d5ebc2f8b599aa54a3d807a1d54365f (diff)
downloadgo-870e12d7bfaea70fb0d743842f5864eb059cb939.tar.gz
go-870e12d7bfaea70fb0d743842f5864eb059cb939.zip
cmd/go: fix go get fail when GIT_TRACE set
GIT_TRACE write message to stderr, while run1 merge both stdout and stderr. So function which call run1 and rely on its output will failed to parse the result when run1 success. By using cmd.Output(), we ensure only cmd standard out is returned. Fixes #19682 Change-Id: I7002df17fe68aea1860ddc7382c68cc23548bd90 Reviewed-on: https://go-review.googlesource.com/126735 Reviewed-by: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r--src/cmd/go/internal/get/vcs.go16
-rw-r--r--src/cmd/go/testdata/script/get_with_git_trace.txt7
2 files changed, 14 insertions, 9 deletions
diff --git a/src/cmd/go/internal/get/vcs.go b/src/cmd/go/internal/get/vcs.go
index a4fd28e2a4..5cd164f2ff 100644
--- a/src/cmd/go/internal/get/vcs.go
+++ b/src/cmd/go/internal/get/vcs.go
@@ -5,7 +5,6 @@
package get
import (
- "bytes"
"encoding/json"
"errors"
"fmt"
@@ -428,19 +427,18 @@ func (v *vcsCmd) run1(dir string, cmdline string, keyval []string, verbose bool)
fmt.Printf("cd %s\n", dir)
fmt.Printf("%s %s\n", v.cmd, strings.Join(args, " "))
}
- var buf bytes.Buffer
- cmd.Stdout = &buf
- cmd.Stderr = &buf
- err = cmd.Run()
- out := buf.Bytes()
+ out, err := cmd.Output()
if err != nil {
if verbose || cfg.BuildV {
fmt.Fprintf(os.Stderr, "# cd %s; %s %s\n", dir, v.cmd, strings.Join(args, " "))
- os.Stderr.Write(out)
+ if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 {
+ os.Stderr.Write(ee.Stderr)
+ } else {
+ fmt.Fprintf(os.Stderr, err.Error())
+ }
}
- return out, err
}
- return out, nil
+ return out, err
}
// ping pings to determine scheme to use.
diff --git a/src/cmd/go/testdata/script/get_with_git_trace.txt b/src/cmd/go/testdata/script/get_with_git_trace.txt
new file mode 100644
index 0000000000..93341a302c
--- /dev/null
+++ b/src/cmd/go/testdata/script/get_with_git_trace.txt
@@ -0,0 +1,7 @@
+env GIT_TRACE=1
+
+[!net] skip
+[!exec:git] skip
+
+# go get should be success when GIT_TRACE set
+go get golang.org/x/text