package main import ( "fmt" "html/template" "log" "net/http" "os" "sort" ) const packageTemplateString = ` {{.Repo.PackageName}}.{{.Repo.MajorVersion}}{{.Repo.SubPath}} - {{.Repo.GopkgPath}}

Getting started

To get the package, execute:

go get {{.Repo.GopkgPath}}

To import this package, add the following line to your code:

import "{{.Repo.GopkgPath}}"
{{if .CleanPackageName}}

Refer to it as {{.Repo.PackageName}}.{{end}}

For more details, see the API documentation.

Versions

{{ if .LatestVersions }} {{ range .LatestVersions }}
v{{.Major}}{{.}}
{{ end }} {{ else }}
v0master
{{ end }}
` var packageTemplate *template.Template func gopkgVersionRoot(repo *Repo, version Version) string { return repo.GopkgVersionRoot(version) } var packageFuncs = template.FuncMap{ "gopkgVersionRoot": gopkgVersionRoot, } func init() { var err error packageTemplate, err = template.New("page").Funcs(packageFuncs).Parse(packageTemplateString) if err != nil { fmt.Fprintf(os.Stderr, "fatal: parsing package template failed: %s\n", err) os.Exit(1) } } type packageData struct { Repo *Repo LatestVersions VersionList // Contains only the latest version for each major FullVersion Version // Version that the major requested resolves to CleanPackageName bool } func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) { data := &packageData{ Repo: repo, } latestVersionsMap := make(map[int]Version) for _, v := range repo.AllVersions { v2, exists := latestVersionsMap[v.Major] if !exists || v2.Less(v) { latestVersionsMap[v.Major] = v } } data.FullVersion = latestVersionsMap[repo.MajorVersion.Major] data.LatestVersions = make(VersionList, 0, len(latestVersionsMap)) for _, v := range latestVersionsMap { data.LatestVersions = append(data.LatestVersions, v) } sort.Sort(sort.Reverse(data.LatestVersions)) data.CleanPackageName = true for i, c := range repo.PackageName { if c < 'a' || c > 'z' { if i == 0 || c != '_' && (c < '0' || c > '9') { data.CleanPackageName = false break } } } err := packageTemplate.Execute(resp, data) if err != nil { log.Printf("error executing tmplPackage: %s\n", err) } }