| 
				
			 | 
			
			 | 
			@@ -17,8 +17,10 @@ const { spawn, spawnSync } = require('child_process'); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			const cliargs = require('../elxr/cliargs'); // Use minimist... | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			const processedArgs = cliargs(process.argv.slice(2)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			console.dir(processedArgs) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			var globSync = require('glob').sync; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			var path = require('path') | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			var path = require('path'); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			const { isMaster } = require('cluster'); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			// 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, continueOnFailure) { | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -533,6 +535,12 @@ var __runcmd = function(label){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      kill(serverPid)    | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    , 'use' : ()=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      // use a certain named instance. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      //  Eg :  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // 1) elxr use elixir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // 2) elxr use cihsr | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      // If environment is not specified defaults to development. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // 1) NODE=test elxr use elixir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var runconfig = { NODE_ENV : process.env.NODE_ENV }   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      try { runconfig = Object.assign(runconfig, require('../run.js')) } catch(e) { } | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -561,7 +569,7 @@ var __runcmd = function(label){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return p; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else return Promise.resolve(true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      ]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      runconfig.NODE_ENV = process.env.NODE_ENV = process.env.NODE_ENV || runconfig.NODE_ENV || 'development'; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if(processedArgs._[1] && runconfig.use !== processedArgs._[1]) runconfig.use = processedArgs._[1]; | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -569,6 +577,37 @@ var __runcmd = function(label){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      // console.log(process.env.cwd) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fs.writeFileSync('./run.js', 'module.exports = ' + JSON.stringify(runconfig)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var checkoutMap = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        'development' : 'master', | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      // cant use git checkout -b it fails with branch already exists. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var performCheckout = (repo)=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return nodeShellExec('git', ['checkout', checkoutMap[runconfig.NODE_ENV] || runconfig.NODE_ENV], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          inherit : true, shell: true,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          cwd : repo | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }).catch((e)=>{ console.error(e) })  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var mergeSources = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        'development' : null, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        'test' : 'master', | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        'production' : 'test' | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var exludeMergeRepos = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        'elixir-config-development' : true, 'elixir-config-test': true, 'elixir-config-production' : true | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var mergeSource = mergeSources[checkoutMap[runconfig.NODE_ENV] || runconfig.NODE_ENV] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var performMerge = (repo)=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if(exludeMergeRepos[repo]) return Promise.resolve({ 'skipped' : true }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return nodeShellExec('git', ['merge', mergeSource], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          inherit : true, shell: true,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          cwd : repo | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }).catch((e)=>{ console.error(e) })  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if(runconfig.NODE_ENV === 'development') performMerge = ()=>{} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      any(tasks).then(()=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if(!processedArgs.runas) return op['runas']()  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -595,7 +634,63 @@ var __runcmd = function(label){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          )  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return any(tasks).then(()=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return any(tasks.concat([ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          any(gitRepos.map((repo)=>performCheckout(repo))), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          any(elevatedRunasRepos.map((repo)=>performCheckout(repo))), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          any(gitRepos.map((repo)=>performMerge(repo))), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          any(elevatedRunasRepos.map((repo)=>performMerge(repo))), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          , () => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // Move test config from dev. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if(process.env.NODE_ENV === 'test'){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              var devcfgreponame =  runconfig.use + '-config' + '-development';  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              var testcfgreponame =  runconfig.use + '-config' + '-test'; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              var testcfgdir = path.dirname(__dirname) + '/' +  testcfgreponame + '/' | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              var devcfgdir = path.dirname(__dirname) + '/' +  devcfgreponame + '/' //eg (elxr/../elixir-config.development) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			               | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              var promises = []; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              promises.push( | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                nodeShellExec('git', ['checkout', 'test'], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  inherit : true, shell: true,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  cwd : testcfgdir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  // , env: process.env | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  , runas : processedArgs.runas | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  , title : `git checkout ${testcfgreponame}` | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                }).catch((e)=>{ console.error(e) }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              promises.push( | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                nodeShellExec('git', ['checkout', 'master'], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  inherit : true, shell: true,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  cwd : devcfgdir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  // , env: process.env | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  , runas : processedArgs.runas | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  , title : `git checkout ${devcfgreponame}` | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                }).catch((e)=>{ console.error(e) }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              Promise.all(promises).then(()=> { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                globSync( '**/*.test.js', {cwd : devcfgdir}).map((filename) => {     | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  console.log('File found : ' + devcfgdir + filename)        | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  fs.copyFileSync(devcfgdir + filename, testcfgdir+ filename); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  nodeShellExec('git', ['checkout', 'test'], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    inherit : true, shell: true,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    cwd : devcfgdir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    // , env: process.env | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    , runas : processedArgs.runas | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    , title : `git checkout ${devcfgreponame}` | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  }).catch((e)=>{ console.error(e) }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ]) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ).then(()=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fs.writeFileSync('run.done', 'success') | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }).catch(()=>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fs.writeFileSync('run.done', 'error') |