|
|
@@ -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) |