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,10 +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- cache . load$ ( msg . name , ( err , github ) => {
35+ context . log . debug ( `Processing module: ${ moduleName } ` )
36+ cache . load$ ( moduleName , ( err , github ) => {
3437 if ( err ) return done ( err )
3538
3639 if ( github && ! msg . update ) {
@@ -50,102 +53,142 @@ function cmdGet (msg, done) {
5053 var repository = latest . repository || { }
5154 var url = repository . url || ''
5255
53- if ( url . length > 0 ) {
56+ context . log . debug ( `Module: ${ moduleName } , github url: ${ url } ` )
57+ if ( url . length > 0 ) {
5458 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- }
6159
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+ }
6571
66- queryGithub ( params , done )
72+ queryGithub ( params , done )
73+ }
74+ else {
75+ return done ( new Error ( `invalid github url: ${ url } , for module: ${ moduleName } ` ) )
76+ }
6777 }
68- else {
69- return done ( new Error ( ' not found on github' ) )
78+ else {
79+ return done ( new Error ( `module ${ moduleName } not found on github` ) )
7080 }
7181 } )
7282 } )
73- }
7483
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
7886
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+ } )
8191
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+ }
8798
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+ } ,
90127
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+ }
95133
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 : '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+ }
100157
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+ }
105163
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+ }
110167
111- cb ( null , response . data )
112- } )
168+ data . id$ = params . name
169+ cache . make$ ( data ) . save$ ( complete )
113170 } )
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 )
121171
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 : 'git@github.com:' + 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+ }
137182
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 }
142186
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 )
146189
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 } )
150193 } )
151194}
0 commit comments