| // Or a single repo ( Either Elevated or normal. ) | // Or a single repo ( Either Elevated or normal. ) | ||||
| def = (def ? ( | |||||
| // def.requiresElevation = true, | |||||
| // def.repos = def.repos, | |||||
| // def.elevatedRepos = def.elevatedRunasRepos, | |||||
| def | |||||
| ) : false) || { | |||||
| def = def || { | |||||
| repos : repomanifest.repos, | repos : repomanifest.repos, | ||||
| elevatedRepos : repomanifest.elevated | |||||
| elevated : repomanifest.elevated | |||||
| } | } | ||||
| var elevatedpulltasks = null; | var elevatedpulltasks = null; | ||||
| var useGitPull = processedArgs.useGitPull || false; | var useGitPull = processedArgs.useGitPull || false; | ||||
| if(def.elevatedRepos || def.repos) { | |||||
| if(def.elevatedRepos) def.requiresElevation = true; | |||||
| if(def.elevated || def.repos) { | |||||
| if(def.elevated) def.requiresElevation = true; | |||||
| else delete def.requiresElevation; | else delete def.requiresElevation; | ||||
| } | } | ||||
| else { | else { | ||||
| if(def.requiresElevation) def.elevatedRepos = [def] | |||||
| if(def.requiresElevation) def.elevated = [def] | |||||
| else def.repos = [def] | else def.repos = [def] | ||||
| } | } | ||||
| var regularpulltasks = function(){ return Promise.resolve(true) } | var regularpulltasks = function(){ return Promise.resolve(true) } | ||||
| if(def.elevatedRepos){ | |||||
| if(def.elevated){ | |||||
| elevatedpulltasks = function() { | elevatedpulltasks = function() { | ||||
| return any(def.elevatedRepos.map((def) => performPull(def.repo))).then(() => { | |||||
| return any(def.elevated.map((def) => performPull(def.repo))).then(() => { | |||||
| return true; | return true; | ||||
| }).catch((e) => { | }).catch((e) => { | ||||
| console.error(e) | console.error(e) | ||||
| }) | }) | ||||
| } | } | ||||
| var mergeObjByKey = function(arrOfObjs, keyName) { | |||||
| var keyedDistinct = {} | |||||
| var distinctArrOfObjs = [] | |||||
| arrOfObjs.forEach( o => { | |||||
| if(o) (keyedDistinct[o[keyName]] || (keyedDistinct[o[keyName]] = []) ).push(o) | |||||
| }) | |||||
| Object.keys(keyedDistinct).forEach(key => { | |||||
| distinctArrOfObjs.push( utils.assign( ...keyedDistinct[key] ) ) // PB : TODO -- Shallow use utils.assign | |||||
| }) | |||||
| return distinctArrOfObjs; | |||||
| } | |||||
| var cacheWriteInstanceConfig = function(chessinstances){ | |||||
| var instanceName = chessinstances['current_run'].instanceName; | |||||
| var node_env = chessinstances['current_run'].node_env; | |||||
| chessinstances[instanceName][node_env].repos = mergeObjByKey(chessinstances[instanceName][node_env].repos, 'repo') ; | |||||
| chessinstances[instanceName][node_env].elevated = mergeObjByKey(chessinstances[instanceName][node_env].elevated, 'repo') ; | |||||
| fs.writeFileSync(instanceroot + '/chessinstances.js', 'module.exports = ' + JSON.stringify(chessinstances, null, 2) + '', { 'flag': 'w' }) | |||||
| } | |||||
| var acquireConfig = function (selected, chessinstances) { | var acquireConfig = function (selected, chessinstances) { | ||||
| var configrepo = selected.instanceName + '-config-' + selected.node_env; | var configrepo = selected.instanceName + '-config-' + selected.node_env; | ||||
| chessinstances[selected.instanceName][selected.node_env] = chessinstances[selected.instanceName][selected.node_env] || {} | chessinstances[selected.instanceName][selected.node_env] = chessinstances[selected.instanceName][selected.node_env] || {} | ||||
| chessinstances['current_run'] = { instanceName: selected.instanceName, node_env: selected.node_env } | chessinstances['current_run'] = { instanceName: selected.instanceName, node_env: selected.node_env } | ||||
| // Config from server always override merges into selection ecept for the current selection. | // 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) | selectedinstance = utils.assign(chessinstances[selected.instanceName][selected.node_env], selected, repomanifest) | ||||
| // chessinstances[selectedinstance.instanceName][selectedinstance.node_env] = selectedinstance; | // chessinstances[selectedinstance.instanceName][selectedinstance.node_env] = selectedinstance; | ||||
| fs.writeFileSync(instanceroot + '/chessinstances.js', 'module.exports = ' + JSON.stringify(chessinstances, null, 2) + '', { 'flag': 'w' }) | |||||
| cacheWriteInstanceConfig(chessinstances) | |||||
| selectedinstance = chessinstances[selected.instanceName][selected.node_env] | |||||
| // PB : TODO -- We should probably write the new server config also... | // 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... | selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online... | ||||
| ENV.NODE_ENV = selectedinstance.node_env; | ENV.NODE_ENV = selectedinstance.node_env; |