| @@ -130,17 +130,21 @@ catch(e) { | |||
| a.WriteLine("set PATH=%PATH%;" + codepath ) | |||
| // a.WriteLine("set LAUNCHEDWITHENV=YES" ) | |||
| var runningInExlr = function() { | |||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| var currentIsExlr = function() { | |||
| if(fs.FileExists('./' + __ALIAS__STAMP__)) return true | |||
| } | |||
| if(cfn === sfn && runningInExlr()) { | |||
| a.WriteLine("cd .."); | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||
| var runningInExlr = currentIsExlr() | |||
| if(cfn === sfn && runningInExlr) { | |||
| a.WriteLine("cd .."); | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||
| } | |||
| else { | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+sfn+" /all:true") | |||
| var guesselxr = fs.FileExists(cd + './elxr/' + __ALIAS__STAMP__) | |||
| if(guesselxr) { | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cd + './elxr/' + 'i.win.js' +" /all:true") | |||
| } | |||
| else a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+sfn+" /all:true") | |||
| } | |||
| // a.WriteLine("powershell.exe ^") | |||
| @@ -916,7 +920,7 @@ function __main( selectedinstance ){ | |||
| WScript.Echo(all) | |||
| if(!all && preq.optional) return | |||
| var p = preq.exists().then(function(exists) { | |||
| if (exists) console.log( preq.shellcmd + ' exists'); | |||
| if (exists && !preq.forceinstall) console.log( preq.shellcmd + ' exists'); | |||
| else { | |||
| console.log(exists) | |||
| console.log(preq.shellcmd + ' is not installed'); | |||
| @@ -972,6 +976,21 @@ function __main( selectedinstance ){ | |||
| }) | |||
| } | |||
| function install() { | |||
| var self = this; | |||
| var ifns = [self.installcmd] | |||
| if(!ifns.map) ifns.map = map; | |||
| console.log('Installing') | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| } | |||
| else throw e | |||
| }).then(function(){ | |||
| return self.postinstallsteps && self.postinstallsteps() | |||
| }) | |||
| } | |||
| function unique(arr) { | |||
| var hash = {}, result = []; | |||
| for ( var i = 0, l = arr.length; i < l; ++i ) { | |||
| @@ -1234,18 +1253,7 @@ function __main( selectedinstance ){ | |||
| , installcmd: ['MSIEXEC.exe', ['/i' | |||
| , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi') | |||
| , 'ACCEPT=YES', '/passive']] | |||
| , install : function() { | |||
| var self = this; | |||
| 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 | |||
| }) | |||
| } | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| @@ -1298,22 +1306,9 @@ function __main( selectedinstance ){ | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , install : function() { | |||
| var self = this; | |||
| var ifns = [self.installcmd] | |||
| if(!ifns.map) ifns.map = map; | |||
| console.log('Installing') | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| } | |||
| else throw e | |||
| }).then(function(){ | |||
| return self.postinstallsteps() | |||
| }) | |||
| } | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| } | |||
| , { | |||
| shellcmd: 'code' | |||
| @@ -1345,43 +1340,53 @@ function __main( selectedinstance ){ | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , install : function() { | |||
| var self = this; | |||
| var ifns = [self.installcmd] | |||
| if(!ifns.map) ifns.map = map; | |||
| console.log('Installing') | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| } | |||
| else throw e | |||
| }).then(function(){ | |||
| return self.postinstallsteps() | |||
| }) | |||
| } | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| } | |||
| , { | |||
| 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) | |||
| } | |||
| } | |||
| ) | |||
| 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') | |||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||
| //, 'ACCEPT=YES', '/passive' | |||
| ]] | |||
| , install : function() { | |||
| var self = this; | |||
| 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 | |||
| }) | |||
| } | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| @@ -1408,6 +1413,7 @@ function __main( selectedinstance ){ | |||
| } | |||
| , { | |||
| shellcmd: 'elxr' | |||
| , forceinstall : true | |||
| , installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' /* cwd should be the cloned dir*/}] | |||
| , preinstallsteps: function() { | |||
| var self = this; | |||
| @@ -1424,26 +1430,37 @@ function __main( selectedinstance ){ | |||
| console.log('Elxr Installsteps called') | |||
| var installIfNotExists = function(){ | |||
| console.log('Elxr PreInstallsteps called') | |||
| var ifns = [ | |||
| ['git', ['clone', 'http://git.bbh.org.in/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.' | |||
| var steps = []; | |||
| var chessRepo = 'https://git.bbh.org.in' | |||
| steps.push( | |||
| 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){ chessRepo = choice } ) | |||
| } | |||
| } | |||
| else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') | |||
| ifns.push(['npm', ['i'], { cwd : '.\\elxr' } ]) | |||
| if(!ifns.map) ifns.map = map; | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| ) | |||
| return any(steps).then(function(chessRepo){ | |||
| var ifns = [ | |||
| ['git', ['clone', chessRepo + '/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 ') | |||
| ifns.push(['npm', ['i'], { cwd : '.\\elxr' } ]) | |||
| 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 ] | |||
| @@ -1460,8 +1477,8 @@ function __main( selectedinstance ){ | |||
| , install: function () { | |||
| var self = this; | |||
| console.log('Elxr Install called') | |||
| return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() } | |||
| , nodeShellExec('node', [selectedinstance.root + '\\elxr\\index.js', 'init']) | |||
| return any([ self.preinstallsteps, function(){ return self.installsteps() } | |||
| , nodeShellExec('start', ['""', '"C:\\Program Files\\Git\\bin\\sh.exe"', '-c', '"node ' + (selectedinstance.root + '\\elxr\\index.js').replace(/\\/g, '/') + ' i elixir"']) | |||
| // , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) | |||
| ]) | |||
| } | |||