|
|
@@ -1,4 +1,3 @@ |
|
|
|
|
|
|
|
var scripthostName = 'node' |
|
|
|
var __Promise = {}; |
|
|
|
var promises = []; |
|
|
@@ -41,7 +40,12 @@ try { |
|
|
|
|
|
|
|
// -------------------------------------------- |
|
|
|
// Node Exists. Lets launch ourselves in Node itself |
|
|
|
|
|
|
|
|
|
|
|
WScript = function(){} |
|
|
|
WScript.Echo = function(m){ |
|
|
|
console.log('Invalid Wscript') |
|
|
|
throw "Failed in Node Run." |
|
|
|
} |
|
|
|
var wait = function(ms, cb) {any |
|
|
|
return new __Promise(function(resolve){ setTimeout(resolve, ms) } ).then(function(){ cb() }); |
|
|
|
} |
|
|
@@ -49,13 +53,15 @@ try { |
|
|
|
var existsSync = require('fs').existsSync; |
|
|
|
var existsSyncFolder = existsSync |
|
|
|
var path = require('path'); |
|
|
|
console.log('before cliverse') |
|
|
|
var cli = require('./cliverse') |
|
|
|
var nodeShellExec = cli.nodeShellExec; |
|
|
|
console.log('before bbhverse') |
|
|
|
var utils = require('bbhverse'); |
|
|
|
var any = utils.any; |
|
|
|
var wait = setTimeout |
|
|
|
|
|
|
|
|
|
|
|
var any = utils.any; |
|
|
|
var wait = setTimeout |
|
|
|
|
|
|
|
// -------------------------------------------- |
|
|
|
|
|
|
@@ -97,7 +103,55 @@ catch(e) { |
|
|
|
|
|
|
|
// cscript elxr/i.win.js /all:true |
|
|
|
var all = WScript.Arguments.Named('all'); |
|
|
|
|
|
|
|
|
|
|
|
trim = function(str) { return str.replace(/^\s+|\s+$/g, ''); }; |
|
|
|
|
|
|
|
var fs = new ActiveXObject('Scripting.FileSystemObject'); |
|
|
|
var WshShell = WScript.CreateObject("WScript.Shell") |
|
|
|
var ENV = WshShell.Environment("Process") |
|
|
|
var sfn = WScript.ScriptFullName |
|
|
|
// WScript.Echo(sfn) |
|
|
|
var cd = fs.GetAbsolutePathName(".") |
|
|
|
var cfn = cd + '\\i.win.js' |
|
|
|
// WScript.Echo(cfn) |
|
|
|
var waslaunchedwithenv = trim(ENV.Item('LAUNCHEDWITHENV')); |
|
|
|
|
|
|
|
// for(e=new Enumerator(ENV); !e.atEnd(); e.moveNext()) WScript.echo(e.item(e)); |
|
|
|
if(waslaunchedwithenv !== "YES"){ |
|
|
|
|
|
|
|
var a = fs.CreateTextFile("launchwithenv.bat", true) |
|
|
|
a.WriteLine("@echo off") |
|
|
|
a.WriteLine("echo %PATH%") |
|
|
|
var gitpath = "C:\\Program Files\\Git\\cmd" |
|
|
|
var nodepath = "C:\\Program Files\\nodejs\\" |
|
|
|
var codepath = "C:\\Users\\Pradeep\\AppData\\Local\\Programs\\Microsoft VS Code\\bin" |
|
|
|
a.WriteLine("set PATH=%PATH%;" + gitpath ) |
|
|
|
a.WriteLine("set PATH=%PATH%;" + nodepath ) |
|
|
|
a.WriteLine("set PATH=%PATH%;" + codepath ) |
|
|
|
// a.WriteLine("set LAUNCHEDWITHENV=YES" ) |
|
|
|
|
|
|
|
var runningInExlr = function() { |
|
|
|
var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' |
|
|
|
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... |
|
|
|
} |
|
|
|
else { |
|
|
|
a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+sfn+" /all:true") |
|
|
|
} |
|
|
|
|
|
|
|
// a.WriteLine("powershell.exe ^") |
|
|
|
// a.WriteLine("[Environment]::GetEnvironmentVariable('Path')" ) |
|
|
|
a.Close() |
|
|
|
WshShell.run("cmd /k launchwithenv.bat") |
|
|
|
WScript.Quit() |
|
|
|
// WshShell.run("powershell -noexit [Environment]::GetEnvironmentVariable(\"\"Path\"\"\) ") |
|
|
|
// WshShell.run("powershell -noexit [Environment]::SetEnvironmentVariable(\"\"Path\"\", $env:Path + \"\";C:\\tttt\"\", \"\"Machine\"\"\) ") |
|
|
|
} |
|
|
|
|
|
|
|
console = { |
|
|
|
log : function(m) { WScript.Echo(m)} |
|
|
|
, error : function(m) {WScript.Echo(m) } |
|
|
@@ -328,9 +382,18 @@ catch(e) { |
|
|
|
// promises.splice(0,1) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
function batchshellescape(str) { |
|
|
|
return str.replace('=', '^=') |
|
|
|
} |
|
|
|
|
|
|
|
function nodeShellExec(command, cargs, options){ |
|
|
|
|
|
|
|
// for(var arg=0; arg < cargs.length; arg++) { |
|
|
|
// // cargs[arg] = '"' + batchshellescape(cargs[arg]) +'"'; |
|
|
|
// cargs[arg] = '"' + cargs[arg] +'"'; |
|
|
|
// } |
|
|
|
|
|
|
|
var elevatedshellexecute = function(cmd, argstr){ |
|
|
|
shell.ShellExecute(cmd, argstr , "", "", 1); |
|
|
|
} |
|
|
@@ -339,6 +402,7 @@ catch(e) { |
|
|
|
|
|
|
|
var objShell = WScript.createobject("wscript.shell") |
|
|
|
// console.log(argstr.join( ' ')) |
|
|
|
console.log(cmd + ' ' + argstr.join(' ')) |
|
|
|
var oExec = objShell.Exec(cmd + ' ' + argstr.join(' ')) |
|
|
|
var result = {} |
|
|
|
var shellresult = { shell : objShell, result : result } |
|
|
@@ -473,7 +537,7 @@ catch(e) { |
|
|
|
// } |
|
|
|
// else { |
|
|
|
// console.log('There is no runfile.') |
|
|
|
// console.log(shellresult.strOutput) |
|
|
|
console.log(shellresult.strOutput) |
|
|
|
|
|
|
|
wrapup(shellresult.result) |
|
|
|
// } |
|
|
@@ -793,8 +857,7 @@ function __main( selectedinstance ){ |
|
|
|
|
|
|
|
var callsheltask = function(args) { |
|
|
|
// console.log('callsheltask : ' + args) |
|
|
|
return function() { |
|
|
|
return nodeShellExec.apply(null, args) } } |
|
|
|
return function() { return nodeShellExec.apply(null, args) } } |
|
|
|
var gitUser = 'guest'; |
|
|
|
var gitEmail = 'guest@bbh.org.in'; |
|
|
|
|
|
|
@@ -921,8 +984,6 @@ function __main( selectedinstance ){ |
|
|
|
} |
|
|
|
|
|
|
|
// var ENV = Object.assign({}, process.env); // Shallow clone it. |
|
|
|
var WshShell = WScript.CreateObject("WScript.Shell") |
|
|
|
var ENV = WshShell.Environment("Process") |
|
|
|
// WScript.echo( ENV("Path") ) |
|
|
|
function sysAddPathVar(path){ |
|
|
|
|
|
|
@@ -1194,8 +1255,8 @@ function __main( selectedinstance ){ |
|
|
|
steps.push( |
|
|
|
function(){ |
|
|
|
if (!existsSync(downloadsdir + '/' + self.installer)) { |
|
|
|
return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer] |
|
|
|
, { waitmsg : 'downloading node please wait' }) |
|
|
|
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.') |
|
|
@@ -1209,15 +1270,35 @@ function __main( selectedinstance ){ |
|
|
|
} |
|
|
|
} |
|
|
|
, { |
|
|
|
shellcmd: 'python2' |
|
|
|
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() { return Promise.resolve(true) } |
|
|
|
, install : function() { |
|
|
|
, 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) |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
|
|
|
|
return any(steps) |
|
|
|
// return any([any(steps), any(prompts)]) |
|
|
|
} |
|
|
|
, install : function() { |
|
|
|
var self = this; |
|
|
|
var ifns = [self.installcmd] |
|
|
|
if(!ifns.map) ifns.map = map; |
|
|
@@ -1239,12 +1320,31 @@ function __main( selectedinstance ){ |
|
|
|
, 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' |
|
|
|
, 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') |
|
|
|
|
|
|
|
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 : function() { |
|
|
|
var self = this; |
|
|
|
var ifns = [self.installcmd] |
|
|
@@ -1264,11 +1364,12 @@ function __main( selectedinstance ){ |
|
|
|
} |
|
|
|
, { |
|
|
|
shellcmd: 'mysql', |
|
|
|
url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' |
|
|
|
, installer: 'mysql-installer-community-8.0.29.0.msi' |
|
|
|
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.29.0.msi') |
|
|
|
, 'ACCEPT=YES', '/passive']] |
|
|
|
, path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') |
|
|
|
//, 'ACCEPT=YES', '/passive' |
|
|
|
]] |
|
|
|
, install : function() { |
|
|
|
var self = this; |
|
|
|
var ifns = [self.installcmd] |
|
|
@@ -1290,8 +1391,9 @@ function __main( selectedinstance ){ |
|
|
|
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 mysql please wait' }) |
|
|
|
, { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) |
|
|
|
} |
|
|
|
else { |
|
|
|
console.log(self.installer + ' Already exits Download skipped.') |
|
|
@@ -1322,7 +1424,9 @@ function __main( selectedinstance ){ |
|
|
|
console.log('Elxr Installsteps called') |
|
|
|
var installIfNotExists = function(){ |
|
|
|
console.log('Elxr PreInstallsteps called') |
|
|
|
var ifns = [ ['git', ['clone', 'http://git.bbh/chess/elxr'] ] ] |
|
|
|
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. |
|
|
@@ -1333,6 +1437,7 @@ function __main( selectedinstance ){ |
|
|
|
} |
|
|
|
} |
|
|
|
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) { |