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