package main import ( "context" "fmt" "html" "path" "regexp" "strings" ) func getRepoURLForGopkg(gopkg string) (string, error) { info, err := getPkgsiteInfo(context.TODO(), gopkg) if err != nil { return "", err } repoURL := strings.TrimSpace(info.Module.RepoURL) if repoURL == "" { return "", fmt.Errorf("pkgsite module %q has no repository URL", info.Module.Path) } return gitCloneURLFromRepoURL(repoURL), nil } var ( htmlTagRegexp = regexp.MustCompile(`<[^>]*>`) markdownImageRegex = regexp.MustCompile(`!\[[^\]]*\]\([^)]+\)`) markdownLinkRegex = regexp.MustCompile(`\[([^\]]+)\]\([^)]+\)`) packagePrefixRegex = regexp.MustCompile(`^Package\s+\S+\s+`) ) // cleanSummaryCandidate turns a godoc synopsis or README line into an // RPM-style Summary by stripping markup, keeping the first sentence, dropping // the leading "Package foo" convention, and capitalizing the result. func cleanSummaryCandidate(summary string) string { summary = html.UnescapeString(strings.TrimSpace(summary)) summary = markdownImageRegex.ReplaceAllString(summary, "") summary = markdownLinkRegex.ReplaceAllString(summary, "$1") summary = htmlTagRegexp.ReplaceAllString(summary, " ") summary = strings.ReplaceAll(summary, "`", "") summary = strings.Join(strings.Fields(summary), " ") summary = strings.Trim(summary, " \t\n\r#*-_") if end := strings.Index(summary, ". "); end >= 0 { summary = summary[:end] } summary = packagePrefixRegex.ReplaceAllString(summary, "") if summary != "" && summary[0] >= 'a' && summary[0] <= 'z' { summary = string(summary[0]-('a'-'A')) + summary[1:] } if summary == "" || strings.HasPrefix(summary, "[!") || strings.HasPrefix(summary, "![") || strings.HasPrefix(summary, "