| @@ -1,16 +1,72 @@ | |||
| global.env = process.env | |||
| global.env.NODE_ENV = global.env.NODE_ENV || 'development' | |||
| var __g = require('global-this'); | |||
| __g.env = process.env | |||
| __g.env.NODE_ENV = __g.env.NODE_ENV || 'development' | |||
| const fs = require('fs') | |||
| var path = require('path'); | |||
| var utils = require('bbhverse'); | |||
| const cliargs = utils.cliargs; | |||
| const processedArgs = cliargs(process.argv.slice(2)); | |||
| if(!processedArgs.wd){ | |||
| if(process.env.wd){ | |||
| } | |||
| else { | |||
| process.env.wd = process.cwd(); | |||
| if(process.cwd() === __dirname) { | |||
| // This script was launched in the same dir. | |||
| // We do not know if it was copied to some random location. Check if we have elxr installed in current location. Or subidr. | |||
| process.env.wd = path.dirname( process.env.wd ); // Default to the parent. | |||
| } | |||
| } | |||
| } | |||
| else process.env.wd = processedArgs.wd | |||
| var ENV = Object.assign({}, process.env); // Shallow clone it. | |||
| const __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]'; | |||
| const runtimestamp = processedArgs.runtimestamp ? (new Date(processedArgs.runtimestamp)).getTime() : (new Date()).getTime(); | |||
| function getVersion() { return BUILD_VERSION; } | |||
| console.log(getVersion()); | |||
| var selectedinstance = (function() { | |||
| var __pvt = { root : process.env.wd || process.env.PWD } | |||
| var __pub = { | |||
| get root(){ return __pvt.root } | |||
| , set root(val){ | |||
| throw 'root has changed' | |||
| // if the root changes for this run we need to relocate all the necessary files to that folder for this run. | |||
| if(__pvt.root === val){ | |||
| fsMove() | |||
| return __pvt.root = val | |||
| } | |||
| else __pvt.root | |||
| } | |||
| } | |||
| Object.defineProperty(__g, 'selectedinstance', { | |||
| get(){ return __pub} | |||
| , set( inst ){ __pvt = inst; return __pub } | |||
| }) | |||
| return __pub; | |||
| })() | |||
| var any = utils.any; | |||
| var Tasq = utils.Tasq | |||
| var statuslog = utils.Traq | |||
| var Traq = utils.Traq | |||
| Tasq.addlistener(statuslog.statuslog) | |||
| // fs.writeFileSync('run.log', ', ' + JSON.stringify( { m : 'Hello'} ), { 'flag': 'a+' }) | |||
| Tasq.addlistener((e)=>{ fs.writeFileSync('run.log', ', ' + JSON.stringify( e ), { 'flag': 'a+' }) }) | |||
| // Instead of waiting for the root to be establised we start working at the current locatoin and then relocate when root changes. | |||
| var runlogjson = `${selectedinstance.root}/.elxr/run-${runtimestamp}/run.log` | |||
| ensureDirectoryExistence(runlogjson) | |||
| fs.writeFileSync(runlogjson, JSON.stringify( `Started ${runtimestamp}`)) // Initialize a new log file with "logrotate" for every run | |||
| Tasq.addlistener((e)=>{ fs.writeFileSync(runlogjson, ', ' + JSON.stringify( e ), { 'flag': 'a+' }) }) | |||
| var cli = require('./cliverse') | |||
| function isWin(){ return /^win/.test(process.platform) } | |||
| if(isWin()) { | |||
| @@ -22,13 +78,10 @@ else { | |||
| var shell_verse = lin_verse; | |||
| } | |||
| var nodeShellExec = cli.nodeShellExec; | |||
| var chalk = require('chalk') | |||
| const homedir = require('os').homedir(); | |||
| function sysAddPathVar(addpath){ | |||
| // Object.assign({ | |||
| // inherit: true, shell: true, env: ENV, title: `${command} ${args}` | |||
| @@ -41,7 +94,7 @@ function sysAddPathVar(addpath){ | |||
| $newpath = $path + ';${addpath}' | |||
| [Environment]::SetEnvironmentVariable("PATH", $newpath, 'Machine')` | |||
| ]).then(() => { | |||
| fs.writeFileSync('run.done', 'success') | |||
| fs.writeFileSync('run.done', 'success') // PB : TODO -- IPC through files is needed only for windows. | |||
| }).catch(() => { | |||
| fs.writeFileSync('run.done', 'error') | |||
| }) | |||
| @@ -94,12 +147,6 @@ function getCurrentFolder(){ | |||
| return any(tasks); | |||
| } | |||
| const __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]'; | |||
| const runtimestamp = (new Date()).getTime(); | |||
| function getVersion() { return BUILD_VERSION; } | |||
| console.log(getVersion()); | |||
| // 'use strict'; | |||
| // PB : TODO -- make sure folder context is proper coz we can now run elxr from anywhere. | |||
| @@ -153,23 +200,6 @@ const existslink = function(name, cb){ | |||
| } | |||
| const existsFolderSync = existsSync; | |||
| const cliargs = utils.cliargs; | |||
| const processedArgs = cliargs(process.argv.slice(2)); | |||
| if(!processedArgs.wd){ | |||
| if(process.env.wd){ | |||
| } | |||
| else { | |||
| process.env.wd = process.cwd(); | |||
| if(process.cwd() === __dirname) { | |||
| // This script was launched in the same dir. | |||
| // We do not know if it was copied to some random location. Check if we have elxr installed in current location. Or subidr. | |||
| process.env.wd = path.dirname( process.env.wd ); // Default to the parent. | |||
| } | |||
| } | |||
| } | |||
| else process.env.wd = processedArgs.wd | |||
| var ENV = Object.assign({}, process.env); // Shallow clone it. | |||
| @@ -2013,7 +2043,7 @@ var op = { | |||
| } | |||
| ]; | |||
| return any(tasks).then(() => { | |||
| fs.writeFileSync('run.done', 'success') | |||
| fs.writeFileSync('run.done', 'success') // PB : TODO -- IPC through files is needed only for windows. | |||
| }).catch(() => { | |||
| fs.writeFileSync('run.done', 'error') | |||
| }) | |||
| @@ -2048,7 +2078,7 @@ var op = { | |||
| selectedinstance.instanceName && runconfig.use === selectedinstance.instanceName) { | |||
| console.log(`No change detected. Already using requested specs : ${runconfig.NODE_ENV} ${runconfig.use}`) | |||
| if (processedArgs.runas) { fs.writeFileSync('run.done', 'success') } | |||
| if (processedArgs.runas) { fs.writeFileSync('run.done', 'success') } // PB : TODO -- IPC through files is needed only for windows. | |||
| if (existsSync('config') && existsSync('data')){ | |||
| return | |||
| } | |||
| @@ -3107,7 +3137,7 @@ var configs = (function(){ | |||
| console.warn('elevated repo manifest has obsolete format. Attempting upgrade.') | |||
| selectedinstance.elevated = selectedinstance.elevated.map(function(repo){ return { repo } }) | |||
| } | |||
| chessinstances[selected.instanceName][selected.node_env] = selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| chessinstances[selected.instanceName][selected.node_env] = selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| , selected, selectedinstance) | |||
| chessinstances[selected.instanceName][selected.node_env].reposervers = Array.from(new Set(chessinstances[selected.instanceName][selected.node_env].reposervers)) | |||
| selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online... | |||
| @@ -3328,7 +3358,7 @@ var __acquireConfig = function (selected, options, configrepo, errHandler) { | |||
| console.warn('elevated repo manifest has obsolete format. Attempting upgrade.') | |||
| selectedinstance.elevated = selectedinstance.elevated.map(function(repo){ return { repo } }) | |||
| } | |||
| chessinstances[selected.instanceName][selected.node_env] = selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| chessinstances[selected.instanceName][selected.node_env] = selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| , selected, selectedinstance) | |||
| chessinstances[selected.instanceName][selected.node_env].reposervers = Array.from(new Set(chessinstances[selected.instanceName][selected.node_env].reposervers)) | |||
| selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online... | |||
| @@ -4065,7 +4095,6 @@ function findlocalinstances(chessinstances, instanceoptions){ | |||
| // function updateselection(selected) { selectedinstance = utils.assign(selectedinstance, selected) } | |||
| var selectedinstance = { root : process.env.wd }; | |||
| var runconfig = null; | |||
| var chessinstances = { current_run : {} }; | |||
| @@ -4477,7 +4506,7 @@ function initinstances(selected_overrides) { | |||
| // PB : TODO -- We now have options that can be passed into assign_core to control this behavior. | |||
| if(selected_overrides.node_env === undefined) delete selected_overrides.node_env | |||
| selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| , __default | |||
| , chessinstances[instanceName][node_env] | |||
| , clioverrides | |||
| @@ -4655,7 +4684,7 @@ function generateDependencies(){ | |||
| var timer = function(){ | |||
| l('.'); | |||
| if(fso.FileExists("run.done")) { | |||
| fso.DeleteFile('run.done') | |||
| fso.DeleteFile('run.done') // PB : TODO -- IPC through files is needed only for windows we need to do it per run... | |||
| close(); | |||
| } | |||
| else window.setTimeout(timer, 1000); | |||
| @@ -4687,7 +4716,7 @@ var startElxr = function() { | |||
| var cmdprompts = cmdinstance.getPossiblePrompts() | |||
| selectedinstance.node_env ? selectedinstance.node_env : selectedinstance.node_env = clioverrides.node_env | |||
| // PB : TODO -- Most recent should be at the tip ! at index 0 so utils.reverseassign is required !!! | |||
| selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| , ...detectedinstanceoptions.slice(-2), promptkeys ) | |||
| // promptkeys = utils.assign(promptkeys, clioverrides) | |||