|  |  | @@ -2,11 +2,88 @@ | 
		
	
		
			
			|  |  |  | // -------------- | 
		
	
		
			
			|  |  |  | // elxr | 
		
	
		
			
			|  |  |  | //   A cli tool for elixr. | 
		
	
		
			
			|  |  |  | const { spawn } = require('child_process'); | 
		
	
		
			
			|  |  |  | const { existsSync } = require('fs'); | 
		
	
		
			
			|  |  |  | const { spawn, spawnSync } = require('child_process'); | 
		
	
		
			
			|  |  |  | const cliargs = require('../elxr/cliargs'); // Use minimist... | 
		
	
		
			
			|  |  |  | const processedArgs = cliargs(process.argv.slice(2)); | 
		
	
		
			
			|  |  |  | console.dir(processedArgs) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // Serialize a set of functions that will execute to return a promises one after the other. | 
		
	
		
			
			|  |  |  | // Will stop when any one fails. | 
		
	
		
			
			|  |  |  | function any(iterable) { | 
		
	
		
			
			|  |  |  | return iterable.reduce( | 
		
	
		
			
			|  |  |  | (p, fn, i ,a) => { | 
		
	
		
			
			|  |  |  | // console.log('accumulator :'); | 
		
	
		
			
			|  |  |  | // console.log(p); | 
		
	
		
			
			|  |  |  | if(Promise.resolve(p) === p ) { | 
		
	
		
			
			|  |  |  | return p.then((pVal) => { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if(Promise.resolve(pVal) === pVal) { | 
		
	
		
			
			|  |  |  | // Passed in function retured a promise. We still need to wait for it. | 
		
	
		
			
			|  |  |  | pVal.then((pVal)=>{ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // console.log('Then --pVal = ' + pVal + ' bContinue = ' +  continueOnFailure ); console.log(p); | 
		
	
		
			
			|  |  |  | if(!pVal && !continueOnFailure) { | 
		
	
		
			
			|  |  |  | console.error("E : pVal :" + pVal); | 
		
	
		
			
			|  |  |  | // i==0 ? null :  console.error("E :1 a[i-1] " + a[i-1]); | 
		
	
		
			
			|  |  |  | // a.map((i)=>console.error(i.toString())); | 
		
	
		
			
			|  |  |  | console.error('debugData 3 -------------------'); | 
		
	
		
			
			|  |  |  | // console.error(debugData); | 
		
	
		
			
			|  |  |  | console.error('debugData 3 -------------------'); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | console.log("Cancelling remaining..."); | 
		
	
		
			
			|  |  |  | throw 'Failed in reduce 1 ' | 
		
	
		
			
			|  |  |  | return false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | // console.log('calling fn : '+ fn); | 
		
	
		
			
			|  |  |  | return (Promise.resolve(fn) === fn ) ? fn : fn() ; | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // console.log('Then --pVal = ' + pVal + ' bContinue = ' +  continueOnFailure ); console.log(p); | 
		
	
		
			
			|  |  |  | if(!pVal && !continueOnFailure) { | 
		
	
		
			
			|  |  |  | console.error("E : pVal :" + pVal); | 
		
	
		
			
			|  |  |  | // i==0 ? null :  console.error("E :1 a[i-1] " + a[i-1]); | 
		
	
		
			
			|  |  |  | // a.map((i)=>console.error(i.toString())); | 
		
	
		
			
			|  |  |  | console.error('debugData 3 -------------------'); | 
		
	
		
			
			|  |  |  | // console.error(debugData); | 
		
	
		
			
			|  |  |  | console.error('debugData 3 -------------------'); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | console.log("Cancelling remaining..."); | 
		
	
		
			
			|  |  |  | throw 'Failed in reduce 1 ' | 
		
	
		
			
			|  |  |  | return false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | // console.log('calling fn : '+ fn); | 
		
	
		
			
			|  |  |  | return (Promise.resolve(fn) === fn ) ? fn : fn() ; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | }).catch((error) => { | 
		
	
		
			
			|  |  |  | console.error("E : " + error); | 
		
	
		
			
			|  |  |  | fn ? console.error("Fn : " + fn.toString()) : null; | 
		
	
		
			
			|  |  |  | // i==0 ? null :  console.error("E :2 a[i-1] " + a[i-1]); | 
		
	
		
			
			|  |  |  | // a.map((i)=>console.error(i.toString())); | 
		
	
		
			
			|  |  |  | console.error('debugData 4-------------------------'); | 
		
	
		
			
			|  |  |  | // console.error(debugData); | 
		
	
		
			
			|  |  |  | console.error('debugData 4-------------------------'); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | throw 'Failed in reduce 2 ' | 
		
	
		
			
			|  |  |  | return false; | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else if(!p) { | 
		
	
		
			
			|  |  |  | console.log("Bypass on failure"); | 
		
	
		
			
			|  |  |  | return false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , Promise.resolve(true) | 
		
	
		
			
			|  |  |  | ); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var cli = 'elxr'; | 
		
	
		
			
			|  |  |  | var ver = '#unversioned'; | 
		
	
		
			
			|  |  |  | var help = '#unkown list of commands... please refer dveloper documentation for ' + cli; | 
		
	
	
		
			
			|  |  | @@ -29,6 +106,88 @@ var __runcmd = function(label){ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var op = { | 
		
	
		
			
			|  |  |  | 'h' : ()=>{ console.log(cli + ' ' + ver + ' ' + help); return '-h' } | 
		
	
		
			
			|  |  |  | , 'upgrade' : ()=>{ | 
		
	
		
			
			|  |  |  | console.log('upgrade.......') | 
		
	
		
			
			|  |  |  | var tasks = [ | 
		
	
		
			
			|  |  |  | ()=>{ | 
		
	
		
			
			|  |  |  | var p = nodeShellExec('npm', ['i', '-g', 'npm-upgrade'], { | 
		
	
		
			
			|  |  |  | inherit : true, shell: true | 
		
	
		
			
			|  |  |  | , env: process.env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | p.position = 1; | 
		
	
		
			
			|  |  |  | console.log('One') | 
		
	
		
			
			|  |  |  | return p; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , ()=>{ | 
		
	
		
			
			|  |  |  | var p = nodeShellExec('npm', ['cache', 'clean', '-f'], { | 
		
	
		
			
			|  |  |  | inherit : true, shell: true | 
		
	
		
			
			|  |  |  | , env: process.env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | p.position = 2; | 
		
	
		
			
			|  |  |  | console.log('Two') | 
		
	
		
			
			|  |  |  | return p; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , ()=>{ | 
		
	
		
			
			|  |  |  | var p = nodeShellExec('npm', ['install', '-g', 'n'], { | 
		
	
		
			
			|  |  |  | inherit : true, shell: true | 
		
	
		
			
			|  |  |  | , env: process.env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | p.position = 3; | 
		
	
		
			
			|  |  |  | console.log('Three') | 
		
	
		
			
			|  |  |  | return p; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , ()=>{ | 
		
	
		
			
			|  |  |  | var p = nodeShellExec('n', ['latest'], { | 
		
	
		
			
			|  |  |  | inherit : true, shell: true | 
		
	
		
			
			|  |  |  | , env: process.env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | p.position = 4; | 
		
	
		
			
			|  |  |  | console.log('Four') | 
		
	
		
			
			|  |  |  | return p; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | ] | 
		
	
		
			
			|  |  |  | any(tasks) | 
		
	
		
			
			|  |  |  | console.log('.......done') | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , 'pull' : ()=>{ | 
		
	
		
			
			|  |  |  | // Clone if not exists | 
		
	
		
			
			|  |  |  | var gitclonables = [ | 
		
	
		
			
			|  |  |  | 'ember-masonry-grid' | 
		
	
		
			
			|  |  |  | , 'bbhverse' | 
		
	
		
			
			|  |  |  | , 'clientverse' | 
		
	
		
			
			|  |  |  | , 'serververse' | 
		
	
		
			
			|  |  |  | , 'client' | 
		
	
		
			
			|  |  |  | , 'elixir-client' | 
		
	
		
			
			|  |  |  | , 'elixir-client-unlinked' | 
		
	
		
			
			|  |  |  | , 'ember-searchable-select' | 
		
	
		
			
			|  |  |  | , 'loopback-component-jsonapi' | 
		
	
		
			
			|  |  |  | , 'config' | 
		
	
		
			
			|  |  |  | , 'loopback-connector-ds' | 
		
	
		
			
			|  |  |  | , 'chess-server-lib' | 
		
	
		
			
			|  |  |  | , 'elixir-server' | 
		
	
		
			
			|  |  |  | , 'chess-server' | 
		
	
		
			
			|  |  |  | , 'setup' | 
		
	
		
			
			|  |  |  | ] | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | gitclonables.forEach(clonable => { | 
		
	
		
			
			|  |  |  | console.log('' + process.cwd()) | 
		
	
		
			
			|  |  |  | if(existsSync(clonable)) { | 
		
	
		
			
			|  |  |  | console.log('pulling ' + clonable) | 
		
	
		
			
			|  |  |  | nodeShellExec('git', ['pull'], { | 
		
	
		
			
			|  |  |  | inherit : true, shell: true | 
		
	
		
			
			|  |  |  | , cwd : clonable | 
		
	
		
			
			|  |  |  | , env: process.env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else { | 
		
	
		
			
			|  |  |  | console.log('cloning...') | 
		
	
		
			
			|  |  |  | nodeShellExec('git', ['clone', '//172.16.0.27/repos/' + clonable + '.git']) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | console.log('pull') | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , 'start' : (label)=>{ | 
		
	
		
			
			|  |  |  | console.log('Starting Elixir Server.'); | 
		
	
		
			
			|  |  |  | var env = Object.assign({}, process.env); // Shallow clone it. | 
		
	
	
		
			
			|  |  | @@ -40,16 +199,14 @@ var __runcmd = function(label){ | 
		
	
		
			
			|  |  |  | inherit : true, | 
		
	
		
			
			|  |  |  | shell: true, detached: true, | 
		
	
		
			
			|  |  |  | cwd : 'loopback', | 
		
	
		
			
			|  |  |  | env: env, | 
		
	
		
			
			|  |  |  | shell : true | 
		
	
		
			
			|  |  |  | env: env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | nodeShellExec('node', ['--inspect=9227', 'sage-r/server.js'], { | 
		
	
		
			
			|  |  |  | inherit : true, | 
		
	
		
			
			|  |  |  | shell: true, detached: true, | 
		
	
		
			
			|  |  |  | cwd : 'loopback', | 
		
	
		
			
			|  |  |  | env: env, | 
		
	
		
			
			|  |  |  | shell : true | 
		
	
		
			
			|  |  |  | env: env | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // nodeShellExec('node', ['--inspect=9226', ' bin/www'], { | 
		
	
	
		
			
			|  |  | @@ -119,16 +276,24 @@ function nodeShellExec() { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const child = spawn(...arguments); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // use child.stdout.setEncoding('utf8'); if you want text chunks | 
		
	
		
			
			|  |  |  | child.stdout.setEncoding('utf8'); | 
		
	
		
			
			|  |  |  | // console.log('here') | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return new Promise(function(resolve, reject){ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // use child.stdout.setEncoding('utf8'); if you want text chunks | 
		
	
		
			
			|  |  |  | child.stdout.setEncoding('utf8'); | 
		
	
		
			
			|  |  |  | // console.log('here') | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | child.stdout.on('data', (chunk) => console.log(chunk)); | 
		
	
		
			
			|  |  |  | child.stdout.on('data', (chunk) => console.log(chunk)); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | child.on('error', (chunk) => console.error(chunk)); | 
		
	
		
			
			|  |  |  | child.stderr.pipe(process.stderr); | 
		
	
		
			
			|  |  |  | child.on('error', (chunk) => console.error(chunk)); | 
		
	
		
			
			|  |  |  | child.stderr.pipe(process.stderr); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | child.on('close', (code) => console.log(`child process ${Array.from(arguments)[0]} exited with code ${code}`)); | 
		
	
		
			
			|  |  |  | return child; | 
		
	
		
			
			|  |  |  | child.on('close', (code) => { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | console.log(`child process ${Array.from(arguments)[0]} exited with code ${code}`) | 
		
	
		
			
			|  |  |  | if(code !== 0 ) return reject(code) | 
		
	
		
			
			|  |  |  | resolve(true) | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 |