vain/vain.go

81 lines
1.5 KiB
Go
Raw Normal View History

2016-02-15 01:10:14 -08:00
// Package vain implements a vanity service for use by the the go tool.
//
2016-02-16 23:27:53 -08:00
// The executable, cmd/vaind, is located in the respective subdirectory.
2016-02-11 11:57:16 -08:00
package vain
2016-02-07 23:54:55 -08:00
2016-02-16 20:06:44 -08:00
import (
"encoding/json"
"fmt"
)
2016-02-07 23:54:55 -08:00
type vcs int
const (
2016-02-15 01:10:14 -08:00
// Git is the default Vcs.
2016-02-07 23:54:55 -08:00
Git vcs = iota
2016-02-15 01:10:14 -08:00
// Hg is mercurial
2016-02-07 23:54:55 -08:00
Hg
2016-02-16 18:32:04 -08:00
// Svn
Svn
// Bazaar
Bzr
2016-02-07 23:54:55 -08:00
)
var vcss = [...]string{
"git",
"mercurial",
2016-02-16 18:32:04 -08:00
"svn",
"bazaar",
2016-02-07 23:54:55 -08:00
}
var labelToVcs = map[string]vcs{
"git": Git,
"mercurial": Hg,
"hg": Hg,
2016-02-16 18:32:04 -08:00
"svn": Svn,
"bazaar": Bzr,
2016-02-07 23:54:55 -08:00
}
// String returns the name of the vcs ("git", "mercurial", ...).
func (v vcs) String() string { return vcss[v] }
2016-02-15 01:10:14 -08:00
// Package stores the three pieces of information needed to create the meta
// tag. Two of these (Vcs and Repo) are stored explicitly, and the third is
// determined implicitly by the path POSTed to. For more information refer to
// the documentation for the go tool:
//
// https://golang.org/cmd/go/#hdr-Remote_import_paths
2016-02-08 00:14:30 -08:00
type Package struct {
2016-02-15 01:10:14 -08:00
//Vcs (version control system) supported: "git", "mercurial"
Vcs vcs `json:"vcs"`
// Repo: the remote repository url
2016-02-07 23:54:55 -08:00
Repo string `json:"repo"`
2016-02-15 01:10:14 -08:00
path string
2016-02-07 23:54:55 -08:00
}
2016-02-08 00:14:30 -08:00
func (p Package) String() string {
2016-02-07 23:54:55 -08:00
return fmt.Sprintf(
"<meta name=\"go-import\" content=\"%s %s %s\">",
2016-02-15 01:10:14 -08:00
p.path,
2016-02-07 23:54:55 -08:00
p.Vcs,
p.Repo,
)
}
2016-02-16 20:06:44 -08:00
func (p *Package) UnmarshalJSON(b []byte) (err error) {
pkg := struct {
Vcs string
Repo string
}{}
err = json.Unmarshal(b, &pkg)
if err != nil {
return err
}
p.Vcs, p.Repo = labelToVcs[pkg.Vcs], pkg.Repo
return nil
}