100 lines
1.7 KiB
Go
100 lines
1.7 KiB
Go
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
|
|
}
|