@@ -23,8 +23,6 @@ var $ = helper.$;
2323var ctx = require ( '../context' ) ;
2424var options = ctx . options ;
2525
26- var shell = require ( 'shelljs' ) ;
27-
2826var childProcess = require ( 'child_process' ) ;
2927var chalk = require ( 'chalk' ) ;
3028var gradleCmd = / ^ w i n / . test ( process . platform ) ? 'gradlew.bat' : './gradlew' ;
@@ -34,13 +32,18 @@ var customSeed = require('yargs').argv.seed;
3432
3533var shellCmd = function ( cwd , command , signal , cb ) {
3634 process . stdout . write ( chalk . green ( '\n' + command + '\n' ) ) ;
37- var backupWd = process . cwd ( ) ;
38- process . chdir ( cwd ) ;
39- var child = shell . exec ( command , { async : true , silent : true } ) ;
40- process . chdir ( backupWd ) ;
35+ // var backupWd = process.cwd();
36+ // process.chdir(cwd);
37+ var commandSplit = command . split ( ' ' ) ;
38+ var child = childProcess . spawn (
39+ commandSplit [ 0 ] ,
40+ commandSplit . slice ( 1 ) ,
41+ { cwd : cwd }
42+ ) ;
43+
4144 if ( signal ) {
4245 process . on ( 'exit' , function ( ) {
43- child . kill ( ) ;
46+ require ( 'tree- kill' ) ( child . pid , 'SIGKILL' ) ;
4447 } ) ;
4548 }
4649
@@ -64,9 +67,9 @@ var shellCmd = function (cwd, command, signal, cb) {
6467 var message = '' ;
6568 outBuff += data ;
6669 if ( outBuff . indexOf ( '\n' ) > - 1 ) {
67- message = outBuff . substr ( 0 , outBuff . indexOf ( '\n' ) + 1 ) ;
68- outBuff = outBuff . substr ( outBuff . indexOf ( '\n' ) + 1 ) ;
69- if ( ! signaled && signal && data . indexOf ( signal ) > - 1 ) {
70+ message = outBuff . substr ( 0 , outBuff . toString ( ) . indexOf ( '\n' ) + 1 ) ;
71+ outBuff = outBuff . substr ( outBuff . toString ( ) . indexOf ( '\n' ) + 1 ) ;
72+ if ( ! signaled && signal && data . toString ( ) . indexOf ( signal ) > - 1 ) {
7073 signaled = true ;
7174 return cb ( null , child ) ;
7275 }
@@ -83,11 +86,12 @@ var shellCmd = function (cwd, command, signal, cb) {
8386
8487 child . stderr . on ( 'data' , function ( data ) {
8588 if ( ! signaled ) {
86- process . stdout . write ( chalk . red ( '\n' + data . trim ( ) ) ) ;
89+ process . stdout . write ( chalk . red ( '\n' + data . toString ( ) . trim ( ) ) ) ;
8790 }
8891 } ) ;
8992} ;
9093
94+ var mtServer ;
9195
9296var pokeServer = function ( cb ) {
9397 var request = require ( 'request' ) ;
@@ -98,10 +102,29 @@ var pokeServer = function (cb) {
98102 ) ;
99103} ;
100104
105+ var closeServer = function ( cb ) {
106+ var streamClosedCount = 0 ;
107+
108+ var streamOnClosed = function ( ) {
109+ if ( ++ streamClosedCount === 2 ) {
110+ cb ( ) ;
111+ }
112+ } ;
113+
114+ mtServer . stdout . on ( 'close' , streamOnClosed ) ;
115+ mtServer . stderr . on ( 'close' , streamOnClosed ) ;
116+
117+ if ( process . platform === 'win32' ) {
118+ require ( 'tree-kill' ) ( mtServer . pid , 'SIGKILL' ) ;
119+ }
120+ else {
121+ mtServer . kill ( ) ;
122+ }
123+ } ;
124+
101125var start = function ( args , cb ) {
102126 var async = require ( 'async' ) ;
103127 console . log ( chalk . magenta ( 'reconfiguring database, starting app server' ) ) ;
104- var pwd = shell . pwd ( ) ;
105128 var dirForMiddle = path . join (
106129 ctx . paths . projectRoot , 'appserver/java-spring'
107130 ) ;
@@ -115,43 +138,53 @@ var start = function (args, cb) {
115138 '' ;
116139 var loadCmd = gradleCmd + ' dbLoad' + dbLoadParam + ' --stacktrace' ;
117140
141+ var hasStarted = false ;
142+
118143 async . series ( [
119- shellCmd . bind ( null , dirForMiddle , gradleCmd + ' dbInit' , null ) ,
120- shellCmd . bind ( null , dirForMiddle , gradleCmd + ' dbTeardown' , null ) ,
121- shellCmd . bind ( null , dirForMiddle , gradleCmd + ' dbInit' , null ) ,
122- shellCmd . bind ( null , dirForMiddle , gradleCmd + ' dbConfigure' , null ) ,
123- shellCmd . bind ( null , dirForMiddle , gradleCmd + ' test' , null ) ,
124144 shellCmd . bind (
125- null , dirForMiddle , loadCmd , null
145+ null , dirForMiddle , gradleCmd + ' dbInit --no-daemon' , null
146+ ) ,
147+ shellCmd . bind (
148+ null , dirForMiddle , gradleCmd + ' dbTeardown --no-daemon' , null
149+ ) ,
150+ shellCmd . bind (
151+ null , dirForMiddle , gradleCmd + ' dbInit --no-daemon' , null
152+ ) ,
153+ shellCmd . bind (
154+ null , dirForMiddle , gradleCmd + ' dbConfigure --no-daemon' , null
155+ ) ,
156+ shellCmd . bind (
157+ null , dirForMiddle , gradleCmd + ' test --no-daemon' , null
158+ ) ,
159+ shellCmd . bind (
160+ null , dirForMiddle , loadCmd + ' --no-daemon' , null
126161 ) ,
127162 shellCmd . bind (
128163 null ,
129164 dirForMiddle ,
130- gradleCmd + ' bootrun' ,
165+ gradleCmd + ' bootrun --no-daemon ' ,
131166 'marklogic.samplestack.Application - Started Application'
132167 ) ,
133168 ] , function ( err , results ) {
134- console . log ( ' ' ) ;
135- $ . util . log ( chalk . green ( 'detected middle tier started' ) ) ;
136- var mtServer = results [ results . length - 1 ] ;
137- ctx . setActiveServer ( 'middle-tier' , {
138- close : function ( cb ) {
139- console . log ( 'shutting down Java middle tier' ) ;
140- mtServer . on ( 'exit' , function ( ) {
141- cb ( ) ;
142- } ) ;
143- mtServer . kill ( ) ;
144- }
145- } ) ;
146-
147- pokeServer ( function ( ) {
148- console . log ( chalk . magenta ( 'preparations complete' ) ) ;
149- cb ( err ) ;
150-
151- } ) ;
169+ if ( ! hasStarted ) {
170+ hasStarted = true ;
171+ console . log ( ' ' ) ;
172+ $ . util . log ( chalk . green ( 'detected middle tier started' ) ) ;
173+ mtServer = results [ results . length - 1 ] ;
174+ ctx . setActiveServer ( 'middle-tier' , {
175+ close : closeServer
176+ } ) ;
177+
178+ pokeServer ( function ( ) {
179+ console . log ( chalk . magenta ( 'preparations complete' ) ) ;
180+ cb ( err ) ;
181+
182+ } ) ;
183+ }
152184 } ) ;
153185} ;
154186
155187module . exports = {
156- start : start
188+ start : start ,
189+ close : closeServer
157190} ;
0 commit comments