3
3
var GitHub = require ( 'github4' )
4
4
var github = new GitHub ( )
5
5
var Request = require ( 'request' )
6
- var async = require ( 'async' )
6
+ var Async = require ( 'async' )
7
7
8
8
var opts = {
9
9
registry : 'http://registry.npmjs.org/' ,
@@ -27,10 +27,13 @@ module.exports = function (options) {
27
27
}
28
28
29
29
function cmdGet ( msg , done ) {
30
- var cache = opts . cache
31
- var registry = opts . registry + msg . name
30
+ let moduleName = msg . name
31
+ let cache = opts . cache
32
+ let registry = opts . registry + moduleName
33
+ let context = this
32
34
33
- cache . load$ ( msg . name , ( err , github ) => {
35
+ context . log . debug ( `Processing module: ${ moduleName } ` )
36
+ cache . load$ ( moduleName , ( err , github ) => {
34
37
if ( err ) return done ( err )
35
38
36
39
if ( github && ! msg . update ) {
@@ -50,102 +53,142 @@ function cmdGet (msg, done) {
50
53
var repository = latest . repository || { }
51
54
var url = repository . url || ''
52
55
53
- if ( url . length > 0 ) {
56
+ context . log . debug ( `Module: ${ moduleName } , github url: ${ url } ` )
57
+ if ( url . length > 0 ) {
54
58
var matches = / [ \/ : ] ( [ ^ \/ : ] + ?) [ \/ : ] ( [ ^ \/ ] + ?) ( \. g i t ) * $ / . exec ( url )
55
- var params = {
56
- name : msg . name ,
57
- url : url ,
58
- user : matches [ 1 ] || null ,
59
- repo : matches [ 2 ] || null
60
- }
61
59
62
- if ( ! params . user || ! params . repo ) {
63
- return done ( new Error ( 'not found on github' ) )
64
- }
60
+ if ( matches && matches . length >= 2 ) {
61
+ var params = {
62
+ name : moduleName ,
63
+ url : url ,
64
+ user : matches [ 1 ] || null ,
65
+ repo : matches [ 2 ] || null
66
+ }
67
+
68
+ if ( ! params . user || ! params . repo ) {
69
+ return done ( new Error ( `module ${ moduleName } not found on github` ) )
70
+ }
65
71
66
- queryGithub ( params , done )
72
+ queryGithub ( params , done )
73
+ }
74
+ else {
75
+ return done ( new Error ( `invalid github url: ${ url } , for module: ${ moduleName } ` ) )
76
+ }
67
77
}
68
- else {
69
- return done ( new Error ( ' not found on github' ) )
78
+ else {
79
+ return done ( new Error ( `module ${ moduleName } not found on github` ) )
70
80
}
71
81
} )
72
82
} )
73
- }
74
83
75
- function aliasGet ( msg , done ) {
76
- var seneca = this
77
- var payload = { name : msg . name }
84
+ function queryGithub ( params , done ) {
85
+ var cache = opts . cache
78
86
79
- seneca . act ( 'role:github,cmd:get' , payload , ( err , data ) => {
80
- if ( err ) return done ( err )
87
+ github . authenticate ( {
88
+ type : 'token' ,
89
+ token : opts . token
90
+ } )
81
91
82
- payload . data = data
83
- seneca . act ( 'role:info,res:part,part:github' , payload )
84
- done ( null , { ok : true } )
85
- } )
86
- }
92
+ Async . parallel ( {
93
+ getRepository : function ( cb ) {
94
+ github . repos . get ( { user : params . user , repo : params . repo } , function ( err , data ) {
95
+ if ( err ) {
96
+ context . log . debug ( `Read repo for ${ moduleName } get error: ${ err } ` )
97
+ }
87
98
88
- function queryGithub ( msg , done ) {
89
- var cache = opts . cache
99
+ cb ( err , data )
100
+ } )
101
+ } ,
102
+
103
+ getReadme : function ( cb ) {
104
+ github . repos . getReadme ( { user : params . user , repo : params . repo } , ( err , readme ) => {
105
+ if ( err ) {
106
+ context . log . debug ( `Read readme for ${ moduleName } get error: ${ err } ` )
107
+ return cb ( err )
108
+ }
109
+
110
+ if ( ! readme || ! readme . content ) {
111
+ context . log . debug ( `Read readme for ${ moduleName } no content` )
112
+ return cb ( null , false )
113
+ }
114
+
115
+ github . misc . renderMarkdownRaw ( {
116
+ data : new Buffer ( readme . content , 'base64' ) . toString ( 'ascii' )
117
+ } , ( err , response ) => {
118
+ if ( err && ! response ) {
119
+ context . log . debug ( `Render readme for ${ moduleName } error: ${ err } ` )
120
+ return cb ( err )
121
+ } // API fails expecting a JSON object
122
+
123
+ cb ( null , response . data )
124
+ } )
125
+ } )
126
+ } ,
90
127
91
- github . authenticate ( {
92
- type : 'token' ,
93
- token : opts . token
94
- } )
128
+ getPullRequests : function ( cb ) {
129
+ github . pullRequests . getAll ( { user : params . user , repo : params . repo , state : 'open' } , function ( err , data ) {
130
+ if ( err ) {
131
+ context . log . debug ( `Read Github pull requests for ${ moduleName } get error: ${ err } ` )
132
+ }
95
133
96
- async . parallel ( {
97
- getRepository : function ( cb ) {
98
- github . repos . get ( { user : msg . user , repo : msg . repo } , cb )
99
- } ,
134
+ cb ( err , data )
135
+ } )
136
+ }
137
+ } , ( err , results ) => {
138
+ if ( err ) {
139
+ context . log . debug ( `Read pull requests for ${ moduleName } got error: ${ err } ` )
140
+ return complete ( err )
141
+ }
142
+ var data = {
143
+ name : params . repo || '' ,
144
+ user : params . user || '' ,
145
+ repo : params . repo || '' ,
146
+ stars : results . getRepository . stargazers_count || 0 ,
147
+ watches : results . getRepository . subscribers_count || 0 ,
148
+ forks : results . getRepository . forks_count || 0 ,
149
+ last : results . getRepository . pushed_at || '' ,
150
+ urlRepo : 'https://github.com/' + params . user + '/' + params . repo ,
151
+ urlClone : 'git+https://github.com/' + params . user + '/' + params . repo + '.git' ,
152
+ urlSsh :
'[email protected] :' + params . user + '/' + params . repo + '.git' ,
153
+ readme : results . getReadme ,
154
+ pullRequests : results . getPullRequests && results . getPullRequests . length || 0 ,
155
+ cached : Date . now ( )
156
+ }
100
157
101
- getReadme : function ( cb ) {
102
- github . repos . getReadme ( { user : msg . user , repo : msg . repo } , ( err , readme ) => {
103
- if ( err ) return cb ( err )
104
- if ( ! readme . content ) return cb ( null , false )
158
+ context . log . debug ( `Read Github data for module ${ moduleName } completed.` )
159
+ cache . load$ ( params . name , ( err , cached ) => {
160
+ if ( err ) {
161
+ return complete ( err )
162
+ }
105
163
106
- github . misc . renderMarkdownRaw ( {
107
- data : new Buffer ( readme . content , 'base64' ) . toString ( 'ascii' )
108
- } , ( err , response ) => {
109
- if ( err && ! response ) return cb ( err ) // API fails expecting a JSON object
164
+ if ( cached ) {
165
+ return cached . data$ ( data ) . save$ ( complete )
166
+ }
110
167
111
- cb ( null , response . data )
112
- } )
168
+ data . id$ = params . name
169
+ cache . make$ ( data ) . save$ ( complete )
113
170
} )
114
- } ,
115
-
116
- getPullRequests : function ( cb ) {
117
- github . pullRequests . getAll ( { user : msg . user , repo : msg . repo , state : 'open' } , cb )
118
- }
119
- } , ( err , results ) => {
120
- if ( err ) return done ( err )
121
171
122
- var data = {
123
- name : msg . repo || '' ,
124
- user : msg . user || '' ,
125
- repo : msg . repo || '' ,
126
- stars : results . getRepository . stargazers_count || 0 ,
127
- watches : results . getRepository . subscribers_count || 0 ,
128
- forks : results . getRepository . forks_count || 0 ,
129
- last : results . getRepository . pushed_at || '' ,
130
- urlRepo : 'https://github.com/' + msg . user + '/' + msg . repo ,
131
- urlClone : 'git+https://github.com/' + msg . user + '/' + msg . repo + '.git' ,
132
- urlSsh :
'[email protected] :' + msg . user + '/' + msg . repo + '.git' ,
133
- readme : results . getReadme ,
134
- pullRequests : results . getPullRequests && results . getPullRequests . length || 0 ,
135
- cached : Date . now ( )
136
- }
172
+ function complete ( err , data ) {
173
+ if ( err ) {
174
+ context . log . debug ( `Save Github data for ${ moduleName } got error: ${ err } ` )
175
+ return done ( err )
176
+ }
177
+ else done ( null , data ? data . data$ ( data ) : data )
178
+ }
179
+ } )
180
+ }
181
+ }
137
182
138
- function complete ( err , data ) {
139
- if ( err ) return done ( err )
140
- else done ( null , data . data$ ( data ) )
141
- }
183
+ function aliasGet ( msg , done ) {
184
+ var seneca = this
185
+ var payload = { name : msg . name }
142
186
143
- cache . load$ ( msg . name , ( err , cached ) => {
144
- if ( err ) return done ( err )
145
- if ( cached ) return cached . data$ ( data ) . save$ ( complete )
187
+ seneca . act ( 'role:github,cmd:get' , payload , ( err , data ) => {
188
+ if ( err ) return done ( err )
146
189
147
- data . id$ = msg . name
148
- cache . make$ ( data ) . save$ ( complete )
149
- } )
190
+ payload . data = data
191
+ seneca . act ( 'role:info,res:part,part:github' , payload )
192
+ done ( null , { ok : true } )
150
193
} )
151
194
}
0 commit comments