mirror of
https://github.com/golang/go
synced 2024-11-23 16:40:03 -07:00
cmd/go: fix bug in remote package discovery
The parser was assuming it would find <body> or </head>. If the entire response is just <meta> tags, it finds EOF and treats that as an error. It's not. LGTM=bradfitz R=bradfitz CC=golang-codereviews https://golang.org/cl/68520044
This commit is contained in:
parent
fd4b4b56c4
commit
441c4bb939
@ -43,6 +43,9 @@ func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) {
|
||||
for {
|
||||
t, err = d.Token()
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
err = nil
|
||||
}
|
||||
return
|
||||
}
|
||||
if e, ok := t.(xml.StartElement); ok && strings.EqualFold(e.Name.Local, "body") {
|
||||
|
@ -4,7 +4,11 @@
|
||||
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var foldDupTests = []struct {
|
||||
list []string
|
||||
@ -25,3 +29,45 @@ func TestFoldDup(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var parseMetaGoImportsTests = []struct {
|
||||
in string
|
||||
out []metaImport
|
||||
}{
|
||||
{
|
||||
`<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">`,
|
||||
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
||||
},
|
||||
{
|
||||
`<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
||||
<meta name="go-import" content="baz/quux git http://github.com/rsc/baz/quux">`,
|
||||
[]metaImport{
|
||||
{"foo/bar", "git", "https://github.com/rsc/foo/bar"},
|
||||
{"baz/quux", "git", "http://github.com/rsc/baz/quux"},
|
||||
},
|
||||
},
|
||||
{
|
||||
`<head>
|
||||
<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
||||
</head>`,
|
||||
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
||||
},
|
||||
{
|
||||
`<meta name="go-import" content="foo/bar git https://github.com/rsc/foo/bar">
|
||||
<body>`,
|
||||
[]metaImport{{"foo/bar", "git", "https://github.com/rsc/foo/bar"}},
|
||||
},
|
||||
}
|
||||
|
||||
func TestParseMetaGoImports(t *testing.T) {
|
||||
for i, tt := range parseMetaGoImportsTests {
|
||||
out, err := parseMetaGoImports(strings.NewReader(tt.in))
|
||||
if err != nil {
|
||||
t.Errorf("test#%d: %v", i, err)
|
||||
continue
|
||||
}
|
||||
if !reflect.DeepEqual(out, tt.out) {
|
||||
t.Errorf("test#%d:\n\thave %q\n\twant %q", i, out, tt.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user