|  |  | @@ -629,11 +629,37 @@ var op = { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | dirs(perform_git_seturl) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , 'add': (remotename, url, branch) => { | 
		
	
		
			
			|  |  |  | , 'reset' : ()=>{ | 
		
	
		
			
			|  |  |  | // Reset the whole installation pertaining to this elxr folder. | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , 'remote add': (args) => { | 
		
	
		
			
			|  |  |  | // PB : TODO -- set-upstream-to should be chosen and intentionally switched. Coz we can have multiple upstream remotes. | 
		
	
		
			
			|  |  |  | // Also each upstream remote may need to have is own branch to switch to. We therefore need a branch nomenclature | 
		
	
		
			
			|  |  |  | // That explicitly has a remote name prefix. | 
		
	
		
			
			|  |  |  | // git branch branch_name --set-upstream-to your_new_remote/branch_name | 
		
	
		
			
			|  |  |  | // git branch branch_name -u your_new_remote/branch_name -- older versions | 
		
	
		
			
			|  |  |  | // git branch -vv -- Detect which branch are we tracking. | 
		
	
		
			
			|  |  |  | // default upstream should be users own fork. | 
		
	
		
			
			|  |  |  | // Also need alias branches to | 
		
	
		
			
			|  |  |  | // define a git alias which would git pull master from one repo, and then git pull master from other remotes. | 
		
	
		
			
			|  |  |  | // probably git merge from all remotes... and relevant branches... | 
		
	
		
			
			|  |  |  | // alias pushall='for i in `git remote`; do git push $i; done;' | 
		
	
		
			
			|  |  |  | // alias pullall='for i in `git remote`; do git pull $i; done;' | 
		
	
		
			
			|  |  |  | // args === processedArgs ? args = {} : null; | 
		
	
		
			
			|  |  |  | var __args = { | 
		
	
		
			
			|  |  |  | remotename : args.remotename|| processedArgs._[2] | 
		
	
		
			
			|  |  |  | , url : args.url || processedArgs._[3] | 
		
	
		
			
			|  |  |  | , branch : args.branch || processedArgs._[4] | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | var remotename = __args.remotename | 
		
	
		
			
			|  |  |  | var url = __args.url | 
		
	
		
			
			|  |  |  | var branch = __args.branch | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var pushable = processedArgs.pushable || false; | 
		
	
		
			
			|  |  |  | remotename = remotename || processedArgs._[1] | 
		
	
		
			
			|  |  |  | url = url || processedArgs._[2] | 
		
	
		
			
			|  |  |  | branch = branch || processedArgs._[3] | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var serial_perform_git_add = (repo) => { | 
		
	
		
			
			|  |  |  | var options = { cwd: instanceroot + '/' + repo } | 
		
	
		
			
			|  |  |  | // console.log(repo) | 
		
	
	
		
			
			|  |  | @@ -669,18 +695,18 @@ var op = { | 
		
	
		
			
			|  |  |  | nodeShellExec('git', ['remote', 'get-url', remotename], { cwd: dir.name, stdio: 'ignore' }).then(() => { | 
		
	
		
			
			|  |  |  | console.log('skipped : ' + dir.name + ', reason : A remote with same name already exists.') | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | .catch((e) => { | 
		
	
		
			
			|  |  |  | any(serial_perform_git_add(dir.name).map(x)) | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | .catch((e) => { | 
		
	
		
			
			|  |  |  | any(serial_perform_git_add(dir.name).map(x)) | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | // else console.log('Skipped : Not a Git Repo : ' + dir.name) | 
		
	
		
			
			|  |  |  | }).catch((e) => { | 
		
	
		
			
			|  |  |  | // console.log('Failed : ' + dir.name) | 
		
	
		
			
			|  |  |  | console.log('Failed : ' + dir.name) | 
		
	
		
			
			|  |  |  | }) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const { readdir } = require("fs").promises | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | dirs(perform_git_add) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | , 'remote remove': (args) => { | 
		
	
	
		
			
			|  |  | @@ -2310,9 +2336,12 @@ acquireElevationState().then(() => { | 
		
	
		
			
			|  |  |  | // 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[instanceName] = chessinstances[instanceName] || {} | 
		
	
		
			
			|  |  |  | chessinstances[instanceName][node_env] = chessinstances[instanceName][node_env] || selected; | 
		
	
		
			
			|  |  |  | 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] || {} | 
		
	
		
			
			|  |  |  | { instanceName: instanceName, node_env: node_env } : (chessinstances['current_run'] || { instanceName: instanceName, node_env: node_env }) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // 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 | 
		
	
	
		
			
			|  |  | @@ -2405,12 +2434,19 @@ acquireElevationState().then(() => { | 
		
	
		
			
			|  |  |  | processedArgs.node_env ? clioverrides.node_env = (process.env.NODE_ENV && process.env.NODE_ENV.trim()) || processedArgs.node_env | 
		
	
		
			
			|  |  |  | : (process.env.NODE_ENV && process.env.NODE_ENV.trim()) ? clioverrides.node_env = (process.env.NODE_ENV && process.env.NODE_ENV.trim()): null; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | clioverrides.reconfirm = processedArgs.reconfirm | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | selectedinstance = Object.assign(detectedInstance, clioverrides); | 
		
	
		
			
			|  |  |  | var todo = Promise.resolve(true); | 
		
	
		
			
			|  |  |  | var promptkeys = { 'instanceName' : processedArgs._[1] } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | var reconfirm = { | 
		
	
		
			
			|  |  |  | 'instanceName' : selectedinstance['instanceName'] === 'chess' | 
		
	
		
			
			|  |  |  | if(clioverrides.reconfirm) { | 
		
	
		
			
			|  |  |  | var reconfirm = { | 
		
	
		
			
			|  |  |  | 'instanceName' : selectedinstance['instanceName'] === 'chess' | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else { | 
		
	
		
			
			|  |  |  | var reconfirm = {}; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | var prompts = []; | 
		
	
		
			
			|  |  |  | var eachPrompt = function(k, i, a){ |