|
|
@@ -59,7 +59,8 @@ try { |
|
|
|
|
|
|
|
// -------------------------------------------- |
|
|
|
|
|
|
|
var selectedinstance = { root : path.resolve(".") } |
|
|
|
// PB : TODO -- This should be parent dir if elxr is already installed. |
|
|
|
var selectedinstance = { root : path.resolve(".") } |
|
|
|
__main(selectedinstance) |
|
|
|
|
|
|
|
|
|
|
@@ -789,7 +790,10 @@ catch(e) { |
|
|
|
function __main( selectedinstance ){ |
|
|
|
var downloadsdir = selectedinstance.root + '/Downloads'; |
|
|
|
|
|
|
|
var callsheltask = function(args) { return function() { return nodeShellExec.apply(null, args) } } |
|
|
|
var callsheltask = function(args) { |
|
|
|
// console.log('callsheltask : ' + args) |
|
|
|
return function() { |
|
|
|
return nodeShellExec.apply(null, args) } } |
|
|
|
var gitUser = 'guest'; |
|
|
|
var gitEmail = 'guest@bbh.org.in'; |
|
|
|
|
|
|
@@ -936,6 +940,15 @@ function __main( selectedinstance ){ |
|
|
|
// , nodeShellExec('set', [/*'/m',*/ 'PATH', '"%PATH%;' + newpath + '"' ]) |
|
|
|
] ); |
|
|
|
} |
|
|
|
|
|
|
|
var getCmdString = function(args){ return args[0] + ' ' + args[1].join(' ') } |
|
|
|
|
|
|
|
var getgitshelltask = function(args, onEachError) { return function(){ |
|
|
|
console.log('----------getgitshelltask--------------called') |
|
|
|
return nodeShellExec( "cmd", ['/c', getCmdString(args)], args[2]) |
|
|
|
// .catch( onEachError || function(e){ console.error(e) }) |
|
|
|
} |
|
|
|
} |
|
|
|
var prerequisites = [ |
|
|
|
{ |
|
|
|
shellcmd: 'git', |
|
|
@@ -951,20 +964,20 @@ function __main( selectedinstance ){ |
|
|
|
console.log('Git preinstall steps') |
|
|
|
|
|
|
|
var steps = []; |
|
|
|
steps.push( |
|
|
|
function(){ |
|
|
|
// console.log('cli prompt steps') |
|
|
|
var choices = { 0 : 'guest', 1 : 'chessdemo' } |
|
|
|
return cli.prompt(choices, 'git user name', gitUser).then(function(choice){ gitUser = choice } ) |
|
|
|
} |
|
|
|
) |
|
|
|
// steps.push( |
|
|
|
// function(){ |
|
|
|
// // console.log('cli prompt steps') |
|
|
|
// var choices = { 0 : 'guest', 1 : 'chessdemo' } |
|
|
|
// return cli.prompt(choices, 'git user name', gitUser).then(function(choice){ gitUser = choice } ) |
|
|
|
// } |
|
|
|
// ) |
|
|
|
|
|
|
|
steps.push( |
|
|
|
function(){ |
|
|
|
var choices = { 0 : 'guest@bbh.org.in', 1 : 'chessdemo@bbh.org.in' } |
|
|
|
return cli.prompt(choices, 'git user email', gitEmail).then(function(choice){ gitEmail = choice }) |
|
|
|
} |
|
|
|
) |
|
|
|
// steps.push( |
|
|
|
// function(){ |
|
|
|
// var choices = { 0 : 'guest@bbh.org.in', 1 : 'chessdemo@bbh.org.in' } |
|
|
|
// return cli.prompt(choices, 'git user email', gitEmail).then(function(choice){ gitEmail = choice }) |
|
|
|
// } |
|
|
|
// ) |
|
|
|
steps.push( |
|
|
|
function(){ |
|
|
|
if (!existsSync(downloadsdir + '/' + self.installer)) { |
|
|
@@ -1024,7 +1037,95 @@ function __main( selectedinstance ){ |
|
|
|
, install: function () { |
|
|
|
var self = this; |
|
|
|
console.log('Git Install called') |
|
|
|
return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() }, function(){ return self.postinstallsteps() } ]) |
|
|
|
|
|
|
|
var createTasq = function(args, shellT, onEachError) { |
|
|
|
var tasq = shellT ? shellT(args) : ( function(){ |
|
|
|
console.log('sdsfdsdf ' + args) |
|
|
|
return any([nodeShellExec.apply(null, args)]) |
|
|
|
// .catch( onEachError || function(e){ console.error(e) } ) |
|
|
|
}) |
|
|
|
tasq.toString = function(){ return JSON.stringify(args)} |
|
|
|
return tasq; |
|
|
|
} |
|
|
|
|
|
|
|
var execserial = function(tasklist, task, shellT, onEachError){ |
|
|
|
var exec = function(taskArgs){ |
|
|
|
console.log('execcing ' + task) |
|
|
|
var thistask = task.concat(); |
|
|
|
thistask[1] = thistask[1].concat() |
|
|
|
thistask[1].push.apply(thistask[1], taskArgs) |
|
|
|
return createTasq(thistask, shellT) |
|
|
|
} |
|
|
|
|
|
|
|
tasklist.map = map |
|
|
|
console.log('execlist ' + tasklist.map(exec)) |
|
|
|
return any(tasklist.map(exec)) |
|
|
|
} |
|
|
|
|
|
|
|
function resetgitconfig(){ |
|
|
|
|
|
|
|
// https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage |
|
|
|
// Git Credential storage... |
|
|
|
// git config --global credential.helper 'store --file ~/.gitcredentials' |
|
|
|
// git credential-store --file ~/.gitcredentials store |
|
|
|
// // notepad C:/Program Files/Git/etc/gitconfig |
|
|
|
// git config --global --unset credential |
|
|
|
// git config --edit --system |
|
|
|
// git config --global credential.helper "store --file ~/gitcredentials" |
|
|
|
// git credential fill |
|
|
|
// git credential-store --file ~/git.store store |
|
|
|
|
|
|
|
// Find system git config |
|
|
|
// git config --global --edit |
|
|
|
// git config --list --show-origin |
|
|
|
// git config --list --show-origin --show-scope |
|
|
|
|
|
|
|
|
|
|
|
// https://stackoverflow.com/questions/35942754/how-can-i-save-username-and-password-in-git |
|
|
|
// Recipie |
|
|
|
// git config --global --unset credentials.helper |
|
|
|
// cd /path/to/my/repo |
|
|
|
// git config --unset credential.helper |
|
|
|
// git config credential.helper 'store --file ~/.git_repo_credentials' |
|
|
|
// git config credential.*.username my_user_name |
|
|
|
// git config credential.https://gitlab.com.username my_user_name |
|
|
|
|
|
|
|
// git credential fill |
|
|
|
// git config --global credential.modalprompt false // doesnst work. |
|
|
|
// core askpass = ;;; https://stackoverflow.com/questions/37182847/how-do-i-disable-git-credential-manager-for-windows |
|
|
|
var options = { |
|
|
|
inherit: true, shell: true //, env: process.env |
|
|
|
, cwd: selectedinstance.root |
|
|
|
// , runas: processedArgs.runas |
|
|
|
} |
|
|
|
|
|
|
|
var task = ['git', ['config'], options] |
|
|
|
|
|
|
|
var tasklist = [ |
|
|
|
// ['--global', '--unset credentials.helper'] |
|
|
|
// ['--unset', 'credentials.helper'] |
|
|
|
// , |
|
|
|
// ['credential.helper', `'store --file git_repo_credentials'`] |
|
|
|
['--global', 'credential.helper', "'store --file ~/.git_repo_credentials'"] |
|
|
|
, ['--global', '--replace-all', 'user.name', 'pb'] |
|
|
|
, ['--global', '--replace-all', 'user.email', 'pradeep@bbh.org.in'] |
|
|
|
|
|
|
|
// , ['--list'] |
|
|
|
// , ['credential', 'fill'] |
|
|
|
] |
|
|
|
var onEachError = function(e) { console.error( e.messages.join('\n') + e.result + '\n' + util.inspect(e) + '\n') } |
|
|
|
var shellT = function(args) { |
|
|
|
return getgitshelltask(args, onEachError) |
|
|
|
// .catch(e => console.error( e.messages.join('\n') + e.result + '\n' + util.inspect(e) + '\n' + tasq.toString()) ) |
|
|
|
} |
|
|
|
execserial(tasklist, task, shellT, onEachError ) |
|
|
|
} |
|
|
|
|
|
|
|
return any([ /*self.preinstallsteps,*/ |
|
|
|
function(){ return self.installsteps() } |
|
|
|
, function() { resetgitconfig() } |
|
|
|
, function(){ return self.postinstallsteps() } |
|
|
|
]) |
|
|
|
} |
|
|
|
, verifyAndInstall : function(){ |
|
|
|
var self = this; |
|
|
@@ -1113,6 +1214,7 @@ function __main( selectedinstance ){ |
|
|
|
, installcmd: ['MSIEXEC.exe', ['/i' |
|
|
|
, path.normalize(downloadsdir + '/' + 'python-2.7.18.amd64.msi') |
|
|
|
, 'ACCEPT=YES', '/passive']] |
|
|
|
// , preinstallsteps : function() { return Promise.resolve(true) } |
|
|
|
, preinstallsteps: function() { |
|
|
|
var self = this; |
|
|
|
console.log(self.shellcmd + ' preinstall steps') |
|
|
@@ -1155,13 +1257,14 @@ function __main( selectedinstance ){ |
|
|
|
, { |
|
|
|
shellcmd: 'code' |
|
|
|
, optional : true |
|
|
|
, url: 'https://az764295.vo.msecnd.net/stable/c722ca6c7eed3d7987c0d5c3df5c45f6b15e77d1/VSCodeUserSetup-x64-1.65.2.exe' |
|
|
|
, url: 'https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user' |
|
|
|
, installer: 'VSCodeUserSetup-x64-1.65.2.exe' |
|
|
|
, installcmd: ['cmd', ['/c', 'start', |
|
|
|
'/WAIT', downloadsdir + '/' + 'VSCodeUserSetup-x64-1.65.2.exe' |
|
|
|
, '/VERYSILENT' |
|
|
|
// , '/MERGETASKS=!runcode' // This is required only for vscode... |
|
|
|
]] |
|
|
|
// , preinstallsteps : function() { return Promise.resolve(true) } |
|
|
|
, preinstallsteps: function() { |
|
|
|
var self = this; |
|
|
|
console.log(self.shellcmd + ' preinstall steps') |
|
|
@@ -1202,7 +1305,7 @@ function __main( selectedinstance ){ |
|
|
|
, exists : exists |
|
|
|
} |
|
|
|
, { |
|
|
|
shellcmd: 'elxr' |
|
|
|
shellcmd: 'elxr' |
|
|
|
, installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' /* cwd should be the cloned dir*/}] |
|
|
|
, preinstallsteps: function() { |
|
|
|
var self = this; |
|
|
@@ -1210,46 +1313,52 @@ function __main( selectedinstance ){ |
|
|
|
|
|
|
|
var steps = []; |
|
|
|
steps.push( |
|
|
|
function(){ |
|
|
|
console.log('Elxr PreInstallsteps called') |
|
|
|
var ifns = [ ['git', ['clone', 'http://git.bbh/chess\\elxr'] ] ] |
|
|
|
if(existsSyncFolder( selectedinstance.root + '\\elxr')) { |
|
|
|
if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { |
|
|
|
// PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. |
|
|
|
ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] |
|
|
|
} |
|
|
|
else { |
|
|
|
throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' |
|
|
|
} |
|
|
|
} |
|
|
|
else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') |
|
|
|
if(!ifns.map) ifns.map = map; |
|
|
|
return any(ifns.map(callsheltask))['catch'](function(e){ |
|
|
|
if(e.code === 1602) { |
|
|
|
console.warn("Installation was probably cancelled.") |
|
|
|
} |
|
|
|
else throw e |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
) |
|
|
|
return any([any(steps)]) |
|
|
|
} |
|
|
|
, installsteps: function () { |
|
|
|
var self = this; |
|
|
|
console.log('Elxr Installsteps called') |
|
|
|
var ifns = [self.installcmd] |
|
|
|
if(!ifns.map) ifns.map = map; |
|
|
|
return any(ifns.map(callsheltask))['catch'](function(e){ |
|
|
|
if(e.code === 1602) { |
|
|
|
console.warn("Installation was probably cancelled.") |
|
|
|
var installIfNotExists = function(){ |
|
|
|
console.log('Elxr PreInstallsteps called') |
|
|
|
var ifns = [ ['git', ['clone', 'http://git.bbh/chess/elxr'] ] ] |
|
|
|
if(existsSyncFolder( selectedinstance.root + '\\elxr')) { |
|
|
|
if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { |
|
|
|
// PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. |
|
|
|
ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] |
|
|
|
} |
|
|
|
else { |
|
|
|
throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' |
|
|
|
} |
|
|
|
} |
|
|
|
else throw e |
|
|
|
else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') |
|
|
|
if(!ifns.map) ifns.map = map; |
|
|
|
return any(ifns.map(callsheltask))['catch'](function(e){ |
|
|
|
if(e.code === 1602) { |
|
|
|
console.warn("Installation was probably cancelled.") |
|
|
|
} |
|
|
|
else throw e |
|
|
|
}) |
|
|
|
} |
|
|
|
var ifns = [ self.installcmd ] |
|
|
|
if(!ifns.map) ifns.map = map; |
|
|
|
return installIfNotExists().then(function(){ |
|
|
|
return any(ifns.map(callsheltask))['catch'](function(e){ |
|
|
|
if(e.code === 1602) { |
|
|
|
console.warn("Installation was probably cancelled.") |
|
|
|
} |
|
|
|
else throw e |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
, install: function () { |
|
|
|
var self = this; |
|
|
|
console.log('Elxr Install called') |
|
|
|
return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() } ]) |
|
|
|
return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() } |
|
|
|
, nodeShellExec('node', [selectedinstance.root + '\\elxr\\index.js', 'init']) |
|
|
|
// , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) |
|
|
|
]) |
|
|
|
} |
|
|
|
// , exists : function(){ |
|
|
|
// console.log('Elxr PreInstallsteps called') |