version: add a User-Agent to aid analytics on use of this tool

Change-Id: I31f823cd6679255bc3a6341b5e140a91027a2749
Reviewed-on: https://go-review.googlesource.com/34550
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/version/version.go b/version/version.go
index 968e650..e6e6ca4 100644
--- a/version/version.go
+++ b/version/version.go
@@ -28,6 +28,10 @@
 	"golang.org/x/build/envutil"
 )
 
+func init() {
+	http.DefaultTransport = &userAgentTransport{http.DefaultTransport}
+}
+
 // Run runs the "go" tool of the provided Go version.
 func Run(version string) {
 	log.SetFlags(0)
@@ -306,12 +310,12 @@
 		}
 	}()
 	c := &http.Client{
-		Transport: &http.Transport{
+		Transport: &userAgentTransport{&http.Transport{
 			// It's already compressed. Prefer accurate ContentLength.
 			// (Not that GCS would try to compress it, though)
 			DisableCompression: true,
 			DisableKeepAlives:  true,
-		},
+		}},
 	}
 	res, err := c.Get(srcURL)
 	if err != nil {
@@ -432,3 +436,17 @@
 	}
 	return true
 }
+
+type userAgentTransport struct {
+	rt http.RoundTripper
+}
+
+func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) {
+	version := runtime.Version()
+	if strings.Contains(version, "devel") {
+		// Strip the SHA hash and date. We don't want spaces or other tokens (see RFC2616 14.43)
+		version = "devel"
+	}
+	r.Header.Set("User-Agent", "golang-x-build-version/"+version)
+	return uat.rt.RoundTrip(r)
+}