Sync team repos task and db func
This commit is contained in:
parent
86e7b499b4
commit
6e498953bd
|
@ -67,3 +67,34 @@ func SaveTeamMembers(orgID, teamID uint64, members []uint64) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SaveTeamRepos(orgID, teamID uint64, repos []uint64) {
|
||||||
|
defer measure("SaveTeamRepos", time.Now())
|
||||||
|
tx := db.MustBegin()
|
||||||
|
|
||||||
|
var ids = []string{}
|
||||||
|
for _, id := range repos {
|
||||||
|
ids = append(ids, strconv.FormatUint(id, 10))
|
||||||
|
}
|
||||||
|
tx.MustExec(fmt.Sprintf(`
|
||||||
|
delete from team_repos
|
||||||
|
where
|
||||||
|
org_id = %d and
|
||||||
|
team_id = %d and
|
||||||
|
repo_id not in (%s)
|
||||||
|
`, orgID, teamID, strings.Join(ids, ", ")))
|
||||||
|
|
||||||
|
var values = []string{}
|
||||||
|
for _, id := range repos {
|
||||||
|
values = append(values, fmt.Sprintf("(%d, %d, %d)", orgID, teamID, id))
|
||||||
|
}
|
||||||
|
tx.MustExec(`
|
||||||
|
insert into team_repos (org_id, team_id, repo_id)
|
||||||
|
values ` + strings.Join(values, ", ") + `
|
||||||
|
on duplicate key update org_id = org_id
|
||||||
|
`)
|
||||||
|
|
||||||
|
if err := tx.Commit(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
28
task/sync.go
28
task/sync.go
|
@ -128,6 +128,7 @@ func SyncOrgTeams(token string, org *db.Org) (err error) {
|
||||||
OrgID: org.ID,
|
OrgID: org.ID,
|
||||||
}
|
}
|
||||||
go SyncTeamMembers(token, t)
|
go SyncTeamMembers(token, t)
|
||||||
|
go SyncTeamRepos(token, t)
|
||||||
t.Save()
|
t.Save()
|
||||||
}
|
}
|
||||||
if opt.Page >= resp.LastPage {
|
if opt.Page >= resp.LastPage {
|
||||||
|
@ -192,3 +193,30 @@ func SyncTeamMembers(token string, team *db.Team) (err error) {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SyncTeamRepos(token string, team *db.Team) (err error) {
|
||||||
|
defer report("SyncTeamRepos", time.Now())
|
||||||
|
client := newGithubClient(token)
|
||||||
|
opt := &github.ListOptions{PerPage: 100}
|
||||||
|
|
||||||
|
var ids = []uint64{}
|
||||||
|
for {
|
||||||
|
opt.Page++
|
||||||
|
var repos []github.Repository
|
||||||
|
var resp *github.Response
|
||||||
|
if repos, resp, err = client.Organizations.ListTeamRepos(int(team.ID), opt); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
saveResponseMeta(token, resp)
|
||||||
|
|
||||||
|
for _, repo := range repos {
|
||||||
|
ids = append(ids, uint64(*repo.ID))
|
||||||
|
}
|
||||||
|
if opt.Page >= resp.LastPage {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db.SaveTeamRepos(team.OrgID, team.ID, ids)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue