@@ -9,6 +9,7 @@ var channel = require('chanel');
9
9
var request = require ( 'cogent' ) . extend ( {
10
10
auth : GITHUB_USERNAME + ':' + GITHUB_PASSWORD ,
11
11
} ) ;
12
+ var parseLink = require ( 'parse-link-header' ) ;
12
13
13
14
var store = require ( './store' ) ;
14
15
var log = require ( './log' ) ;
@@ -31,42 +32,53 @@ module.exports = function* (user) {
31
32
}
32
33
}
33
34
34
- // get all the user's repos
35
- var res = yield * request ( 'https://api.github.com/search/repositories?q=user:' + user , true ) ;
36
- if ( res . statusCode === 404 ) {
37
- res . resume ( ) ;
38
- log . write ( {
39
- context : 'user' ,
40
- user : user ,
41
- type : 'error' ,
42
- message : 'User "' + user + '" not found.' ,
43
- } )
44
- return ;
45
- }
46
- if ( res . statusCode !== 200 ) {
47
- res . resume ( ) ;
48
- log . write ( {
49
- context : 'user' ,
50
- user : user ,
51
- type : 'error' ,
52
- message : 'Error searching "' + user + '"\'s repositories.' ,
53
- } )
54
- return ;
55
- }
56
-
57
- // store the user info
58
- var json = store . json . users [ user ] = res . body ;
59
-
35
+ var page = 1 ;
36
+ var items = [ ] ;
60
37
// iterate through each repo with concurrency
61
38
var ch = channel ( {
62
39
concurrency : CONCURRENCY ,
63
40
discard : true ,
64
41
} ) ;
65
- var items = json . items ;
66
- for ( var i = 0 ; i < items . length ; i ++ ) {
67
- ch . push ( co ( crawlRepository ( user , items [ i ] ) ) ) ;
42
+
43
+ while ( true ) {
44
+ // get all the user's repos
45
+ var res = yield * request ( 'https://api.github.com/search/repositories?q=user:' + user + '&page=' + page , true ) ;
46
+ if ( res . statusCode === 404 ) {
47
+ res . resume ( ) ;
48
+ log . write ( {
49
+ context : 'user' ,
50
+ user : user ,
51
+ type : 'error' ,
52
+ message : 'User "' + user + '" not found.' ,
53
+ } )
54
+ return ;
55
+ }
56
+ if ( res . statusCode !== 200 ) {
57
+ res . resume ( ) ;
58
+ log . write ( {
59
+ context : 'user' ,
60
+ user : user ,
61
+ type : 'error' ,
62
+ message : 'Error searching "' + user + '"\'s repositories.' ,
63
+ } )
64
+ return ;
65
+ }
66
+ var _items = res . body . items ;
67
+ items = items . concat ( res . body . items ) ;
68
+
69
+ for ( var i = 0 ; i < _items . length ; i ++ ) {
70
+ ch . push ( co ( crawlRepository ( user , _items [ i ] ) ) ) ;
71
+ }
72
+
73
+ if ( ! res . headers . link ) break ;
74
+ var links = parseLink ( res . headers . link ) ;
75
+ if ( ! links . next ) break ;
76
+
77
+ page ++ ;
68
78
}
79
+
69
80
yield ch ( true ) ;
81
+ store . json . users [ user ] = items ;
70
82
yield * store . put ( ) ;
71
83
72
84
log . write ( {
0 commit comments