| @@ -1032,454 +1032,453 @@ function __main( selectedinstance ){ | |||
| } | |||
| } | |||
| var prerequisites = [ | |||
| // { | |||
| // shellcmd: 'git', | |||
| // url: 'https://github.com/git-for-windows/git/releases/download/v2.33.0.windows.2/Git-2.33.0.2-64-bit.exe' | |||
| // , installer: 'Git-2.33.0.2-64-bit.exe' | |||
| // , installcmd: ['cmd', ['/c', 'start', | |||
| // '/WAIT', downloadsdir + '/' + 'Git-2.33.0.2-64-bit.exe' | |||
| // , '/VERYSILENT' | |||
| // // , '/MERGETASKS=!runcode' // This is required only for vscode... | |||
| // ]] | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('Git preinstall steps') | |||
| { | |||
| shellcmd: 'git', | |||
| url: 'https://github.com/git-for-windows/git/releases/download/v2.33.0.windows.2/Git-2.33.0.2-64-bit.exe' | |||
| , installer: 'Git-2.33.0.2-64-bit.exe' | |||
| , installcmd: ['cmd', ['/c', 'start', | |||
| '/WAIT', downloadsdir + '/' + 'Git-2.33.0.2-64-bit.exe' | |||
| , '/VERYSILENT' | |||
| // , '/MERGETASKS=!runcode' // This is required only for vscode... | |||
| ]] | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| 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 } ) | |||
| // // } | |||
| // // ) | |||
| 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(){ | |||
| // // 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)) { | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer]) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // , installsteps: function () { | |||
| // var self = this; | |||
| // console.log('Git 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.") | |||
| // } | |||
| // else throw e | |||
| // }) | |||
| // } | |||
| // , postinstallsteps: function(){ | |||
| // 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)) { | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer]) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , installsteps: function () { | |||
| var self = this; | |||
| console.log('Git 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.") | |||
| } | |||
| else throw e | |||
| }) | |||
| } | |||
| , postinstallsteps: function(){ | |||
| // // PB : TODO -- Detect failure or cancellation before attenpting postinstall steps... | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // var choices = { 0 : 'guest', 1 : 'chessdemo' } | |||
| // return cli.prompt(choices, 'git user name', gitUser).then(function(choice){ gitUser = choice } ) | |||
| // } | |||
| // ) | |||
| // PB : TODO -- Detect failure or cancellation before attenpting postinstall steps... | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| 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 }) | |||
| } | |||
| ) | |||
| // return any(steps).then(function(){ | |||
| // var steps = [ | |||
| // ['git', ['config', '--global', '--add', 'user.name', gitUser]] | |||
| // , ['git', ['config', '--global', '--add', 'user.email', gitEmail]] | |||
| // ] | |||
| return any(steps).then(function(){ | |||
| var steps = [ | |||
| ['git', ['config', '--global', '--add', 'user.name', gitUser]] | |||
| , ['git', ['config', '--global', '--add', 'user.email', gitEmail]] | |||
| ] | |||
| // if(!steps.map) steps.map = map; | |||
| // return any(steps.map(callsheltask)).then(function(){ | |||
| if(!steps.map) steps.map = map; | |||
| return any(steps.map(callsheltask)).then(function(){ | |||
| // }) | |||
| // }); | |||
| // } | |||
| // , install: function () { | |||
| // var self = this; | |||
| // console.log('Git Install called') | |||
| }) | |||
| }); | |||
| } | |||
| , install: function () { | |||
| var self = this; | |||
| console.log('Git Install called') | |||
| // 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 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) | |||
| // } | |||
| 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)) | |||
| // } | |||
| tasklist.map = map | |||
| console.log('execlist ' + tasklist.map(exec)) | |||
| return any(tasklist.map(exec)) | |||
| } | |||
| // function resetgitconfig(){ | |||
| 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 | |||
| // 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 | |||
| // 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 | |||
| // 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 | |||
| // } | |||
| // 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 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'] | |||
| 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 ) | |||
| // } | |||
| // , ['--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; | |||
| // return self.exists().then( function(exits) { | |||
| // if(exists) return self.getUser(null, function(){ return self.postinstallsteps() } ) | |||
| // else return self.install(); | |||
| // }) | |||
| // } | |||
| // , exists : exists | |||
| // , getUser : function(repo, onNoResult){ | |||
| return any([ /*self.preinstallsteps,*/ | |||
| function(){ return self.installsteps() } | |||
| , function() { resetgitconfig() } | |||
| , function(){ return self.postinstallsteps() } | |||
| ]) | |||
| } | |||
| , verifyAndInstall : function(){ | |||
| var self = this; | |||
| return self.exists().then( function(exits) { | |||
| if(exists) return self.getUser(null, function(){ return self.postinstallsteps() } ) | |||
| else return self.install(); | |||
| }) | |||
| } | |||
| , exists : exists | |||
| , getUser : function(repo, onNoResult){ | |||
| // onNoResult = onNoResult || function(){return false} | |||
| // var globalOrLocal = '--global'; | |||
| // if(!repo) globalOrLocal = '--global'; | |||
| // else globalOrLocal = '--local' | |||
| // var fns = [['git', ['config', globalOrLocal, '--get-all', 'user.name']]] | |||
| // if(!ifns.map) ifns.map = map; | |||
| // return any(fns.map(callsheltask)).then(function(result){ | |||
| // // not yet configured. | |||
| // if(!result.success) return onNoResult() | |||
| // else { | |||
| // var users = result.messages[0].trim().split('\n'); | |||
| // if(users.length === 0 || | |||
| // users.length === 1 && users[0] === 'guest') { | |||
| onNoResult = onNoResult || function(){return false} | |||
| var globalOrLocal = '--global'; | |||
| if(!repo) globalOrLocal = '--global'; | |||
| else globalOrLocal = '--local' | |||
| var fns = [['git', ['config', globalOrLocal, '--get-all', 'user.name']]] | |||
| if(!ifns.map) ifns.map = map; | |||
| return any(fns.map(callsheltask)).then(function(result){ | |||
| // not yet configured. | |||
| if(!result.success) return onNoResult() | |||
| else { | |||
| var users = result.messages[0].trim().split('\n'); | |||
| if(users.length === 0 || | |||
| users.length === 1 && users[0] === 'guest') { | |||
| // return onNoResult() | |||
| // } | |||
| // else return users[0]; // PB : TODO == We should probably prompt with all the users available for selection ! | |||
| // } | |||
| // }) | |||
| // ['catch'](function(e){ | |||
| // console.log(e) | |||
| // return onNoResult() | |||
| // }) | |||
| // } | |||
| // } | |||
| // , | |||
| // { | |||
| // shellcmd: 'node', | |||
| // url: 'https://nodejs.org/dist/v14.17.6/node-v14.17.6-x64.msi' | |||
| // , installer: 'node-v14.17.3-x64.msi' | |||
| // , installcmd: ['MSIEXEC.exe', ['/i' | |||
| // , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi') | |||
| // , 'ACCEPT=YES', '/passive']] | |||
| // , install : install | |||
| // , exists : exists | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('Node preinstall steps') | |||
| return onNoResult() | |||
| } | |||
| else return users[0]; // PB : TODO == We should probably prompt with all the users available for selection ! | |||
| } | |||
| }) | |||
| ['catch'](function(e){ | |||
| console.log(e) | |||
| return onNoResult() | |||
| }) | |||
| } | |||
| } | |||
| , | |||
| { | |||
| shellcmd: 'node', | |||
| url: 'https://nodejs.org/dist/v14.17.6/node-v14.17.6-x64.msi' | |||
| , installer: 'node-v14.17.3-x64.msi' | |||
| , installcmd: ['MSIEXEC.exe', ['/i' | |||
| , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi') | |||
| , 'ACCEPT=YES', '/passive']] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log('Node preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // } | |||
| // , { | |||
| // shellcmd: 'python' | |||
| // , optional : true | |||
| // , url: 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi' | |||
| // , installer: 'python-2.7.18.amd64.msi' | |||
| // , installcmd: ['MSIEXEC.exe', ['/i' | |||
| // , path.normalize(downloadsdir + '/' + 'python-2.7.18.amd64.msi') | |||
| // , 'ACCEPT=YES', '/passive']] | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log(self.shellcmd + ' preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| } | |||
| , { | |||
| shellcmd: 'python' | |||
| , optional : true | |||
| , url: 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi' | |||
| , installer: 'python-2.7.18.amd64.msi' | |||
| , installcmd: ['MSIEXEC.exe', ['/i' | |||
| , path.normalize(downloadsdir + '/' + 'python-2.7.18.amd64.msi') | |||
| , 'ACCEPT=YES', '/passive']] | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log(self.shellcmd + ' preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // , install : install | |||
| // , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| // , exists : exists | |||
| // } | |||
| // , { | |||
| // shellcmd: 'code' | |||
| // , optional : true | |||
| // , 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() { | |||
| // var self = this; | |||
| // console.log(self.shellcmd + ' preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| } | |||
| , { | |||
| shellcmd: 'code' | |||
| , optional : true | |||
| , 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() { | |||
| var self = this; | |||
| console.log(self.shellcmd + ' preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // console.log(self.url) | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| console.log(self.url) | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // , install : install | |||
| // , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| // , exists : exists | |||
| // } | |||
| // , { | |||
| // shellcmd: 'sqlexpress', | |||
| // url: 'https://go.microsoft.com/fwlink/?linkid=866658' | |||
| // , installer: 'SQL2019-SSEI-Expr.exe' | |||
| // , installcmd: ['cmd', ['/c', 'start', | |||
| // '/WAIT', downloadsdir + '/' + 'SQL2019-SSEI-Expr.exe' | |||
| // , '/Quiet' | |||
| // //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| // ]] | |||
| // , install : install | |||
| // , exists : exists | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('Node preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| } | |||
| , { | |||
| shellcmd: 'sqlexpress', | |||
| url: 'https://go.microsoft.com/fwlink/?linkid=866658' | |||
| , installer: 'SQL2019-SSEI-Expr.exe' | |||
| , installcmd: ['cmd', ['/c', 'start', | |||
| '/WAIT', downloadsdir + '/' + 'SQL2019-SSEI-Expr.exe' | |||
| , '/Quiet' | |||
| //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log('Node preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // } | |||
| // , { | |||
| // shellcmd: 'Ssms2019.exe', | |||
| // url: 'https://aka.ms/ssmsfullsetup' | |||
| // , installer: 'SSMS-Setup-ENU.exe' | |||
| // , installcmd: ['cmd', ['/c', 'start', | |||
| // '/WAIT', downloadsdir + '/' + 'SSMS-Setup-ENU.exe' | |||
| // , '/Quiet' | |||
| // //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| // ]] | |||
| // , install : install | |||
| // , exists : exists | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('smss preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| } | |||
| , { | |||
| shellcmd: 'Ssms2019.exe', | |||
| url: 'https://aka.ms/ssmsfullsetup' | |||
| , installer: 'SSMS-Setup-ENU.exe' | |||
| , installcmd: ['cmd', ['/c', 'start', | |||
| '/WAIT', downloadsdir + '/' + 'SSMS-Setup-ENU.exe' | |||
| , '/Quiet' | |||
| //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log('smss preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // console.log(self.url) | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| console.log(self.url) | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // } | |||
| // , { | |||
| // shellcmd: 'Ssms.exe', | |||
| // url: 'https://go.microsoft.com/fwlink/?linkid=2043154&clcid=0x409' | |||
| // , installer: 'SSMS-Setup-ENU.exe' | |||
| // , installcmd: ['cmd', ['/c', 'start', | |||
| // '/WAIT', downloadsdir + '/' + 'SSMS-Setup-ENU.exe' | |||
| // , '/Quiet' | |||
| // //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| // ]] | |||
| // , install : install | |||
| // , exists : exists | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('smss preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| } | |||
| , { | |||
| shellcmd: 'Ssms.exe', | |||
| url: 'https://go.microsoft.com/fwlink/?linkid=2043154&clcid=0x409' | |||
| , installer: 'SSMS-Setup-ENU.exe' | |||
| , installcmd: ['cmd', ['/c', 'start', | |||
| '/WAIT', downloadsdir + '/' + 'SSMS-Setup-ENU.exe' | |||
| , '/Quiet' | |||
| //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log('smss preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // console.log(self.url) | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| console.log(self.url) | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // } | |||
| // , { | |||
| // shellcmd: 'mysql', | |||
| // url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.30.0.msi' //'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' | |||
| // , installer: 'mysql-installer-community-8.0.30.0.msi' | |||
| // , installcmd: ['MSIEXEC.exe', ['/i' | |||
| // , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||
| // //, 'ACCEPT=YES', '/passive' | |||
| // ]] | |||
| // , install : install | |||
| // , exists : exists | |||
| // , preinstallsteps: function() { | |||
| // var self = this; | |||
| // console.log('mysql preinstall steps') | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| } | |||
| , { | |||
| shellcmd: 'mysql', | |||
| url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.30.0.msi' //'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' | |||
| , installer: 'mysql-installer-community-8.0.30.0.msi' | |||
| , installcmd: ['MSIEXEC.exe', ['/i' | |||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||
| //, 'ACCEPT=YES', '/passive' | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| console.log('mysql preinstall steps') | |||
| // var steps = []; | |||
| // steps.push( | |||
| // function(){ | |||
| // if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| // console.log(self.url) | |||
| // return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer] | |||
| // , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| // } | |||
| // else { | |||
| // console.log(self.installer + ' Already exits Download skipped.') | |||
| // return Promise.resolve(true) | |||
| // } | |||
| // } | |||
| // ) | |||
| var steps = []; | |||
| steps.push( | |||
| function(){ | |||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||
| console.log(self.url) | |||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer] | |||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||
| } | |||
| else { | |||
| console.log(self.installer + ' Already exits Download skipped.') | |||
| return Promise.resolve(true) | |||
| } | |||
| } | |||
| ) | |||
| // return any(steps) | |||
| // // return any([any(steps), any(prompts)]) | |||
| // } | |||
| // } | |||
| // , | |||
| { | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| } | |||
| , { | |||
| shellcmd: 'elxr' | |||
| , forceinstall : true | |||
| , installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' /* cwd should be the cloned dir*/}] | |||
| @@ -1504,16 +1503,13 @@ function __main( selectedinstance ){ | |||
| function(){ | |||
| // console.log('cli prompt steps') | |||
| var choices = { 0 : 'http://git.bbh', 1 : 'https://git.bbh.org.in' } | |||
| return cli.prompt(choices, 'git repository : ', chessRepo).then(function(choice){ | |||
| console.log( 'choice : ' + choice) | |||
| chessRepo = choice } ) | |||
| return cli.prompt(choices, 'git repository : ', chessRepo).then(function(choice){ chessRepo = choice } ) | |||
| } | |||
| ) | |||
| return any(steps).then(function(){ | |||
| return any(steps).then(function(chessRepo){ | |||
| var ifns = [ | |||
| ['git', ['clone', chessRepo + '/chess/elxr'] ] | |||
| ] | |||
| console.log( 'chessRepo : ' + chessRepo) | |||
| 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. | |||