go/vcs: ignore "mod" VCS type
golang.org/x/tools/go/vcs is significantly behind the upstream cmd/go/internal/get code, and has no support for modules. It continues to implement mechanics for GOPATH mode only. This change is a minimal fix to get it to continue to work in the presence of the module mode-only "mod" VCS type (documented at https://golang.org/cmd/go/#hdr-Remote_import_paths) by effectively implementing IgnoreMod ModuleMode behavior. It is similar to issue golang/go#24751 and a small subset of CL 109340 that fixed it. This helps with module adoption by reducing the harm of adding the "mod" VCS type for vanity import paths, something that was meant to be backwards compatible. While here, also backport CL 14482 (the Token to RawToken change). Fixes golang/go#31845 Updates golang/go#24751 Change-Id: I0852f52cb9bda56879f923337c7f361df8412845 Reviewed-on: https://go-review.googlesource.com/c/tools/+/175219 Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
3b6f9c0030
commit
2d16b83fe9
|
@ -28,13 +28,16 @@ func charsetReader(charset string, input io.Reader) (io.Reader, error) {
|
||||||
|
|
||||||
// parseMetaGoImports returns meta imports from the HTML in r.
|
// parseMetaGoImports returns meta imports from the HTML in r.
|
||||||
// Parsing ends at the end of the <head> section or the beginning of the <body>.
|
// Parsing ends at the end of the <head> section or the beginning of the <body>.
|
||||||
|
//
|
||||||
|
// This copy of cmd/go/internal/vcs.parseMetaGoImports always operates
|
||||||
|
// in IgnoreMod ModuleMode.
|
||||||
func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) {
|
func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) {
|
||||||
d := xml.NewDecoder(r)
|
d := xml.NewDecoder(r)
|
||||||
d.CharsetReader = charsetReader
|
d.CharsetReader = charsetReader
|
||||||
d.Strict = false
|
d.Strict = false
|
||||||
var t xml.Token
|
var t xml.Token
|
||||||
for {
|
for {
|
||||||
t, err = d.Token()
|
t, err = d.RawToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF || len(imports) > 0 {
|
if err == io.EOF || len(imports) > 0 {
|
||||||
err = nil
|
err = nil
|
||||||
|
@ -55,6 +58,10 @@ func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if f := strings.Fields(attrValue(e.Attr, "content")); len(f) == 3 {
|
if f := strings.Fields(attrValue(e.Attr, "content")); len(f) == 3 {
|
||||||
|
// Ignore VCS type "mod", which is applicable only in module mode.
|
||||||
|
if f[1] == "mod" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
imports = append(imports, metaImport{
|
imports = append(imports, metaImport{
|
||||||
Prefix: f[0],
|
Prefix: f[0],
|
||||||
VCS: f[1],
|
VCS: f[1],
|
||||||
|
|
|
@ -116,6 +116,20 @@ var parseMetaGoImportsTests = []struct {
|
||||||
{"baz/quux", "git", "http://github.com/rsc/baz/quux"},
|
{"baz/quux", "git", "http://github.com/rsc/baz/quux"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
`<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
||||||
|
<meta name="go-import" content="foo/bar mod http://github.com/rsc/baz/quux">`,
|
||||||
|
[]metaImport{
|
||||||
|
{"foo/bar", "git", "https://github.com/rsc/foo/bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`<meta name="go-import" content="foo/bar mod http://github.com/rsc/baz/quux">
|
||||||
|
<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">`,
|
||||||
|
[]metaImport{
|
||||||
|
{"foo/bar", "git", "https://github.com/rsc/foo/bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
`<head>
|
`<head>
|
||||||
<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
||||||
|
@ -127,6 +141,21 @@ var parseMetaGoImportsTests = []struct {
|
||||||
<body>`,
|
<body>`,
|
||||||
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
`<!doctype html><meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">`,
|
||||||
|
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// XML doesn't like <div style=position:relative>.
|
||||||
|
`<!doctype html><title>Page Not Found</title><meta name=go-import content="chitin.io/chitin git https://github.com/chitin-io/chitin"><div style=position:relative>DRAFT</div>`,
|
||||||
|
[]metaImport{{"chitin.io/chitin", "git", "https://github.com/chitin-io/chitin"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`<meta name="go-import" content="myitcv.io git https://github.com/myitcv/x">
|
||||||
|
<meta name="go-import" content="myitcv.io/blah2 mod https://raw.githubusercontent.com/myitcv/pubx/master">
|
||||||
|
`,
|
||||||
|
[]metaImport{{"myitcv.io", "git", "https://github.com/myitcv/x"}},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseMetaGoImports(t *testing.T) {
|
func TestParseMetaGoImports(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue