/
pull_request.go
89 lines (70 loc) · 1.84 KB
/
pull_request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package deep
import (
"context"
"database/sql"
"github.com/src-d/ghsync/models"
"github.com/google/go-github/github"
"gopkg.in/src-d/go-kallax.v1"
"gopkg.in/src-d/go-log.v1"
"gopkg.in/src-d/go-queue.v1"
)
type PullRequestSyncer struct {
s *models.PullRequestStore
c *github.Client
}
func NewPullRequestSyncer(db *sql.DB, c *github.Client) *PullRequestSyncer {
return &PullRequestSyncer{
s: models.NewPullRequestStore(db),
c: c,
}
}
func (s *PullRequestSyncer) QueueRepository(q queue.Queue, owner, repo string) error {
opts := &github.PullRequestListOptions{}
opts.ListOptions.PerPage = listOptionsPerPage
opts.State = "all"
logger := log.New(log.Fields{"type": PullRequestSyncTask, "owner": owner, "repo": repo})
logger.Infof("starting to publish queue jobs")
for {
requests, r, err := s.c.PullRequests.List(context.TODO(), owner, repo, opts)
if err != nil {
return err
}
for _, r := range requests {
j, err := NewPullRequestSyncJob(owner, repo, r.GetNumber())
if err != nil {
return err
}
l := logger.With(log.Fields{"pull-request": r.GetNumber()})
l.Debugf("queue request")
if err := q.Publish(j); err != nil {
l.Errorf(err, "publishing job")
return nil
}
}
if r.NextPage == 0 {
break
}
opts.Page = r.NextPage
}
logger.Infof("finished to publish queue jobs")
return nil
}
func (s *PullRequestSyncer) Sync(owner string, repo string, number int) error {
pr, _, err := s.c.PullRequests.Get(context.TODO(), owner, repo, number)
if err != nil {
return err
}
record, err := s.s.FindOne(models.NewPullRequestQuery().
Where(kallax.And(
kallax.Eq(models.Schema.PullRequest.ID, pr.GetID()),
)),
)
if record == nil {
record = models.NewPullRequest()
record.PullRequest = *pr
return s.s.Insert(record)
}
record.PullRequest = *pr
_, err = s.s.Update(record)
return err
}