@@ -6,60 +6,78 @@ var PATH = require('path'),
66 Q = require ( 'q' ) ,
77 L = require ( 'lodash' ) ,
88 QFS = require ( 'q-io/fs' ) ,
9- Emitter = require ( 'events' ) . EventEmitter ;
9+ Logger = require ( 'bower/node_modules/bower-logger' ) ,
10+ byline = require ( 'byline' ) ;
1011
11- module . exports = function ( paths , options ) {
12+ module . exports = function ( paths , options , config ) {
1213 options = L . extend ( { } , options || { } ) ;
1314 options . production = ! ! options [ 'bower-production' ] ;
1415
15- var emitter = new Emitter ( ) ;
16+ var logger = new Logger ( ) ,
17+ emitLog = logger . emit . bind ( logger , 'log' ) ,
18+ emitError = logger . emit . bind ( logger , 'error' ) ;
1619
17- B . commands . install ( paths , options )
18- . on ( 'data' , emitter . emit . bind ( emitter , 'data' ) )
19- . on ( 'warn' , emitter . emit . bind ( emitter , 'warn' ) )
20- . on ( 'error' , emitter . emit . bind ( emitter , 'error' ) )
21- . on ( 'end' , function ( ) {
22- B . commands . list ( { paths : true } )
23- . on ( 'error' , emitter . emit . bind ( emitter , 'error' ) )
24- . on ( 'data' , function ( packages ) {
25- emitter . emit ( 'packages' , packages ) ;
20+ B . commands . install ( paths , options , config )
21+ . on ( 'log' , emitLog )
22+ . on ( 'error' , emitError )
23+ . on ( 'end' , function ( installed ) {
24+ B . commands . list ( { offline : true } , config )
25+ . on ( 'error' , emitError )
26+ . on ( 'log' , emitLog )
27+ . on ( 'end' , function ( list ) {
2628
27- var cwd = process . cwd ( ) ,
28- paths = Object . keys ( packages )
29+ var deps = list . dependencies ,
30+ paths = Object . keys ( deps )
2931 . map ( function ( key ) {
30- return packages [ key ] ;
32+ return {
33+ name : deps [ key ] . pkgMeta . name ,
34+ version : deps [ key ] . pkgMeta . version ,
35+ path : deps [ key ] . canonicalDir
36+ } ;
3137 } ) ,
3238 npmBin = process . env . NPM || 'npm' ,
3339 npmArgs = [ 'install' , options [ 'npm-development' ] ? '--development' : '--production' ] ,
3440 promise = Q . resolve ( ) ;
3541
36- emitter . emit ( 'paths' , paths ) ;
37-
38- paths . forEach ( function ( p ) {
42+ paths . forEach ( function ( dep ) {
43+ var path = dep . path ;
3944 promise = promise
4045 . then ( function ( ) {
41- var path = PATH . join ( cwd , p ) ;
4246 return QFS . exists ( PATH . join ( path , 'package.json' ) )
4347 . then ( function ( isPackage ) {
4448 if ( ! isPackage ) return ;
4549
46- var cmd = [ npmBin ] . concat ( npmArgs ) . join ( ' ' ) ,
50+ var p = PATH . relative ( config . cwd , path ) ,
51+ cmd = [ npmBin ] . concat ( npmArgs ) . join ( ' ' ) ,
4752 npm = CP . spawn ( npmBin , npmArgs , {
4853 env : process . env ,
4954 cwd : path
5055 } ) ,
51- defer = Q . defer ( ) ;
56+ defer = Q . defer ( ) ,
57+
58+ npmStdout = new byline . LineStream ( ) ,
59+ npmStderr = new byline . LineStream ( ) ;
60+
61+ npm . stdout . pipe ( npmStdout ) ;
62+ npm . stderr . pipe ( npmStderr ) ;
5263
53- emitter . emit ( 'data ', 'Running ' + cmd + ' in ' + p + '\n' ) ;
64+ logger . info ( 'npm install ', cmd + ' in ' + p , dep ) ;
5465
55- npm . stdout . on ( 'data' , emitter . emit . bind ( emitter , 'data' ) ) ;
56- npm . stderr . on ( 'data' , emitter . emit . bind ( emitter , 'warn' ) ) ;
66+ // forward output
67+ npmStdout . on ( 'data' , function ( data ) {
68+ logger . info ( 'npm install' , data , dep ) ;
69+ } ) ;
70+
71+ // forward warnings
72+ npmStderr . on ( 'data' , function ( data ) {
73+ logger . warn ( 'npm install' , data , dep ) ;
74+ } ) ;
5775
5876 npm . on ( 'close' , function ( code ) {
5977 if ( code ) {
6078 return defer . reject ( new Error ( 'Error (' + code + '): ' + cmd + ' in ' + p ) ) ;
6179 } else {
62- defer . resolve ( ) ;
80+ defer . resolve ( installed ) ;
6381 }
6482 } ) ;
6583
@@ -69,11 +87,11 @@ module.exports = function(paths, options) {
6987 } ) ;
7088
7189 promise
72- . then ( emitter . emit . bind ( emitter , 'end' ) )
73- . fail ( emitter . emit . bind ( emitter , 'error' ) ) ;
90+ . then ( logger . emit . bind ( logger , 'end' ) )
91+ . fail ( logger . emit . bind ( logger , 'error' ) ) ;
7492
7593 } ) ;
7694 } ) ;
7795
78- return emitter ;
96+ return logger ;
7997} ;
0 commit comments