| 
				
			 | 
			
			 | 
			@@ -172,6 +172,15 @@ var getPullCmd = (repo, branch) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  // console.log(useGitPull)var getPullCmd = (repo, branch) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  // console.log(useGitPull) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  var pullCmd = [] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  if(!branch) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // console.warn('No branch was specified detecting from working client.') | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // First check if working client exits. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // if (existsSync(instanceroot + '/' + repo)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      pullCmd= gitops.getdiscoverbranchcmd(repo) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // else performpull | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  // var pullCmd = [gitInstallDir | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  //   , ['-c', 'branch=`git rev-parse --abbrev-ref HEAD`;for i in `git remote`; do git pull $i $branch; done;'] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  //   , { cwd: instanceroot + '/' + repo, title: 'pull all origins for ' + repo }] | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -181,14 +190,6 @@ var getPullCmd = (repo, branch) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , ['-c', 'for i in `git remote`; do git pull $i ' + branch + '; done;'] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , { cwd: instanceroot + '/' + repo, title : 'pull all origins for ' + branch + '  ' + repo + ' ' + parameters.join(' ') }] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // 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) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // else performpull | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  // var pullCmd = ['pullall', [], { cwd : repo }] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  if (useGitPull) pullCmd = ['git', ['pull'], { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    inherit: true, shell: true, | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -667,6 +668,61 @@ var op = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  , 'reset' : ()=>{  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // Reset the whole installation pertaining to this elxr folder. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  , 'remote exists': (args) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    var __args = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        remotename : args.remotename|| processedArgs._[2] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , url : args.url || processedArgs._[3] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , branch : args.branch || processedArgs._[4] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    var command = ['git', ['remote', '-v']] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return nodeShellExec.apply(null, command).then(result=>{  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      return result.messages.find( (r)=> { return r.includes( __args.remotename )  }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  , 'remote refresh': (args) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    var __args = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        remotename : args.remotename|| processedArgs._[2] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , url : args.url || processedArgs._[3] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , branch : args.branch || processedArgs._[4] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // use the repo manifest to create missing remotes. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    function perform_remote_refresh(dir){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var repo = dir.name | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var dscoverbranchcmd = gitops.getdiscoverbranchcmd(repo) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      var remotes = require(`${dir.name}/repo-manifest.js`)( null, { repouser : selectedinstance.repouser }).remotes; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      return nodeShellExec.apply(null, dscoverbranchcmd(repo)).then(__branch=>{  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        var branch = __branch | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        var promises = [] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        remotes.foreach(remote =>{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          Object.keys(remote).forEach(remotename => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            promises.push( op['remote exists'].then( exists => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if(!exits) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  return op['remote add']( { remotename,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    // PB : TODO -- use the most accessible remote instead of the first available. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    url : (utils.js.isArray(remote[remotename]) ? remote[remotename][0] : remote[remotename]), branch  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                  } ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			              }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return Promise.all(promises) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      .catch((e) => { console.error(e); return { error: true, message: repo } }) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    dirs(perform_remote_refresh) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  , 'remote add': (args) => { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // PB : TODO -- set-upstream-to should be chosen and intentionally switched. Coz we can have multiple upstream remotes. | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -905,7 +961,7 @@ var op = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    var cmdseq = [ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // create a temporary working dir in current folder where we started execution. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ['mkdir', [ '-p', 'relocate']] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ['mkdir', [ '-p', `${instanceroot}/relocate`]] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , ['git', ['clone', `${args.remotebase}${args.sourcerepo}`], options ] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , ['git', ['clone', `${args.sourcerepo}`, `relocate-${args.sourcerepo}-${args.folder}`], options] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , ['git', ['clone', `${args.remotebase}${args.targetrepo}`, `relocate-${args.targetrepo}-${args.folder}`], options] | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -1756,6 +1812,36 @@ var elxr = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // Or an object with many repos and elevated repos | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // Or a single repo ( Either Elevated or normal. ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // USAGE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // elxr pull elixir origin master | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // elxr pull | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // not all remote branches are setup to be tracked locally (respective remotes and branches).  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // pull --all is useless. As it fetches all remotes and branches but only merges current branch.   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // apart from remote tracking branches We are interested in pulling from all remotes and relavant branches. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      // The branch pipline should feed back to master | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      //   master -> test -> stage -> release[nnnn] -> production | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      //   (master) <= git merge [all remotes] production && git merge [all remotes] release[nnnn] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // git merge [all remotes] stage && git merge [all remotes] test  && git merge [all remotes] master  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    var __args = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        remotename : args.remotename|| processedArgs._[2] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , url : args.url || processedArgs._[3] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      , branch : args.branch || processedArgs._[4]  // If branch not specified opearte on the current branch of each working directorys | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // var commands = [ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    //     // ['git', ['checkout', __args.branch || checkoutMap[runconfig.NODE_ENV] || runconfig.NODE_ENV]] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    //   ,  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // ] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // var parameters = ['-c', 'for i in `git remote`; do git pull $i ' + branch + '; done;'] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // var pullCmd = [ gitbash | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    //   , ['-c', 'for i in `git remote`; do git pull $i ' + branch + '; done;'] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    //   , { cwd: instanceroot + '/' + repo, title : 'pull all origins for ' + branch + '  ' + repo + ' ' + parameters.join(' ') }] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    def = def || { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      repos : selectedinstance.repos, | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -2274,6 +2360,7 @@ var __interactive_prompts = function( target, choices ){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    , instanceName : { label : `Enter Instance Name ( <= ${target.instanceName || 'chess'} ) : `, choices : [], defaultchoice : 'chess'} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    , instanceType : { label : `Enter Instance Type ( <= ${target.instanceType || 'development'} ) : `, choices : [], defaultchoice : 'development'} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    , reposerver   : { label : `Enter Instance Name ( <= ${target.reposerver || 'https://git.bbh.org.in'} ) : `, choices : [], defaultchoice : 'https://git.bbh.org.in'} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    , repouser   : { label : `Enter User Id for ${target.reposerver} ( <= ${target.repouser || 'chess'} ) : `, choices : [], defaultchoice : 'chess'} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  var eachPrompt = getBoundEachPrompt( target, promptkeys, interactionpoints, choices) |