1
1
'use strict' ;
2
2
3
- const fs = require ( 'fs' ) ;
4
- const path = require ( 'path' ) ;
5
-
6
- function loadQuery ( file ) {
7
- const filePath = path . resolve ( __dirname , '..' , 'queries' , `${ file } .gql` ) ;
8
- return fs . readFileSync ( filePath , 'utf8' ) ;
9
- }
10
-
11
- const PR_QUERY = loadQuery ( 'PR' ) ;
12
- const REVIEWS_QUERY = loadQuery ( 'Reviews' ) ;
13
- const COMMENTS_QUERY = loadQuery ( 'PRComments' ) ;
14
- const COMMITS_QUERY = loadQuery ( 'PRCommits' ) ;
15
- const USER_QUERY = loadQuery ( 'User' ) ;
16
-
17
3
// TODO(joyeecheung): make it mockable with req.rp ?
18
4
const { getCollaborators } = require ( '../lib/collaborators' ) ;
19
5
const { ReviewAnalyzer } = require ( '../lib/reviews' ) ;
20
6
7
+ // queries/*.gql file names
8
+ const PR_QUERY = 'PR' ;
9
+ const REVIEWS_QUERY = 'Reviews' ;
10
+ const COMMENTS_QUERY = 'PRComments' ;
11
+ const COMMITS_QUERY = 'PRCommits' ;
12
+ const USER_QUERY = 'User' ;
13
+
21
14
class PRData {
22
15
/**
23
16
* @param {number } prid
24
17
* @param {string } owner
25
18
* @param {string } repo
26
19
* @param {Object } logger
27
- * @param {Object } req
20
+ * @param {Object } request
28
21
*/
29
- constructor ( prid , owner , repo , logger , req ) {
22
+ constructor ( prid , owner , repo , logger , request ) {
30
23
this . prid = prid ;
31
24
this . owner = owner ;
32
25
this . repo = repo ;
33
26
this . logger = logger ;
34
- this . request = req . request ;
35
- this . requestAll = req . requestAll ;
36
- this . requestPromise = req . requestPromise ;
27
+ this . request = request ;
37
28
38
29
// Data
39
30
this . collaborators = new Map ( ) ;
@@ -52,53 +43,56 @@ class PRData {
52
43
this . getComments ( ) ,
53
44
this . getCommits ( )
54
45
] ) ;
46
+ this . analyzeReviewers ( ) ;
55
47
}
56
48
57
49
analyzeReviewers ( ) {
58
50
this . reviewers = new ReviewAnalyzer ( this ) . getReviewers ( ) ;
59
51
}
60
52
61
53
async getCollaborators ( ) {
62
- const { owner, repo, logger, requestPromise } = this ;
54
+ const { owner, repo, logger, request } = this ;
63
55
logger . trace ( `Getting collaborator contacts from README of ${ owner } /${ repo } ` ) ;
64
- this . collaborators = await getCollaborators ( requestPromise , logger , owner , repo ) ;
56
+ const url = `https://raw.githubusercontent.com/${ owner } /${ repo } /master/README.md` ;
57
+ const readme = await request . promise ( { url } ) ;
58
+ this . collaborators = await getCollaborators ( readme , logger , owner , repo ) ;
65
59
}
66
60
67
61
async getPR ( ) {
68
62
const { prid, owner, repo, logger, request } = this ;
69
63
logger . trace ( `Getting PR from ${ owner } /${ repo } /pull/${ prid } ` ) ;
70
- const prData = await request ( PR_QUERY , { prid, owner, repo } ) ;
64
+ const prData = await request . gql ( PR_QUERY , { prid, owner, repo } ) ;
71
65
const pr = this . pr = prData . repository . pullRequest ;
72
66
// Get the mail
73
67
logger . trace ( `Getting User information for ${ pr . author . login } ` ) ;
74
- const userData = await request ( USER_QUERY , { login : pr . author . login } ) ;
68
+ const userData = await request . gql ( USER_QUERY , { login : pr . author . login } ) ;
75
69
const user = userData . user ;
76
70
Object . assign ( this . pr . author , user ) ;
77
71
}
78
72
79
73
async getReviews ( ) {
80
- const { prid, owner, repo, logger, requestAll } = this ;
74
+ const { prid, owner, repo, logger, request } = this ;
81
75
const vars = { prid, owner, repo } ;
82
76
logger . trace ( `Getting reviews from ${ owner } /${ repo } /pull/${ prid } ` ) ;
83
- this . reviews = await requestAll ( REVIEWS_QUERY , vars , [
77
+ this . reviews = await request . gql ( REVIEWS_QUERY , vars , [
84
78
'repository' , 'pullRequest' , 'reviews'
85
79
] ) ;
86
80
}
87
81
88
82
async getComments ( ) {
89
- const { prid, owner, repo, logger, requestAll } = this ;
83
+ const { prid, owner, repo, logger, request } = this ;
90
84
const vars = { prid, owner, repo } ;
91
85
logger . trace ( `Getting comments from ${ owner } /${ repo } /pull/${ prid } ` ) ;
92
- this . comments = await requestAll ( COMMENTS_QUERY , vars , [
86
+ this . comments = await request . gql ( COMMENTS_QUERY , vars , [
93
87
'repository' , 'pullRequest' , 'comments'
94
88
] ) ;
95
89
}
96
90
97
91
async getCommits ( ) {
98
- const { prid, owner, repo, logger, requestAll } = this ;
92
+ const { prid, owner, repo, logger, request } = this ;
99
93
const vars = { prid, owner, repo } ;
100
94
logger . trace ( `Getting commits from ${ owner } /${ repo } /pull/${ prid } ` ) ;
101
- this . commits = await requestAll ( COMMITS_QUERY , vars , [
95
+ this . commits = await request . gql ( COMMITS_QUERY , vars , [
102
96
'repository' , 'pullRequest' , 'commits'
103
97
] ) ;
104
98
}
0 commit comments