| @@ -148,7 +148,7 @@ var getPullCmd = (repo, branch) => { | |||
| , { cwd: instanceroot + '/' + repo, title : 'pull all origins for ' + branch + ' ' + repo + ' ' + parameters.join(' ') }] | |||
| } | |||
| else { | |||
| console.warn('No branch was specified detecting from working client.') | |||
| // console.warn('No branch was specified detecting from working client.') | |||
| // First check if working client exits. | |||
| // if (existsSync(instanceroot + '/' + repo)) { | |||
| var pullCmd = gitops.getdiscoverbranchcmd(repo) | |||
| @@ -258,7 +258,6 @@ var acquireElevationState = () => { | |||
| } | |||
| var repomanifest = null; | |||
| var currentGitAuthUser; // nodeShellExec('git', ['config', 'user.email']) ... PB : TODO-- get the current gittea username | |||
| var defaultRepoOwner = 'chess'; | |||
| var elevatedRunasRepos = null | |||
| @@ -282,7 +281,6 @@ var dbForLabel = function (label) { | |||
| var gitbash = "C:\\Program Files\\Git\\bin\\sh.exe" | |||
| // var gitbash = "G:\\Installed\\Git\\bin\\sh.exe" | |||
| // Relevant git repos | |||
| // var repomanifest = require('../'+repomanifest.instanceName+'-config-'+ nodeenv +'/repo-manifest')() | |||
| var exludeMergeRepos = []; | |||
| var useGitPull = processedArgs.useGitPull || false; | |||
| var configPromise = null | |||
| @@ -1279,12 +1277,12 @@ var op = { | |||
| 4) Iterates all repos and checkout to the ENV specified. 'git', ['checkout', checkoutMap[runconfig.NODE_ENV] || runconfig.NODE_ENV] | |||
| 5) Iterates all repos and merge from source configured in mergesource. 'git', ['merge', mergesource], | |||
| */ | |||
| var runconfig = { NODE_ENV: repomanifest.node_env } | |||
| var runconfig = { NODE_ENV: selectedinstance.node_env } | |||
| try { runconfig = Object.assign(runconfig, require(instanceroot + '/run.js')) } catch (e) { } | |||
| // We no longer need to check ruans.. ??? if we were initiated from self invoked privileged shell ? | |||
| if (( /*processedArgs.runas && processedArgs.runas !== 'self' &&*/ !processedArgs.force) && | |||
| runconfig.NODE_ENV && runconfig.NODE_ENV === (repomanifest.node_env || runconfig.NODE_ENV) && | |||
| repomanifest.instanceName && runconfig.use === repomanifest.instanceName) { | |||
| runconfig.NODE_ENV && runconfig.NODE_ENV === (selectedinstance.node_env || runconfig.NODE_ENV) && | |||
| 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') } | |||
| @@ -1699,8 +1697,8 @@ var elxr = { | |||
| def = def || { | |||
| repos : repomanifest.repos, | |||
| elevated : repomanifest.elevated | |||
| repos : selectedinstance.repos, | |||
| elevated : selectedinstance.elevated | |||
| } | |||
| var elevatedpulltasks = null; | |||
| @@ -1769,13 +1767,13 @@ var elxr = { | |||
| function preworkerconfig(){ | |||
| // Everything runs after this check is completed. Elevation occurs out of process when needed. | |||
| gitRepos = repomanifest.repos | |||
| gitRepos = selectedinstance.repos | |||
| // gitRepos = ['chess-server-lib']; | |||
| // Repositiories that have symlinks that require elevated priviletes in windows to create symlinks | |||
| elevatedRunasRepos = repomanifest.elevated | |||
| elevatedRunasRepos = selectedinstance.elevated | |||
| // Repos that should excluded from merge for releases... | |||
| exludeMergeRepos = repomanifest.exludeMergeRepos | |||
| exludeMergeRepos = selectedinstance.exludeMergeRepos | |||
| // mysqldump --add-drop-table --no-data -u root -p db_name | grep 'DROP TABLE' ) > drop_all_tables.sql | |||
| // mysql -u root -p db_name < drop_all_tables.sql | |||
| @@ -1805,14 +1803,6 @@ function elxrworker() { | |||
| else return __runcmd(processedArgs.label || processedArgs._[0] || 'h'); | |||
| } | |||
| var getManifest = function () { | |||
| // Once choices are made we need to load config according to those choices. | |||
| // No trace of a previous run... | |||
| // Default Config... | |||
| return repomanifest = selectedinstance; | |||
| } | |||
| function acquireChoices(selectedinstance) { | |||
| var hasconfig = false; | |||
| @@ -1852,8 +1842,6 @@ We will run your choice at the next prompt. | |||
| selectedinstance.instanceName = processedArgs._[1] = processedArgs._[1] || 'chess' | |||
| selectedinstance.node_env = processedArgs.node_env = (process.env.NODE_ENV && process.env.NODE_ENV.trim()) || processedArgs.node_env || 'development' | |||
| selectedinstance.reposerver = 'https://git.bbh.org.in' | |||
| getManifest() // PB : TODO -- acquire the manifest directly from http url instead of clone before cloning the config. Since | |||
| // This is because the manifest at any server location can redirect to the preferred server.. | |||
| } | |||
| else if (choice === 'h') { | |||
| processedArgs._[0] = 'h' | |||
| @@ -1931,25 +1919,26 @@ var cacheWriteInstanceConfig = function(chessinstances){ | |||
| fs.writeFileSync(instanceroot + '/chessinstances.js', 'module.exports = ' + JSON.stringify(chessinstances, null, 2) + '', { 'flag': 'w' }) | |||
| } | |||
| var acquireConfig = function (selected, chessinstances) { | |||
| var acquireConfig = function (selected) { | |||
| var configrepo = selected.instanceName + '-config-' + selected.node_env; | |||
| return performPull(configrepo).then(() => { | |||
| var manifestpath = path.normalize(selected.root + '/' + selected.instanceName + '-config-' + selected.node_env + '/repo-manifest'); | |||
| repomanifest = require(manifestpath)() | |||
| chessinstances = chessinstances || {}; | |||
| chessinstances[selected.instanceName] = chessinstances[selected.instanceName] || {} | |||
| chessinstances[selected.instanceName][selected.node_env] = chessinstances[selected.instanceName][selected.node_env] || {} | |||
| chessinstances['current_run'] = { instanceName: selected.instanceName, node_env: selected.node_env } | |||
| selectedinstance = require(manifestpath)() | |||
| // Config from server always override merges into selection ecept for the current selection. | |||
| // PB : TODO -- utils.assign Array merges are non-distinct... | |||
| selectedinstance = utils.assign(chessinstances[selected.instanceName][selected.node_env], selected, repomanifest) | |||
| // chessinstances[selectedinstance.instanceName][selectedinstance.node_env] = selectedinstance; | |||
| cacheWriteInstanceConfig(chessinstances) | |||
| selectedinstance = chessinstances[selected.instanceName][selected.node_env] | |||
| // PB : TODO -- We should probably write the new server config also... | |||
| if(!selectedinstance.repos[0].repo) { | |||
| console.warn('repo manifest has obsolete format. Attempting upgrade.') | |||
| selectedinstance.repos = selectedinstance.repos.map(function(repo){ return { repo } }) | |||
| } | |||
| if(selectedinstance.elevated[0] && !selectedinstance.elevated[0].repo) { | |||
| 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(selected, selectedinstance) | |||
| selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online... | |||
| cacheWriteInstanceConfig(chessinstances) | |||
| ENV.NODE_ENV = selectedinstance.node_env; | |||
| }) | |||
| .catch((e) => { | |||
| @@ -2317,20 +2306,45 @@ var chessinstances = { current_run : {} }; | |||
| acquireElevationState().then(() => { | |||
| var skipprerequisites = false; | |||
| var clioverrides = { } | |||
| function initinstances(chessinstances, selected) { | |||
| chessinstances.current_run.instanceName = processedArgs._[1] = processedArgs._[1] || chessinstances.current_run.instanceName || selected.instanceName; | |||
| chessinstances.current_run.node_env = processedArgs.node_env = processedArgs.node_env || chessinstances.current_run.node_env || selected.node_env; | |||
| chessinstances[chessinstances.current_run.instanceName] = chessinstances[chessinstances.current_run.instanceName] || {} | |||
| function initinstances(selected) { | |||
| // PB : TODO -- processedArgs should already be part of selected. | |||
| var instanceName = processedArgs._[1] = processedArgs._[1] || chessinstances.current_run.instanceName || selected.instanceName; | |||
| var node_env = processedArgs.node_env = processedArgs.node_env || chessinstances.current_run.node_env || selected.node_env; | |||
| chessinstances['current_run'] = chessinstances[instanceName][selected.node_env] ? | |||
| { instanceName: instanceName, node_env: node_env } : chessinstances['current_run'] | |||
| // chessinstances[chessinstances.current_run.instanceName] = chessinstances[chessinstances.current_run.instanceName] || {} | |||
| if(path.normalize(selected.root) !== path.normalize(chessinstances[instanceName][node_env].root)) { | |||
| throw "Mismatched chessinstances config found " + chessinstances[instanceName][node_env].root + ' does not match ' + selected.root | |||
| } | |||
| // Override sequence. | |||
| // __default, chessinstances[current_run], instanceName-config-development, cliargs, interactve_promts | |||
| selectedinstance = Object.assign( | |||
| selected | |||
| , chessinstances[chessinstances.current_run.instanceName][chessinstances.current_run.node_env] | |||
| , chessinstances[instanceName][node_env] | |||
| , clioverrides | |||
| // , __interactve_promts -- Cant just override. Also need selectedinstance to be ready... | |||
| ); | |||
| repomanifest = selectedinstance | |||
| chessinstances[instanceName] = chessinstances[instanceName] || {} | |||
| chessinstances[instanceName][node_env] = chessinstances[instanceName][node_env] || {} | |||
| if(!selectedinstance.repos[0].repo) { | |||
| console.warn('repo manifest has obsolete format. Attempting upgrade.') | |||
| selectedinstance.repos = selectedinstance.repos.map(function(repo){ return { repo } }) | |||
| } | |||
| if(selectedinstance.elevated[0] && !selectedinstance.elevated[0].repo) { | |||
| console.warn('elevated repo manifest has obsolete format. Attempting upgrade.') | |||
| selectedinstance.elevated = selectedinstance.elevated.map(function(repo){ return { repo } }) | |||
| } | |||
| // Config from server always override merges into selection except for the current selection. | |||
| // PB : TODO -- utils.assign Array merges are non-distinct... | |||
| chessinstances[instanceName][node_env] = selectedinstance = utils.assign(selected, selectedinstance) | |||
| // chessinstances[selectedinstance.instanceName][selectedinstance.node_env] = selectedinstance; | |||
| cacheWriteInstanceConfig(chessinstances) | |||
| // PB : TODO -- We should probably write the new server config also... | |||
| selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online... | |||
| return chessinstances | |||
| } | |||
| function acquirelocalinstances(selected){ | |||
| @@ -2348,14 +2362,14 @@ acquireElevationState().then(() => { | |||
| // Default cmd to run ! | |||
| processedArgs._[0] === processedArgs._[0] || 'pull'; | |||
| // selectedinstance.reposerver = repomanifest.reposervers[0] // PB : TODO -- Attempt first one that is available and online from all that are available... | |||
| // selectedinstance.reposerver = selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online from all that are available. | |||
| if(!noprerequisites[processedArgs._[0]] | |||
| && !skipprereqs[processedArgs._[0]] | |||
| ) { | |||
| return prerequisites.git.verifyAndInstall().then(()=>{ | |||
| var e = { message : 'verifyAndInstall', success : true} | |||
| return acquireConfig(selectedinstance, chessinstances).catch((err) => { | |||
| return acquireConfig(selectedinstance).catch((err) => { | |||
| e = err; | |||
| console.error('Chosen cofiguraton failed or not found. Fix config and rerun or chose another.') | |||
| console.error(err) | |||
| @@ -2418,7 +2432,7 @@ acquireElevationState().then(() => { | |||
| } | |||
| try { | |||
| chessinstances = acquirelocalinstances(selectedinstance); | |||
| initinstances(chessinstances, selectedinstance) | |||
| initinstances(selectedinstance) | |||
| var instanceNameChoices = new Set(Object.keys( chessinstances) ) | |||
| instanceNameChoices.delete('current_run') | |||
| @@ -2441,7 +2455,7 @@ acquireElevationState().then(() => { | |||
| catch (e) { | |||
| console.error(e) // Missing chessinstances is not an error... | |||
| initinstances(chessinstances, selectedinstance) | |||
| initinstances(selectedinstance) | |||
| var instanceNameChoices = new Set(Object.keys( chessinstances) ) | |||
| instanceNameChoices.delete('current_run') | |||
| @@ -2466,7 +2480,7 @@ acquireElevationState().then(() => { | |||
| todo = todo.then(() => { | |||
| try { | |||
| chessinstances = acquirelocalinstances(selectedinstance) | |||
| initinstances(chessinstances, selectedinstance) | |||
| initinstances(selectedinstance) | |||
| } | |||
| catch (e) { | |||
| console.error(e) | |||