Basic Github client
This commit is contained in:
parent
307d096865
commit
b199c8a168
|
@ -0,0 +1,99 @@
|
|||
package github
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"code.google.com/p/goauth2/oauth"
|
||||
gh "github.com/google/go-github/github"
|
||||
"github.com/localhots/steward/steward"
|
||||
)
|
||||
|
||||
const (
|
||||
DEFAULT_PER_PAGE = 30
|
||||
)
|
||||
|
||||
type (
|
||||
GithubClient struct {
|
||||
owner string
|
||||
client *gh.Client
|
||||
}
|
||||
)
|
||||
|
||||
func New(clientID, clientSecret, owner string) *GithubClient {
|
||||
// Auth here
|
||||
return nil
|
||||
}
|
||||
|
||||
// Temp method
|
||||
func NewClient(token, owner string) *GithubClient {
|
||||
trans := &oauth.Transport{
|
||||
Token: &oauth.Token{AccessToken: token},
|
||||
}
|
||||
|
||||
return &GithubClient{
|
||||
owner: owner,
|
||||
client: gh.NewClient(trans.Client()),
|
||||
}
|
||||
}
|
||||
|
||||
func (c *GithubClient) ListRepos() []string {
|
||||
var (
|
||||
names = []string{}
|
||||
opt = &gh.RepositoryListByOrgOptions{
|
||||
ListOptions: gh.ListOptions{},
|
||||
}
|
||||
)
|
||||
|
||||
fmt.Print("Loading repositories ")
|
||||
for {
|
||||
fmt.Print(".")
|
||||
opt.Page++
|
||||
repos, _, err := c.client.Repositories.ListByOrg(c.owner, opt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _, repo := range repos {
|
||||
names = append(names, *repo.Name)
|
||||
}
|
||||
|
||||
if len(repos) < DEFAULT_PER_PAGE {
|
||||
break
|
||||
}
|
||||
}
|
||||
fmt.Print("\n")
|
||||
|
||||
return names
|
||||
}
|
||||
|
||||
func (c *GithubClient) ListCommits(repo string) map[string]*steward.Commit {
|
||||
var (
|
||||
history = map[string]*steward.Commit{}
|
||||
opt = &gh.CommitsListOptions{}
|
||||
)
|
||||
|
||||
fmt.Print(repo, " ")
|
||||
for {
|
||||
fmt.Print(".")
|
||||
commits, _, err := c.client.Repositories.ListCommits(c.owner, repo, opt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _, c := range commits {
|
||||
history[*c.SHA] = &steward.Commit{
|
||||
Repo: repo,
|
||||
Author: *c.Author.Login,
|
||||
Timestamp: *c.Commit.Author.Date,
|
||||
}
|
||||
opt.Until = *c.Commit.Author.Date
|
||||
}
|
||||
|
||||
if len(commits) < DEFAULT_PER_PAGE {
|
||||
break
|
||||
}
|
||||
}
|
||||
fmt.Print("\n")
|
||||
|
||||
return history
|
||||
}
|
Loading…
Reference in New Issue