commit
cda7bad625
3
README.md
Normal file
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# gopkg.in Stable APIs for the Go language
|
||||
|
||||
See [http://gopkg.in](http://gopkg.in).
|
14
main.go
14
main.go
@ -29,9 +29,6 @@ func main() {
|
||||
|
||||
func run() error {
|
||||
flag.Parse()
|
||||
//if len(flag.Args()) > 0 {
|
||||
// return fmt.Errorf("too many arguments: %s", flag.Args()[0])
|
||||
//}
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
|
||||
@ -68,11 +65,12 @@ go get {{.GopkgPath}}
|
||||
</html>
|
||||
`))
|
||||
|
||||
// Repo represents a source code repository on GitHub.
|
||||
type Repo struct {
|
||||
User string
|
||||
Name string
|
||||
SubPath string
|
||||
OldFormat bool
|
||||
OldFormat bool // The old /v2/pkg format.
|
||||
MajorVersion Version
|
||||
AllVersions VersionList
|
||||
}
|
||||
@ -91,12 +89,12 @@ func (repo *Repo) GopkgRoot() string {
|
||||
return repo.GopkgVersionRoot(repo.MajorVersion)
|
||||
}
|
||||
|
||||
// GopkgRoot returns the package path at gopkg.in, without a schema.
|
||||
// GopkgPath returns the package path at gopkg.in, without a schema.
|
||||
func (repo *Repo) GopkgPath() string {
|
||||
return repo.GopkgVersionRoot(repo.MajorVersion) + repo.SubPath
|
||||
}
|
||||
|
||||
// GopkgVerisonRoot returns the package root in gopkg.in for the
|
||||
// GopkgVersionRoot returns the package root in gopkg.in for the
|
||||
// provided version, without a schema.
|
||||
func (repo *Repo) GopkgVersionRoot(version Version) string {
|
||||
version.Minor = -1
|
||||
@ -222,8 +220,8 @@ var httpClient = &http.Client{Timeout: 10 * time.Second}
|
||||
|
||||
const refsSuffix = ".git/info/refs?service=git-upload-pack"
|
||||
|
||||
var ErrNoRepo = errors.New("repository not found in github")
|
||||
var ErrNoVersion = errors.New("version reference not found in github")
|
||||
var ErrNoRepo = errors.New("repository not found in GitHub")
|
||||
var ErrNoVersion = errors.New("version reference not found in GitHub")
|
||||
|
||||
func hackedRefs(repo *Repo) (data []byte, versions []Version, err error) {
|
||||
resp, err := httpClient.Get("https://" + repo.GitHubRoot() + refsSuffix)
|
||||
|
10
version.go
10
version.go
@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Version represents a version number.
|
||||
// An element that is not present is represented as -1.
|
||||
type Version struct {
|
||||
Major, Minor, Patch int
|
||||
}
|
||||
@ -21,6 +23,7 @@ func (v Version) String() string {
|
||||
return fmt.Sprintf("v%d.%d.%d", v.Major, v.Minor, v.Patch)
|
||||
}
|
||||
|
||||
// Less returns whether v is less than other.
|
||||
func (v Version) Less(other Version) bool {
|
||||
if v.Major != other.Major {
|
||||
return v.Major < other.Major
|
||||
@ -31,6 +34,12 @@ func (v Version) Less(other Version) bool {
|
||||
return v.Patch < other.Patch
|
||||
}
|
||||
|
||||
// Contains returns whether version v contains version other.
|
||||
// Version v is defined to contain version other when they both have the same Major
|
||||
// version and v.Minor and v.Patch are either undefined or are equal to other's.
|
||||
//
|
||||
// For example, Version{1, 1, -1} contains both Version{1, 1, -1} and Version{1, 1, 2},
|
||||
// but not Version{1, -1, -1} or Version{1, 2, -1}.
|
||||
func (v Version) Contains(other Version) bool {
|
||||
if v.Patch != -1 {
|
||||
return v == other
|
||||
@ -45,6 +54,7 @@ func (v Version) IsValid() bool {
|
||||
return v != InvalidVersion
|
||||
}
|
||||
|
||||
// InvalidVersion represents a version that can't be parsed.
|
||||
var InvalidVersion = Version{-1, -1, -1}
|
||||
|
||||
func parseVersion(s string) (Version, bool) {
|
||||
|
@ -1,8 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
. "launchpad.net/gocheck"
|
||||
"testing"
|
||||
|
||||
. "gopkg.in/check.v1"
|
||||
)
|
||||
|
||||
func Test(t *testing.T) { TestingT(t) }
|
||||
|
Loading…
Reference in New Issue
Block a user