33var GitHub = require ( 'github4' )
44var github = new GitHub ( )
55var Request = require ( 'request' )
6- var async = require ( 'async' )
6+ var Async = require ( 'async' )
77
88var opts = {
99 registry : 'http://registry.npmjs.org/' ,
@@ -27,11 +27,13 @@ module.exports = function (options) {
2727}
2828
2929function 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
3234
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 ) => {
3537 if ( err ) return done ( err )
3638
3739 if ( github && ! msg . update ) {
@@ -51,108 +53,142 @@ function cmdGet (msg, done) {
5153 var repository = latest . repository || { }
5254 var url = repository . url || ''
5355
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 ) {
5658 var matches = / [ \/ : ] ( [ ^ \/ : ] + ?) [ \/ : ] ( [ ^ \/ ] + ?) ( \. g i t ) * $ / . exec ( url )
5759
58- if ( matches && matches . length === 2 ) {
60+ if ( matches && matches . length >= 2 ) {
5961 var params = {
60- name : msg . name ,
62+ name : moduleName ,
6163 url : url ,
6264 user : matches [ 1 ] || null ,
6365 repo : matches [ 2 ] || null
6466 }
6567
6668 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` ) )
6870 }
6971
7072 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 } ` ) )
7376 }
7477 }
75- else {
76- return done ( new Error ( ' not found on github' ) )
78+ else {
79+ return done ( new Error ( `module ${ moduleName } not found on github` ) )
7780 }
7881 } )
7982 } )
80- }
8183
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
8586
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+ } )
9491
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+ }
9798
98- github . authenticate ( {
99- type : 'token' ,
100- token : opts . token
101- } )
99+ cb ( err , data )
100+ } )
101+ } ,
102102
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+ }
107109
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+ }
112114
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
117122
118- cb ( null , response . data )
123+ cb ( null , response . data )
124+ } )
119125 } )
120- } )
121- } ,
126+ } ,
122127
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+ }
128133
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 : 'git@github.com:' + 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 : 'git@github.com:' + params . user + '/' + params . repo + '.git' ,
153+ readme : results . getReadme ,
154+ pullRequests : results . getPullRequests && results . getPullRequests . length || 0 ,
155+ cached : Date . now ( )
156+ }
144157
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+ }
149163
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+ } )
153171
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+ }
156179 } )
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 } )
157193 } )
158194}
0 commit comments