diff --git a/go_import.go b/go_import.go index d4f1594..810bebf 100644 --- a/go_import.go +++ b/go_import.go @@ -10,6 +10,12 @@ import ( "golang.org/x/net/html" ) +// metaImport represents the parsed tags from HTML files. +type metaImport struct { + Prefix, VCS, RepoRoot string +} + func detectGoImport(u *url.URL) (string, *url.URL, error) { goGetU, _ := url.Parse(u.String()) // clone q := goGetU.Query() @@ -42,11 +48,11 @@ func detectVCSAndRepoURL(r io.Reader) (string, *url.URL, error) { return "", nil, err } - var goImportContent string + var mImport *metaImport var f func(*html.Node) f = func(n *html.Node) { - if goImportContent != "" { + if mImport != nil { return } if n.Type == html.ElementNode && n.Data == "meta" { @@ -63,8 +69,12 @@ func detectVCSAndRepoURL(r io.Reader) (string, *url.URL, error) { content = a.Val } } - if goImportMeta && content != "" { - goImportContent = content + if f := strings.Fields(content); goImportMeta && len(f) == 3 && f[1] != "mod" { + mImport = &metaImport{ + Prefix: f[0], + VCS: f[1], + RepoRoot: f[2], + } } } for c := n.FirstChild; c != nil; c = c.NextSibling { @@ -73,13 +83,12 @@ func detectVCSAndRepoURL(r io.Reader) (string, *url.URL, error) { } f(doc) - stuffs := strings.Fields(goImportContent) - if len(stuffs) < 3 { + if mImport == nil { return "", nil, fmt.Errorf("no go-import meta tags detected") } - u, err := url.Parse(stuffs[2]) + u, err := url.Parse(mImport.RepoRoot) if err != nil { return "", nil, err } - return stuffs[1], u, nil + return mImport.VCS, u, nil } diff --git a/go_import_test.go b/go_import_test.go index 0d2cd8e..54ebc23 100644 --- a/go_import_test.go +++ b/go_import_test.go @@ -8,6 +8,7 @@ import ( func TestDetectVCSAndRepoURL(t *testing.T) { input := ` +