cmd/go/internal/modfetch: disable network with -tags cmd_go_bootstrap

The bootstrap copy of cmd/go can't use net/http.
Make that easy.

Change-Id: Idf01bf37a773ae46e2e5d729ea3f7cd24e1111d1
Reviewed-on: https://go-review.googlesource.com/118315
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/vendor/cmd/go/internal/modfetch/domain.go b/vendor/cmd/go/internal/modfetch/domain.go
index 6e7b327..2494f80 100644
--- a/vendor/cmd/go/internal/modfetch/domain.go
+++ b/vendor/cmd/go/internal/modfetch/domain.go
@@ -16,7 +16,6 @@
 
 	"cmd/go/internal/modfetch/codehost"
 	"cmd/go/internal/modfetch/gitrepo"
-	web "cmd/go/internal/web2"
 )
 
 // metaImport represents the parsed <meta name="go-import"
@@ -34,11 +33,7 @@
 		return nil, fmt.Errorf("unknown module %s: not a domain name", path)
 	}
 	var body io.ReadCloser
-	err := web.Get(
-		"https://"+path+"?go-get=1",
-		web.Non200OK(),
-		web.Body(&body),
-	)
+	err := webGetGoGet("https://"+path+"?go-get=1", &body)
 	if body != nil {
 		defer body.Close()
 	}
diff --git a/vendor/cmd/go/internal/modfetch/noweb.go b/vendor/cmd/go/internal/modfetch/noweb.go
new file mode 100644
index 0000000..9d713dc
--- /dev/null
+++ b/vendor/cmd/go/internal/modfetch/noweb.go
@@ -0,0 +1,24 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build cmd_go_bootstrap
+
+package modfetch
+
+import (
+	"fmt"
+	"io"
+)
+
+func webGetGoGet(url string, body *io.ReadCloser) error {
+	return fmt.Errorf("no network in go_bootstrap")
+}
+
+func webGetBytes(url string, body *[]byte) error {
+	return fmt.Errorf("no network in go_bootstrap")
+}
+
+func webGetBody(url string, body *io.ReadCloser) error {
+	return fmt.Errorf("no network in go_bootstrap")
+}
diff --git a/vendor/cmd/go/internal/modfetch/proxy.go b/vendor/cmd/go/internal/modfetch/proxy.go
index 089883d..419323b 100644
--- a/vendor/cmd/go/internal/modfetch/proxy.go
+++ b/vendor/cmd/go/internal/modfetch/proxy.go
@@ -16,7 +16,6 @@
 
 	"cmd/go/internal/modfetch/codehost"
 	"cmd/go/internal/semver"
-	web "cmd/go/internal/web2"
 )
 
 var proxyURL = os.Getenv("GOPROXY")
@@ -45,7 +44,7 @@
 
 func (p *proxyRepo) Versions(prefix string) ([]string, error) {
 	var data []byte
-	err := web.Get(p.url+"/@v/list", web.ReadAllBody(&data))
+	err := webGetBytes(p.url+"/@v/list", &data)
 	if err != nil {
 		return nil, err
 	}
@@ -61,7 +60,7 @@
 
 func (p *proxyRepo) latest() (*RevInfo, error) {
 	var data []byte
-	err := web.Get(p.url+"/@v/list", web.ReadAllBody(&data))
+	err := webGetBytes(p.url+"/@v/list", &data)
 	if err != nil {
 		return nil, err
 	}
@@ -91,7 +90,7 @@
 
 func (p *proxyRepo) Stat(rev string) (*RevInfo, error) {
 	var data []byte
-	err := web.Get(p.url+"/@v/"+pathEscape(rev)+".info", web.ReadAllBody(&data))
+	err := webGetBytes(p.url+"/@v/"+pathEscape(rev)+".info", &data)
 	if err != nil {
 		return nil, err
 	}
@@ -105,7 +104,7 @@
 func (p *proxyRepo) Latest() (*RevInfo, error) {
 	var data []byte
 	u := p.url + "/@latest"
-	err := web.Get(u, web.ReadAllBody(&data))
+	err := webGetBytes(u, &data)
 	if err != nil {
 		// TODO return err if not 404
 		return p.latest()
@@ -119,7 +118,7 @@
 
 func (p *proxyRepo) GoMod(version string) ([]byte, error) {
 	var data []byte
-	err := web.Get(p.url+"/@v/"+pathEscape(version)+".mod", web.ReadAllBody(&data))
+	err := webGetBytes(p.url+"/@v/"+pathEscape(version)+".mod", &data)
 	if err != nil {
 		return nil, err
 	}
@@ -128,7 +127,7 @@
 
 func (p *proxyRepo) Zip(version string, tmpdir string) (tmpfile string, err error) {
 	var body io.ReadCloser
-	err = web.Get(p.url+"/@v/"+pathEscape(version)+".zip", web.Body(&body))
+	err = webGetBody(p.url+"/@v/"+pathEscape(version)+".zip", &body)
 	if err != nil {
 		return "", err
 	}
diff --git a/vendor/cmd/go/internal/modfetch/web.go b/vendor/cmd/go/internal/modfetch/web.go
new file mode 100644
index 0000000..b327bf2
--- /dev/null
+++ b/vendor/cmd/go/internal/modfetch/web.go
@@ -0,0 +1,31 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !cmd_go_bootstrap
+
+package modfetch
+
+import (
+	"io"
+
+	web "cmd/go/internal/web2"
+)
+
+// webGetGoGet fetches a go-get=1 URL and returns the body in *body.
+// It allows non-200 responses, as usual for these URLs.
+func webGetGoGet(url string, body *io.ReadCloser) error {
+	return web.Get(url, web.Non200OK(), web.Body(body))
+}
+
+// webGetBytes returns the body returned by an HTTP GET, as a []byte.
+// It insists on a 200 response.
+func webGetBytes(url string, body *[]byte) error {
+	return web.Get(url, web.ReadAllBody(body))
+}
+
+// webGetBody returns the body returned by an HTTP GET, as a io.ReadCloser.
+// It insists on a 200 response.
+func webGetBody(url string, body *io.ReadCloser) error {
+	return web.Get(url, web.Body(body))
+}