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, "