Index: src/cmd/go/build.go |
=================================================================== |
--- a/src/cmd/go/build.go |
+++ b/src/cmd/go/build.go |
@@ -1237,7 +1237,7 @@ |
func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...interface{}) ([]byte, error) { |
cmdline := stringList(cmdargs...) |
if buildN || buildX { |
- b.showcmd(dir, "%s", strings.Join(cmdline, " ")) |
+ b.showcmd(dir, "%s", joinUnambiguously(cmdline)) |
if buildN { |
return nil, nil |
} |
@@ -1304,6 +1304,24 @@ |
} |
} |
+// joinUnambiguously prints the slice, quoting where necessary to make the |
+// output unambiguous. |
+func joinUnambiguously(a []string) string { |
r
2013/04/12 20:59:27
that's a mouthful yet still not quite right. meh.
|
+ var buf bytes.Buffer |
+ for i, s := range a { |
+ if i > 0 { |
+ buf.WriteByte(' ') |
+ } |
+ q := strconv.Quote(s) |
+ if s == "" || strings.Contains(s, " ") || len(q) > len(s)+2 { |
+ buf.WriteString(q) |
+ } else { |
+ buf.WriteString(s) |
+ } |
+ } |
+ return buf.String() |
+} |
+ |
// mkdir makes the named directory. |
func (b *builder) mkdir(dir string) error { |
b.exec.Lock() |